From b0a22d0eaf1c2bac40262c4422c69385686973fd Mon Sep 17 00:00:00 2001 From: savannaos Date: Tue, 4 Apr 2017 23:56:18 -0400 Subject: [PATCH] game state 1 added --- src/GameState1.java | 393 ++++++++++++++++++++++++++++++++++++++++++++ src/Move1.java | 22 +++ src/testcases1.txt | 141 ++++++++++++++++ 3 files changed, 556 insertions(+) create mode 100644 src/GameState1.java create mode 100644 src/Move1.java create mode 100644 src/testcases1.txt diff --git a/src/GameState1.java b/src/GameState1.java new file mode 100644 index 0000000..5a27c90 --- /dev/null +++ b/src/GameState1.java @@ -0,0 +1,393 @@ +import java.util.ArrayList; +import java.util.List; + +public class GameState1 implements CheckersGameState{ + + public static void main(String[] args){ + //testing some methods + GameState1 game = new GameState1(); //initial game state + game.printState(); //print the state + List moves = game.actions(); + System.out.println(); + System.out.println("Available Moves:"); + for(Move m : moves){ + m.printMove(); + } + System.out.println("\n" + "Test1: Move(2,1) to (3,0) result (moving black piece foward"); + CheckersGameState result = game.result(new Move(2,1,3,0,false)); + result.printState(); + List moves2 = result.actions(); + System.out.println(); + System.out.println("Available Moves:"); + for(Move m : moves2){ + m.printMove(); + } + System.out.println("\n" + "Test2: Move(5,2) to (4,1) result (moving white piece foward"); + CheckersGameState result2 = result.result(new Move(5,2,4,1,false)); + result2.printState(); + List moves3 = result2.actions(); + System.out.println(); + System.out.println("Available Moves:"); + for(Move m3 : moves3){ + m3.printMove(); + } + System.out.println("\n" + "Test3: Move(3,0) to (5,2) result (jumping and capturing a piece)"); + CheckersGameState result3 = result2.result(new Move(3,0,5,2,true)); + result3.printState(); + + String[][] b = new String[8][8]; + b[1][0] = "w"; + b[0][3] = "b"; + b[0][5] = "b"; + GameState1 g = new GameState1(b,false); + g.printState(); + List m4 = g.actions(); + for(Move m : m4){ + m.printMove(); + } + + System.out.println("\n" + "Test4: Move(1,0) to (0,1) result (creating a king)"); + CheckersGameState g2 = g.result(new Move(1,0,0,1,false)); + g2.printState(); + + String[][] b2 = new String[8][8]; + b2[4][2] = "W"; + b2[3][1] = "b"; + b2[3][3] = "B"; + b2[5][1] = "b"; + b2[5][3] = "b"; + GameState1 g3 = new GameState1(b2,false); + g3.printState(); + List m5 = g3.actions(); + for(Move m : m5){ + m.printMove(); + } + System.out.println("\n" + "Test6: Move(4,2) to (2,0) result (king jumping backward and capturing)"); + CheckersGameState g4 = g3.result(new Move(4,2,2,0,true)); + g4.printState(); + } + + + + private boolean _player; //true is White, Black is false + private String[][] _board; // 2D rep of board + + public GameState1(){ + String[][] b = new String[8][8]; + b[0][1]="b"; + b[0][3]="b"; + b[0][5]="b"; + b[0][7]="b"; + b[1][0]="b"; + b[1][2]="b"; + b[1][4]="b"; + b[1][6]="b"; + b[2][1]="b"; + b[2][3]="b"; + b[2][5]="b"; + b[2][7]="b"; + b[5][0]="w"; + b[5][2]="w"; + b[5][4]="w"; + b[5][6]="w"; + b[6][1]="w"; + b[6][3]="w"; + b[6][5]="w"; + b[6][7]="w"; + b[7][0]="w"; + b[7][2]="w"; + b[7][4]="w"; + b[7][6]="w"; + + _board = b; + _player = true; + } + + public GameState1(String[][] board, boolean player){ + _player = player; + _board = board; + } + + + @Override + public List actions() { + GameState1 game = this; + ArrayList list = new ArrayList<>(); + String[][] b = game._board; + for(int i=0; i<8; i++){ + for(int j=0; j<8; j++){ + if(b[i][j]!=null && this._player){//if not null and blacks turn + if(b[i][j] == "b"){ + if(game.canJumpL(i,j)){list.add(new Move(i,j,i+2,j-2,true));} + if(game.canJumpR(i,j)){list.add(new Move(i,j,i+2,j+2,true));} + if(game.canMoveL(i,j)){list.add(new Move(i,j,i+1,j-1,false));} + if(game.canMoveR(i,j)){list.add(new Move(i,j,i+1,j+1,false));} + + } + else if(b[i][j] == "B"){ + if(game.canJumpL(i,j)){list.add(new Move(i,j,i+2,j-2,true));} + if(game.canJumpR(i,j)){list.add(new Move(i,j,i+2,j+2,true));} + if(game.canMoveL(i,j)){list.add(new Move(i,j,i+1,j-1,false));} + if(game.canMoveR(i,j)){list.add(new Move(i,j,i+1,j+1,false));} + if(game.canBackL(i,j)){list.add(new Move(i,j,i-1,j-1,false));} + if(game.canBackR(i,j)){list.add(new Move(i,j,i-1,j+1,false));} + if(game.canJumpBackL(i,j)){list.add(new Move(i,j,i-2,j-2,true));} + if(game.canJumpBackR(i,j)){list.add(new Move(i,j,i-2,j-2,true));} + } + } + else if(b[i][j]!=null && !this._player){ + if(b[i][j] == "w"){ + if(game.canJumpBackL(i,j)){list.add(new Move(i,j,i-2,j-2,true));} + if(game.canJumpBackR(i,j)){list.add(new Move(i,j,i-2,j+2,true));} + if(game.canBackL(i,j)){list.add(new Move(i,j,i-1,j-1,false));} + if(game.canBackR(i,j)){list.add(new Move(i,j,i-1,j+1,false));} + } + else if(b[i][j] == "W"){ + if(game.canJumpL(i,j)){list.add(new Move(i,j,i+2,j-2,true));} + if(game.canJumpR(i,j)){list.add(new Move(i,j,i+2,j+2,true));} + if(game.canMoveL(i,j)){list.add(new Move(i,j,i+1,j-1,false));} + if(game.canMoveR(i,j)){list.add(new Move(i,j,i+1,j+1,false));} + if(game.canBackL(i,j)){list.add(new Move(i,j,i-1,j-1,false));} + if(game.canBackR(i,j)){list.add(new Move(i,j,i-1,j+1,false));} + if(game.canJumpBackL(i,j)){list.add(new Move(i,j,i-2,j-2,true));} + if(game.canJumpBackR(i,j)){list.add(new Move(i,j,i-2,j+2,true));} + } + } + + } + } + return list; + } + @Override + //fix this + public CheckersGameState result(Move x) { + GameState1 game = this; + String[][] b = this._board; + boolean p = this._player; + CheckersGameState next = null; + //check if this situation will result in a king B + if((x._x == 6 && x._x2 == 7)&& (b[x._x][x._y] != "W")){ + b[x._x2][x._y2] = "B"; + b[x._x][x._y] = null; + if(game.canJumpBackL(x._x2, x._y2) || game.canJumpBackR(x._x2, x._y2) ){ + next = new GameState1(b,p); + } + else + next = new GameState1(b,!p); + } + //check if this will result in king W + else if((x._x == 1 && x._x2 == 0)&& (b[x._x][x._y] != "B")){ + b[x._x2][x._y2] = "W"; + b[x._x][x._y] = null; + if(game.canJumpL(x._x2, x._y2) || game.canJumpR(x._x2, x._y2)){ + next = new GameState1(b,p); + } + else + next = new GameState1(b,!p); + } + //if you get a king by jumping into end of whites side, change to B and remove captured piece + else if((x._x == 5 && x._x2 == 7)&& (b[x._x][x._y] != "W")){ + b[x._x2][x._y2] = "B"; + b[x._x][x._y] = null; + if(x._y2>x._y){ //jumping right, set the one you jumped over to be null + b[x._x+1][x._y+1] = null; + } + else{ + b[x._x+1][x._y-1] = null; + } + if(game.canJumpBackL(x._x2, x._y2) || game.canJumpBackR(x._x2, x._y2)){ + //if there is another jump we can take, return state with same players turn + next = new GameState1(b,p); + } + else{ + next = new GameState1(b,!p); + } + } + //if you get a king by jumping to end of blacks side, change to W and remove captured piece + else if((x._x == 2 && x._x2 == 0)&& (b[x._x][x._y] != "B")){ + b[x._x2][x._y2] = "W"; + b[x._x][x._y] = null; + if(x._y2>x._y){ //jumping right, set the one you jumped over to be null + b[x._x-1][x._y+1] = null; + } + else{ + b[x._x-1][x._y-1] = null; + } + if(game.canJumpL(x._x2, x._y2) || game.canJumpR(x._x2, x._y2)){ + //if there is another jump we can take, return state with same players turn + next = new GameState1(b,p); + } + else{ + next = new GameState1(b,!p); + } + } + //if just a normal jump + else if(x._b){ + String s = b[x._x][x._y]; + b[x._x2][x._y2] = s; + if(x._y2>x._y && x._x2>x._x){ + b[x._x+1][x._y+1] = null; + b[x._x][x._y]=null; + next = new GameState1(b,!p); + } + else if(x._y2x._x){ + b[x._x+1][x._y-1] = null; + b[x._x][x._y]=null; + next = new GameState1(b,!p); + } + else if(x._y2>x._y && x._x2