Proyecto Android --- juego de rompecabezas (activado)

Debes haber entrado en contacto con minijuegos similares. Cuando ingreses al programa, las imágenes se organizarán desordenadas. Hay un total de nueve imágenes aleatorias. Debes moverte a la misma imagen que la plantilla dada para ser exitoso. Habrá tiempo durante el juego. Cuando el rompecabezas es exitoso, el tiempo se detiene, haga clic para reiniciar, la imagen se codificará nuevamente y el tiempo comenzará a contar nuevamente.

Pasos de implementación: 1. Dibujo de rompecabezas, 2. Configuración de codificación de rompecabezas, 3. Cambio de posición de fragmento de rompecabezas, 4. Condiciones de éxito de rompecabezas, 5. Reinicio de rompecabezas

Esta vez solo se implementan el paso 1 y el paso 2

Parte del conocimiento utilizado en el proceso de implementación, el mecanismo de hilo del controlador se utiliza para la medición del tiempo, y el principio de realización de la disposición desordenada de imágenes es escribirlas en forma numérica, y luego intercambiarlas en pares y colocarlas en el correspondiente ¡control S!

Los comentarios correspondientes se han hecho en el segmento de código. Si hay algo que no entiende, puede dejar un mensaje en el área de comentarios o enviar un mensaje privado. Si hay algún error en el contenido del artículo, tenga paciencia. y corrígeme!

el código se muestra a continuación:

código de diseño de rompecabezas xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas .android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    herramientas :context=".MainActivity"> 

    <TextView 
        android:layout_marginTop="20dp" 
        android:textColor="#FF0000" 
        android:textSize="30sp" 
        android:layout_gravity="center" 
        android:id=" 
        android:text="时间:0" />@+id/pt_tv_time" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
<LinearLayout 
    android:layout_marginTop="20dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/pt_line1" 
    android:layout_gravity="center" 
    android: orientación="horizontal"> 
    <ImageButton 
        android:src="@drawable/pt_id_00x00" 
        android:padding="0dp" 
        android:id="@+id/pt_id_00x00" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:onClick="onClick"/>
    <ImageButton 
        android:src="@drawable/pt_id_00x01" 
        android:padding="0dp"
        android:id="@+id/pt_id_00x01" 
        android:layout_gravity="center"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:onClick="onClick"/> 
    <ImageButton 
        android:src="@drawable/pt_id_00x02" 
        android:padding="0dp" 
        android:id="@+id /pt_id_00x02" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:onClick="onClick"/> 
</LinearLayout> 
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id= "@+id/pt_line2"
        android:orientación="horizontal"> 
        <ImagenBotón
            android:src="@drawable/pt_tv_01x00" 
            android:padding="0dp" 
            android:id="@+id/pt_id_01x00" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="onClick"/ > 
        <ImageButton 
            android:src="@drawable/pt_tv_01x01" 
            android:padding="0dp" 
            android:id="@+id/pt_id_01x01" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick=" onClick"/>@drawable/pt_tv_01x02" 
            android:relleno="0dp"onClick="onClick"/> 
        <ImagenBotón
            android:src="@drawable/pt_tv_01x02"0dp" 
            android:id="@+id/pt_id_02x00"
            android:id="@+id/pt_id_01x02" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="onClick"/> 
    </LinearLayout> 
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height ="wrap_content" 
        android:id="@+id/pt_line3" 
        android:layout_gravity="center" 
        android:orientation="horizontal"> 
        <ImageButton 
            android:src="@drawable/p1" 
            android:padding="0dp" 
            android :layout_width="envolver_contenido" 
            android:layout_height="envolver_contenido" 
            android:onClick="onClick"/> 
        <ImageButton 
            android:src="@drawable/p2" 
            android:padding="0dp" 
            android:id="@+id/pt_id_02x01" 
            android:layout_width= "wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="onClick"/> 
        <ImageButton 
            android:src="@drawable/p3" 
            android:padding="0dp" 
            android:id="@+id/pt_id_02x02" 
            android :layout_width="envolver_contenido"
            android:layout_height="wrap_content" 
            android:onClick="onClick"/>
    </LinearLayout> /LinearLayout> 
    <Botón 
        android:layout_marginTop="10dp"
        android:layout_gravity="center" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/pt_btn_restart" 
        android:onClick="restart" 
        android:text="重新开始"/> 
    <ImageView 
        android:layout_gravity="center" 
        android:layout_marginTop="10dp" 
        android:src="@drawable/yuantu" 
        android:id="@+id/pt_iv" 
        android:layout_width="210dp" 
        android:layout_height ="210dp"/> 
</LinearLayout>

Código de implementación de la función de actividad:

paquete com.ejemplo.rompecabezas; 

