mmayoub

NumbersPuzle, Puzzle.java, 02.10.2021

Oct 2nd, 2021 (edited)
1,328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.33 KB | None | 0 0
  1. package com.example.mynumberspuzzle;
  2.  
  3. import java.util.Random;
  4.  
  5. public class Puzzle {
  6.     // board size
  7.     private int rows;
  8.     private int cols;
  9.     private Random rnd = new Random();
  10.  
  11.     // number of moves
  12.     private int movesCount;
  13.  
  14.     // order of numbers on the game board
  15.     private int[][] board;
  16.  
  17.     // postion of the blank
  18.     private int blankRow, blankCol;
  19.  
  20.     public Puzzle(int rows, int cols) {
  21.         this.rows = rows;
  22.         this.cols = cols;
  23.         board = new int[rows][cols];
  24.  
  25.         restart();
  26.     }
  27.  
  28.     public void orderBoard() {
  29.         for (int r = 0; r < rows; r++) {
  30.             for (int c = 0; c < cols; c++) {
  31.                 board[r][c] = (r * cols + c + 1) % (rows * cols);
  32.             }
  33.         }
  34.  
  35.         blankRow = rows - 1;
  36.         blankCol = cols - 1;
  37.     }
  38.  
  39.     public void restart() {
  40.         movesCount = 5;
  41.  
  42.         for (int r = 0; r < rows; r++) {
  43.             for (int c = 0; c < cols; c++) {
  44.                 board[r][c] = r * cols + c;
  45.             }
  46.         }
  47.  
  48.         for (int s = 0; s < 20; s++) {
  49.             int r1 = rnd.nextInt(rows);
  50.             int c1 = rnd.nextInt(cols);
  51.  
  52.             int r2 = rnd.nextInt(rows);
  53.             int c2 = rnd.nextInt(cols);
  54.  
  55.             swap(r1, c1, r2, c2);
  56.         }
  57.  
  58.     }
  59.  
  60.     private void swap(int r1, int c1, int r2, int c2) {
  61.         int temp = board[r1][c1];
  62.         board[r1][c1] = board[r2][c2];
  63.         board[r2][c2] = temp;
  64.  
  65.         if (board[r1][c1] == 0) {
  66.             blankRow = r1;
  67.             blankCol = c1;
  68.         } else if (board[r2][c2] == 0) {
  69.             blankRow = r2;
  70.             blankCol = c2;
  71.         }
  72.     }
  73.  
  74.     public boolean move(int row, int col) {
  75.         if (movesCount > 0) {
  76.             boolean moveInSameRow = blankRow == row && (blankCol == col + 1 || blankCol == col - 1);
  77.             boolean moveInSameCol = blankCol == col && (blankRow == row + 1 || blankRow == row - 1);
  78.  
  79.             if (moveInSameRow || moveInSameCol) {
  80.                 swap(row, col, blankRow, blankCol);
  81.                 movesCount--;
  82.                 return true;
  83.             }
  84.         }
  85.  
  86.         return false;
  87.     }
  88.  
  89.     public boolean isGameOver() {
  90.         for (int r = 0; r < rows; r++) {
  91.             for (int c = 0; c < cols; c++) {
  92.                 if (board[r][c] != (r * cols + c + 1) % (rows * cols)) {
  93.                     return false;
  94.                 }
  95.             }
  96.         }
  97.         return true;
  98.     }
  99.  
  100.     public int getRows() {
  101.         return rows;
  102.     }
  103.  
  104.     public void setRows(int rows) {
  105.         this.rows = rows;
  106.     }
  107.  
  108.     public int getCols() {
  109.         return cols;
  110.     }
  111.  
  112.     public void setCols(int cols) {
  113.         this.cols = cols;
  114.     }
  115.  
  116.     public int getMovesCount() {
  117.         return movesCount;
  118.     }
  119.  
  120.     public void setMovesCount(int movesCount) {
  121.         this.movesCount = movesCount;
  122.     }
  123.  
  124.     public int[][] getBoard() {
  125.         return board;
  126.     }
  127.  
  128.     public void setBoard(int[][] board) {
  129.         this.board = board;
  130.     }
  131.  
  132.     public int getBlankRow() {
  133.         return blankRow;
  134.     }
  135.  
  136.     public void setBlankRow(int blankRow) {
  137.         this.blankRow = blankRow;
  138.     }
  139.  
  140.     public int getBlankCol() {
  141.         return blankCol;
  142.     }
  143.  
  144.     public void setBlankCol(int blankCol) {
  145.         this.blankCol = blankCol;
  146.     }
  147.  
  148.  
  149. }
  150.  
Add Comment
Please, Sign In to add comment