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: