Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
adding gs 4
  • Loading branch information
sos13004 committed Apr 5, 2017
1 parent 7202456 commit a8a92df
Show file tree
Hide file tree
Showing 3 changed files with 211 additions and 0 deletions.
155 changes: 155 additions & 0 deletions src/CheckersGameState4.java
@@ -0,0 +1,155 @@
import java.util.List;
import java.util.ArrayList;
/*Sparse representation: The set of pieces is represented as a list of pieces and locations: each piece is
represented by its token (one-character string) plus its board location (row, col).*/

public class CheckersGameState4 implements CheckersGameState{
/**
* Savanna Smith
* Created: 4/2/17
* Modified: 4/4/17
* Sparse Board representation
*/
private ArrayList<Piece> _pieces;
private int _player; //1 = black, 0 = white

public CheckersGameState4(int player){
_pieces = new ArrayList<Piece>();
_player = player;
initPieces();
}
public CheckersGameState4(int player, ArrayList<Piece> pieces){
_pieces = pieces;
_player = player;
}

public static void main(String[] args){ //for testing
CheckersGameState4 cg = new CheckersGameState4(0);
System.out.println(cg.player());
cg.printState();
System.out.println("");
for(Move move : cg.actions()){
System.out.println(move);
cg.result(move).printState();
System.out.println();
}
}

void initPieces(){
int col = 0;
char color = 'b';
for(int row = 7; row>=0; row--){
if(row == 4) {
row--;
color = 'w';
}
else{
col = (col+1) %2; //toggle starting column
while(col <= 7){
_pieces.add(new Piece(color, row, col));
col+=2;
}
}
}
}
@Override
public String player () {
if(_player == 1) return "black";
else return "white";
}

boolean samePlayer(int a, char b){
if((a==1 && b == 'b') || (a==1 && b == 'B')) return true;
if((a==0 && b == 'w') || (a==0 && b == 'W')) return true;
return false;
}
@Override
public List<Move> actions (){
ArrayList<Move> jumps = new ArrayList<Move>();
ArrayList<Move> avail = new ArrayList<Move>();
char[] neigh;
int[] jumpPath;

for(Piece p: _pieces){
if(samePlayer(_player, p._token)){
neigh = neighbors(p);
for(int i = 0; i<4; i++){
if(neigh[i] == 'x') avail.add(new Move4(p, i));
if(!samePlayer(_player, neigh[i])) //check for jumps
jumpPath = computeJumps(p, i); //do something with this
}
}
}
if(jumps.isEmpty()) return avail;
return jumps;
}

int[] computeJumps(Piece p, int i){
return null;
}

//return piece's 4 neighbors
char[] neighbors(Piece p){
char[] neigh = new char[4];
if(p._token!='b'){ //all things b cannot do
if(p._row < 7 && p._col > 0)
neigh[0] = spotContains(p._row+1, p._col-1);
if(p._row < 7 && p._col < 7)
neigh[1] = spotContains(p._row+1, p._col+1);
}
if(p._token!='w'){ //all things w cannot do
if(p._row > 0 && p._col > 0)
neigh[2] = spotContains(p._row-1, p._col-1);
if(p._row > 0 && p._col < 7)
neigh[3] = spotContains(p._row-1, p._col+1);
}
return neigh;
}

//go through all pieces to see what this spot contains
char spotContains(int row, int col){
for(Piece p : _pieces){
if(p._row == row && p._col == col){
return p._token;
}
}
return 'x';
}

@Override
//return resulting state from taking move x
public CheckersGameState result (Move x){
Move4 m = (Move4) x;
//Piece[] pieces;
if(m._path.length == 4){ //only src and dest
m._piece._row = m._path[2]; //is this actually changing the piece that belongs to _pieces?
m._piece._col = m._path[3];
if(m._path[2] == 7 && m._piece._token == 'w'){
m._piece._token = 'W'; //king me
}
if(m._path[2] == 0 && m._piece._token == 'b'){
m._piece._token = 'B'; //king me
}
}
//else consider jumps.
//remove from array list if captured.
//return (new CheckersGameState4((player+1)%2, pieces));
return this;
}

@Override
public void printState (){
char[][] board = new char[8][8];
for(Piece p: _pieces){
board[p._row][p._col] = p._token;
}
for(int i = 7; i>=0; i--){
for(int j= 0; j<8; j++){
if(board[i][j]== '\u0000') System.out.print("-");
else System.out.print("" + board[i][j]);
}
System.out.println("");
}
}

}
45 changes: 45 additions & 0 deletions src/Move4.java
@@ -0,0 +1,45 @@

public class Move4 implements Move{
int[] _path;
Piece _piece;

public int source(){ return 0;}
public int destination(){ return 0;}

public Move4(Piece p, int[] path){
_piece = p;
_path = path;
}

public Move4(Piece p, int dest){
_piece = p;
//_path = new int[4];
if(dest == 0) {
_path = new int[] {p._row, p._col, p._row + 1, p._col-1};
}
else if(dest == 1) {
_path = new int[] {p._row, p._col, p._row + 1, p._col+1};
}
else if(dest == 2) {
_path = new int[] {p._row, p._col, p._row - 1, p._col-1};
}
else if(dest == 3) {
_path = new int[] {p._row, p._col, p._row - 1, p._col+1};
}
else System.out.println("Problem in Move constructor");
}

// Returns a list of captured positions
public int[] captures(){
return new int[2];
}

// Returns the string representation of a move
public String toString(){
String output = "";
for(int i = 0; i<_path.length; i++) {
output += "(" + _path[i] + ":" + _path[++i] + ")";
}
return output;
}
}
11 changes: 11 additions & 0 deletions src/Piece.java
@@ -0,0 +1,11 @@
class Piece{
//represents a game piece
char _token;
int _row;
int _col;
public Piece(char t, int r, int c) {
_token = t;
_row = r;
_col = c;
}
}

0 comments on commit a8a92df

Please sign in to comment.