importar androidx.annotation.NonNull; 
importar androidx.appcompat.app.AppCompatActivity; 

importar android.anotación.SuppressLint; 
importar android.os.Bundle; 
importar android.os.Handler; 
importar android.os.Message; 
importar android.view.View; 
importar android.widget.Button; 
importar android.widget.ImageButton; 
importar android.widget.TextView; 

clase pública MainActivity extiende AppCompatActivity { 
ImageButton ib00, ib01, ib02, ib10, ib11, ib12, ib20, ib21, ib22; 
Botón reiniciarBtn; 
TextView timeTv; 
//定义时间的变量
int time = 0;  
//Almacenando la matriz de fragmentos para una gestión unificada
    privado int[]imagen={R.dibujable.pt_id_00x00,R.dibujable.pt_id_00x01,R.dibujable.pt_id_00x02, 
R.drawable.pt_tv_01x00, R.drawable.pt_tv_01x01, R.drawable.pt_tv_01x02, R.drawable.p1, R .drawable.p2,R.drawable.p3}; 
    //Declara una matriz de subíndices de una matriz de imágenes, organiza la matriz aleatoriamente 
    private int[]imageIndex=new int[image.length]; 
Handler handler=new Handler(){ 
    @ Anular 
    public void handleMessage(@NonNull Message msg) { 
     if (msg.what==1){ 
         time++; 
         timeTv.setText("Time: "+time+" segundos"); 
         handler.sendEmptyMessageDelayed(1,1000); 
     } 
    } 
} ; 
    @Override 
    protected void onCreate(Bundle SavedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        initView(); 
                rand2=(int)(Math.random()*(imageIndex.length-1)); 
        / / Interrumpir fragmentos 
        disruptRandpm();
        handler.sendEmptyMessageDelayed(1,1000); 
    } 
//Interrumpir aleatoriamente las irregularidades 
    private void disruptRandpm() { 
        for(int i=0;i<imageIndex.length;i++){ 
            imageIndex[i]=i; 
        } 
        //Estipular 20 veces , selecciona aleatoriamente los valores correspondientes a los dos subíndices a intercambiar 
        int rand1,rand2; 
        for(int j=0;j<20;j++){ 
            //Genera un subíndice aleatoriamente, el valor de 0-8 
            rand1=(int )(Math.random()*(imageIndex.length-1)); 
            //El subíndice generado aleatoriamente por segunda vez no puede ser el mismo que la primera vez. 
            do{ 
                if(rand1!=rand2){ 
                    break; 
                } 
            } while (true); 
            //Intercambia los valores correspondientes en las dos esquinas 
            swap(rand1,rand2); 
        } 
        // Organiza aleatoriamente el control especificado 
        ib00.setImageResource(image[imageIndex[0]]); 
        ib01.setImageResource(image[imageIndex[1]] ); 
        ib02.setImageResource(image[imageIndex[2]]); 
        ib10.setImageResource(image[imageIndex[3]]); 
        ib11.setImageResource(image[imageIndex[4]]); 
        ib12.setImageResource(image[imageIndex[5 ] ]]); 
        ib20.setImageResource(image[imageIndex[6]]); 
        ib21.setImageResource(image[imageIndex[7]]); 
        ib22.setImageResource(image[imageIndex[8]]); 
    } 
//intercambiar
    swap de vacío privado (int rand1, int rand2) { 
        int temp=imageIndex[rand1]; 
        imageIndex[rand1] =ÍndiceImagen[rand2];
        índice de imagen[rand2]=temp; 
    } 

    private void initView() { 
        ib00=findViewById(R.id.pt_id_00x00); 
        ib01=findViewById(R.id.pt_id_00x01); 
        ib02=findViewById(R.id.pt_id_00x02); 
        ib10=findViewById(R.id.pt_id_01x00); 
        ib11=findViewById(R.id.pt_id_01x01); 
        ib12=findViewById(R.id.pt_id_01x02); 
        ib20=findViewById(R.id.pt_id_02x00); 
        ib21=findViewById(R.id.pt_id_02x01); 
        ib22=findViewById(R.id.pt_id_02x02); 
        timeTv=findViewById(R.id.pt_tv_time); 
        reiniciarBtn=findViewById(R.id.pt_btn_restart); 

    } 

    public void onClick (Ver vista) { 
    }
 
    public void restart(Ver vista) { 
        //Manejador de interrupción 

        de rompecabezas.removeMessages(1); 
        //Reinicio del tiempo a 0, y re-⏲ 
        time=0; 
        timeTv.setText("Time:" +tiempo+" segundos"); 
        handler.sendEmptyMessageDelayed(1,1000); 

    } 
} Captura de 
pantalla del efecto:

Supongo que te gusta

Origin blog.csdn.net/Abtxr/article/details/126157673
Recomendado
Clasificación