import java.util.
HashMap;
import java.util.Map;
public class Actions extends Board{
char Empty ='.';
char Wall = '#';
public Actions(Board board) {
super(board.rows, board.cols);
this.board = board.board;
}
public void moveUp() {
for(int i=rows-1 ; i>0; i--){
for(int j=0 ;j<cols; j++) {
if ( board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i -
1][j]==(Empty)){
board[i-1][j] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i - 1][j]!=(Empty) && board[i - 1][j]!=(Wall) && board[i - 1][j]!=(board[i]
[j])) {
int k = i;
while (k + 1 < rows && board[k - 1][j]==(Empty)) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
k++;
}
while (k - 1 >=0 && board[k - 1][j]==(Empty)) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
k--;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i - 1][j]!=(Empty) && board[i - 1][j]!=(Wall) && board[i - 1][j]==(board[i]
[j])){
board[i - 1][j] = board[i][j];
board[i][j] = Empty;
int k = i;
while (k + 1 < rows && board[k - 1][j]==(board[k][j])) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
k++;
}
while (k - 1 >=0 && board[k - 1][j]==(board[k][j])) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
k--;
}
}
}
}
System.out.println("Moving up");
printBoard();
isWin();
}
public void moveDown() {
for(int i=0 ; i<rows-1 ; i++){
for(int j=0 ;j<cols; j++){
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i + 1]
[j]==(Empty)){
board[i+1][j] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i + 1][j]!=(Empty) && board[i + 1][j]!=(Wall) && board[i + 1][j]!=(board[i]
[j])) {
int k = i;
while (k + 1 < rows && board[k + 1][j]==(Empty)) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
k++;
}
while (k - 1 >=0 && board[k+1][j]==(Empty)) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
k--;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i + 1][j]!=(Empty) && board[i + 1][j]!=(Wall) && board[i + 1][j]==(board[i]
[j])){
board[i + 1][j] = board[i][j];
board[i][j] = Empty;
int k = i;
while (k + 1 < rows && board[k + 1][j]==(board[k][j])) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
k++;
}
while (k - 1 >=0 && board[k+1][j]==(board[k][j])) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
k--;
}
}
}
}
System.out.println("Moving down");
printBoard();
isWin();
public void moveLeft() {
for (int i = 0; i < rows; i++) {
for (int j = cols -1; j > 0; j--) {
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i ][j-
1]==(Empty)){
board[i][j- 1] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j-1]!=(Empty) && board[i ][j-1]!=(Wall) && board[i][j - 1]!=(board[i][j]))
{
int k = j;
while (k + 1 < cols && board[i][k - 1]==(Empty)) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
k++;
}
while (k - 1 >=0 && board[i][k - 1]==(Empty)) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
k--;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j - 1]!=(Empty) && board[i][j- 1]!=(Wall) && board[i][j- 1]==(board[i]
[j])){
int k = j;
while (k + 1 < cols && board[i][k - 1]==(board[i][k])) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
k++;
}
while (k - 1 >=0 && board[i][k - 1]==(board[i][k])) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
k--;
}
}
}
}
System.out.println("Moving left");
printBoard();
isWin();
}
public void moveRight() {
for(int i=0 ; i<rows ; i++) {
for(int j=0 ;j<cols-1; j++){
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i ][j+
1]==(Empty)){
board[i][j+ 1] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j+1]!=(Empty) && board[i ][j+1]!=(Wall) && board[i][j + 1]!=(board[i][j]))
{
int k = j;
while (k + 1 < cols && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k++;
}
while (k - 1 >= 0 && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k--;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j + 1]!=(Empty) && board[i][j+ 1]!=(Wall) && board[i][j+ 1]==(board[i]
[j])){
int k = j;
while (k + 1 < cols && board[i][k + 1]==(board[i][k])) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k++;
}
while (k - 1 >= 0 && board[i][k + 1]==(board[i][k])) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k--;
}
}
}
}
System.out.println("Moving right");
printBoard();
isWin();
}
public boolean isWin(){
Map<Character, Integer> colorsNum = new HashMap<>();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
char cell = board[i][j];
if (cell==(Wall) || cell==(Empty)) {
continue;
}
colorsNum.put(cell, colorsNum.getOrDefault(cell, 0) + 1);
}
}
for (int i : colorsNum.values()) {
if (i != 1) {
return false;
}
}
System.out.println(" (; (: you WIN the game :) ;)");
return true;
}
public void restartGame() {
System.out.println("Restarting the game...");
saveInitialState();
resetToInitialState();
}
import java.util.HashMap;
import java.util.Map;
public class Actions extends Board{
char Empty ='.';
char Wall = '#';
public Actions(Board board) {
super(board.rows, board.cols);
this.board = board.board;
}
public void moveUp() {
for(int i=rows-1 ; i>0; i--){
for(int j=0 ;j<cols; j++) {
if ( board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i -
1][j]==(Empty)){
board[i-1][j] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i - 1][j]!=(Empty) && board[i - 1][j]!=(Wall) && board[i - 1][j]!=(board[i]
[j])) {
int k = i;
while (k - 1 >= 0 && board[k][j] != Empty && board[k - 1]
[j]==(Empty)) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
k--;
}
if (k - 1 >= 0 && board[k - 1][j]==(Empty)) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i - 1][j]!=(Empty) && board[i - 1][j]!=(Wall) && board[i - 1][j]==(board[i]
[j])){
board[i - 1][j] = board[i][j];
board[i][j] = Empty;
int k = i;
while (k - 1 >=0 && board[k - 1][j]==(board[i][j])) {
board[k - 1][j] = board[i][j];
board[k][j] = Empty;
k--;
}
if (k - 1 >= 0 && board[k - 1][j]==(board[i][j])) {
board[k - 1][j] = board[k][j];
board[k][j] = Empty;
}
}
}
}
System.out.println("Moving up");
printBoard();
isWin();
}
public void moveDown() {
for(int i=0 ; i<rows-1 ; i++){
for(int j=0 ;j<cols; j++){
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i + 1]
[j]==(Empty)){
board[i+1][j] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i + 1][j]!=(Empty) && board[i + 1][j]!=(Wall) && board[i + 1][j]!=(board[i]
[j])) {
int k = i;
while (k + 1 < rows && board[k + 1][j]==(Empty)) {
board[k + 1][j] = board[i][j];
board[k][j] = Empty;
k++;
}
if (k + 1 < rows && board[k + 1][j]==(Empty)) {
board[k + 1][j] = board[i][j];
board[k][j] = Empty;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i + 1][j]!=(Empty) && board[i + 1][j]!=(Wall) && board[i + 1][j]==(board[i]
[j])){
board[i + 1][j] = board[i][j];
board[i][j] = Empty;
int k = i;
while (k + 1 < rows && board[k + 1][j]==(board[k][j])) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
k++;
}
if (k + 1 < rows && board[k + 1][j]==(board[k][j])) {
board[k + 1][j] = board[k][j];
board[k][j] = Empty;
}
}
}
}
System.out.println("Moving down");
printBoard();
isWin();
public void moveLeft() {
for (int i = 0; i < rows; i++) {
for (int j = cols -1; j > 0; j--) {
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i ][j-
1]==(Empty)){
board[i][j- 1] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j-1]!=(Empty) && board[i ][j-1]!=(Wall) && board[i][j - 1]!=(board[i][j]))
{
int k = j;
while (k - 1 >=0 && board[i][k] != Empty && board[i][k -
1]==(Empty)) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
k--;
}
if (k - 1 >=0 && board[i][k] != Empty && board[i][k -
1]==(Empty)) {
board[i][k - 1] = board[i][k];
board[i][k] = Empty;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j - 1]!=(Empty) && board[i][j- 1]!=(Wall) && board[i][j- 1]==(board[i]
[j])){
int k = j;
while (k - 1>=0 && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k--;
}
if (k - 1>=0 && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
}
}
}
}
System.out.println("Moving left");
printBoard();
isWin();
}
public void moveRight() {
for(int i=0 ; i<rows ; i++) {
for(int j=0 ;j<cols-1; j++){
if (board[i][j]!=(Wall) && board[i][j]!=(Empty) && board[i ][j+
1]==(Empty)){
board[i][j+ 1] = board[i][j];
board[i][j] = Empty;
} else if (board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j+1]!=(Empty) && board[i ][j+1]!=(Wall) && board[i][j + 1]!=(board[i][j]))
{
int k = j;
while (k + 1 < cols && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k++;
}
if (k + 1 < cols && board[i][k + 1]==(Empty)) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
}
} else if(board[i][j]!=(Wall) && board[i][j]!=(Empty) &&
board[i][j + 1]!=(Empty) && board[i][j+ 1]!=(Wall) && board[i][j+ 1]==(board[i]
[j])){
int k = j;
while (k + 1 < cols && board[i][k + 1]==(board[i][k])) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
k++;
}
if (k + 1 < cols && board[i][k + 1]==(board[i][k])) {
board[i][k + 1] = board[i][k];
board[i][k] = Empty;
}
}
}
}
System.out.println("Moving right");
printBoard();
isWin();
}
public boolean isWin(){
Map<Character, Integer> colorsNum = new HashMap<>();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
char cell = board[i][j];
if (cell==(Wall) || cell==(Empty)) {
continue;
}
colorsNum.put(cell, colorsNum.getOrDefault(cell, 0) + 1);
}
}
for (int i : colorsNum.values()) {
if (i != 1) {
return false;
}
}
System.out.println(" (; (: you WIN the game :) ;)");
return true;
}
public void restartGame() {
System.out.println("Restarting the game...");
saveInitialState();
resetToInitialState();
}