Advertisement
mmayoub

Game15, MainActivity.java

Jan 20th, 2023 (edited)
801
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.38 KB | Software | 0 0
  1. package com.example.mygame15board;
  2.  
  3. import androidx.appcompat.app.AppCompatActivity;
  4.  
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. import java.util.Random;
  11.  
  12. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  13.     Random rnd = new Random();
  14.     Button[][] btns = new Button[4][4];
  15.     int emptyRow, emptyCol;
  16.  
  17.     MySoundPool myPool;
  18.  
  19.     @Override
  20.     protected void onCreate(Bundle savedInstanceState) {
  21.         super.onCreate(savedInstanceState);
  22.         setContentView(R.layout.activity_main);
  23.  
  24.         for (int r = 0; r < 4; r++) {
  25.             for (int c = 0; c < 4; c++) {
  26.                 int btnId = getResources().getIdentifier("button" + r + c, "id", this.getPackageName());
  27.                 btns[r][c] = findViewById(btnId);
  28.                 btns[r][c].setOnClickListener(this);
  29.             }
  30.         }
  31.  
  32.         putNumbers();
  33.         myPool = new MySoundPool(this);
  34.     }
  35.  
  36.     public void orderTheBoard(View v) {
  37.         int i = 1;
  38.         for (int r = 0; r < 4; r++) {
  39.             for (int c = 0; c < 4; c++) {
  40.                 //btns[r][c].setText((4*r+c) + "");
  41.                 btns[r][c].setText(i + "");
  42.                 i = (i + 1) % 16;
  43.             }
  44.         }
  45.  
  46.         btns[emptyRow][emptyCol].setVisibility(View.VISIBLE);
  47.  
  48.         btns[3][3].setVisibility(View.INVISIBLE);
  49.         emptyRow = 3;
  50.         emptyCol = 3;
  51.     }
  52.  
  53.     @Override
  54.     public void onClick(View v) {
  55.         int clickedRow = -1, clickedCol = -1;
  56.         // find cliced row and column
  57.         for (int r = 0; r < 4; r++) {
  58.             for (int c = 0; c < 4; c++) {
  59.                 if (btns[r][c].getId() == v.getId()) {
  60.                     clickedRow = r;
  61.                     clickedCol = c;
  62.                 }
  63.             }
  64.         }
  65.  
  66.         if (canMove(clickedRow, clickedCol)) {
  67.             myPool.playClickOk();
  68.  
  69.             // set visibility
  70.             v.setVisibility(View.INVISIBLE);
  71.             btns[emptyRow][emptyCol].setVisibility(View.VISIBLE);
  72.  
  73.             // switch texts
  74.             btns[emptyRow][emptyCol].setText(((Button) v).getText().toString());
  75.             ((Button) v).setText("0");
  76.  
  77.             // update emptyRow and emptyCol
  78.             emptyRow = clickedRow;
  79.             emptyCol = clickedCol;
  80.  
  81.             // check if game is over
  82.             if (gameIsOver()) {
  83.                 myPool.playGameOver();
  84.                 Toast.makeText(this, "Game is over!", Toast.LENGTH_SHORT).show();
  85.                 // finish();
  86.                 for (int r = 0; r < 4; r++) {
  87.                     for (int c = 0; c < 4; c++) {
  88.                         //btns[r][c].setEnabled(false);
  89.                         btns[r][c].setOnClickListener(null);
  90.                     }
  91.                 }
  92.  
  93.             }
  94.         } else {
  95.             myPool.playClickError();
  96.         }
  97.     }
  98.  
  99.     private boolean canMove(int clickedRow, int clickedCol) {
  100.         if (clickedRow == emptyRow && (clickedCol == emptyCol + 1 || clickedCol == emptyCol - 1))
  101.         //if (clickedRow==emptyRow && Math.abs(clickedCol- emptyCol)==1)
  102.         {
  103.             return true;
  104.         }
  105.  
  106.         if (clickedCol == emptyCol && (clickedRow == emptyRow + 1 || clickedRow == emptyRow - 1)) {
  107.             return true;
  108.         }
  109.  
  110.         return false;
  111.     }
  112.  
  113.     private boolean gameIsOver() {
  114.         int i = 1;
  115.         for (int r = 0; r < 4; r++) {
  116.             for (int c = 0; c < 4; c++) {
  117.                 int no = Integer.parseInt(btns[r][c].getText().toString());
  118.                 if (no == i)
  119.                     i = (i + 1) % 16;
  120.                 else
  121.                     return false;
  122.             }
  123.         }
  124.         return true;
  125.     }
  126.  
  127.     public void putNumbers() {
  128.         int i = 0;
  129.         for (int r = 0; r < 4; r++) {
  130.             for (int c = 0; c < 4; c++) {
  131.                 //btns[r][c].setText((4*r+c) + "");
  132.                 btns[r][c].setText(i + "");
  133.                 i++;
  134.             }
  135.         }
  136.  
  137.         // switch numbers on buttons 20 up to times
  138.         int switchCount = rnd.nextInt(20);
  139.         for (i = 0; i < switchCount; i++) {
  140.             int n1 = rnd.nextInt(16);
  141.             int n2 = rnd.nextInt(16);
  142.  
  143.             while (n1 == n2) {
  144.                 n2 = rnd.nextInt(16);
  145.             }
  146.  
  147.             // switch buttons
  148.             Button b1, b2;
  149.             b1 = btns[getRow(n1)][getCol(n1)];
  150.             b2 = btns[getRow(n2)][getCol(n2)];
  151.  
  152.             String temp = b1.getText().toString();
  153.             b1.setText(b2.getText().toString());
  154.             b2.setText(temp);
  155.         }
  156.  
  157.         // hide button with zero
  158.         for (int r = 0; r < 4; r++) {
  159.             for (int c = 0; c < 4; c++) {
  160.                 if (btns[r][c].getText().toString().equals("0")) {
  161.                     btns[r][c].setVisibility(View.INVISIBLE);
  162.                     emptyRow = r;
  163.                     emptyCol = c;
  164.                 }
  165.             }
  166.         }
  167.     }
  168.  
  169.     private int getRow(int n) {
  170.         return n / 4;
  171.     }
  172.  
  173.     private int getCol(int n) {
  174.         return n % 4;
  175.     }
  176.  
  177.     public void restart(View view) {
  178.         btns[emptyRow][emptyCol].setVisibility(View.VISIBLE);
  179.         putNumbers();
  180.         for (int r = 0; r < 4; r++) {
  181.             for (int c = 0; c < 4; c++) {
  182.                 btns[r][c].setOnClickListener(this);
  183.             }
  184.         }
  185.     }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement