completed with EvolutionOfWar

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player

Fork of Lab4-Reversi by Timothy Li

Committer:
aolmenki
Date:
Tue Nov 01 11:46:09 2016 +0000
Revision:
1:cc72ad58982b
Parent:
0:fce0f9489de3
reversi v1 with EvolutionofWar;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EvolutionOfWar 0:fce0f9489de3 1 #include "mbed.h"
EvolutionOfWar 0:fce0f9489de3 2 #include "uLCD_4DGL.h"
aolmenki 1:cc72ad58982b 3 #include "SDFileSystem.h"
aolmenki 1:cc72ad58982b 4 #include "wave_player.h"
EvolutionOfWar 0:fce0f9489de3 5 uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object
aolmenki 1:cc72ad58982b 6 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
aolmenki 1:cc72ad58982b 7 PwmOut Speaker(p21);
aolmenki 1:cc72ad58982b 8 AnalogOut DACout(p18);
EvolutionOfWar 0:fce0f9489de3 9
aolmenki 1:cc72ad58982b 10 wave_player waver(&DACout);
EvolutionOfWar 0:fce0f9489de3 11
EvolutionOfWar 0:fce0f9489de3 12 class Nav_Switch
EvolutionOfWar 0:fce0f9489de3 13 {
EvolutionOfWar 0:fce0f9489de3 14 public:
EvolutionOfWar 0:fce0f9489de3 15 Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
EvolutionOfWar 0:fce0f9489de3 16 int read();
EvolutionOfWar 0:fce0f9489de3 17 //boolean functions to test each switch
EvolutionOfWar 0:fce0f9489de3 18 bool up();
EvolutionOfWar 0:fce0f9489de3 19 bool down();
EvolutionOfWar 0:fce0f9489de3 20 bool left();
EvolutionOfWar 0:fce0f9489de3 21 bool right();
EvolutionOfWar 0:fce0f9489de3 22 bool fire();
EvolutionOfWar 0:fce0f9489de3 23 //automatic read on RHS
EvolutionOfWar 0:fce0f9489de3 24 operator int ();
EvolutionOfWar 0:fce0f9489de3 25 //index to any switch array style
EvolutionOfWar 0:fce0f9489de3 26 bool operator[](int index) {
EvolutionOfWar 0:fce0f9489de3 27 return _pins[index];
EvolutionOfWar 0:fce0f9489de3 28 };
EvolutionOfWar 0:fce0f9489de3 29 private:
EvolutionOfWar 0:fce0f9489de3 30 BusIn _pins;
EvolutionOfWar 0:fce0f9489de3 31
EvolutionOfWar 0:fce0f9489de3 32 };
EvolutionOfWar 0:fce0f9489de3 33 Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
EvolutionOfWar 0:fce0f9489de3 34 _pins(up, down, left, right, fire)
EvolutionOfWar 0:fce0f9489de3 35 {
EvolutionOfWar 0:fce0f9489de3 36 _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
EvolutionOfWar 0:fce0f9489de3 37 wait(0.001); //delays just a bit for pullups to pull inputs high
EvolutionOfWar 0:fce0f9489de3 38 }
EvolutionOfWar 0:fce0f9489de3 39 inline bool Nav_Switch::up()
EvolutionOfWar 0:fce0f9489de3 40 {
EvolutionOfWar 0:fce0f9489de3 41 return !(_pins[0]);
EvolutionOfWar 0:fce0f9489de3 42 }
EvolutionOfWar 0:fce0f9489de3 43 inline bool Nav_Switch::down()
EvolutionOfWar 0:fce0f9489de3 44 {
EvolutionOfWar 0:fce0f9489de3 45 return !(_pins[1]);
EvolutionOfWar 0:fce0f9489de3 46 }
EvolutionOfWar 0:fce0f9489de3 47 inline bool Nav_Switch::left()
EvolutionOfWar 0:fce0f9489de3 48 {
EvolutionOfWar 0:fce0f9489de3 49 return !(_pins[2]);
EvolutionOfWar 0:fce0f9489de3 50 }
EvolutionOfWar 0:fce0f9489de3 51 inline bool Nav_Switch::right()
EvolutionOfWar 0:fce0f9489de3 52 {
EvolutionOfWar 0:fce0f9489de3 53 return !(_pins[3]);
EvolutionOfWar 0:fce0f9489de3 54 }
EvolutionOfWar 0:fce0f9489de3 55 inline bool Nav_Switch::fire()
EvolutionOfWar 0:fce0f9489de3 56 {
EvolutionOfWar 0:fce0f9489de3 57 return !(_pins[4]);
EvolutionOfWar 0:fce0f9489de3 58 }
EvolutionOfWar 0:fce0f9489de3 59 inline int Nav_Switch::read()
EvolutionOfWar 0:fce0f9489de3 60 {
EvolutionOfWar 0:fce0f9489de3 61 return _pins.read();
EvolutionOfWar 0:fce0f9489de3 62 }
EvolutionOfWar 0:fce0f9489de3 63 inline Nav_Switch::operator int ()
EvolutionOfWar 0:fce0f9489de3 64 {
EvolutionOfWar 0:fce0f9489de3 65 return _pins.read();
EvolutionOfWar 0:fce0f9489de3 66 }
EvolutionOfWar 0:fce0f9489de3 67
EvolutionOfWar 0:fce0f9489de3 68 Nav_Switch myNav( p14, p11, p12, p10, p13); //pin order on Sparkfun breakout
EvolutionOfWar 0:fce0f9489de3 69
aolmenki 1:cc72ad58982b 70 int turn = 1; // black goes on 1, white goes on 2 (or 0)
EvolutionOfWar 0:fce0f9489de3 71 int gb[8][8];
EvolutionOfWar 0:fce0f9489de3 72 int NUM_COLS = 8;
EvolutionOfWar 0:fce0f9489de3 73 int NUM_ROWS = 8;
aolmenki 1:cc72ad58982b 74 int xCoor = 3;
aolmenki 1:cc72ad58982b 75 int yCoor = 4;
aolmenki 1:cc72ad58982b 76 int numBlack = 0;
aolmenki 1:cc72ad58982b 77 int numWhite = 0;
aolmenki 1:cc72ad58982b 78 bool moved = false;
aolmenki 1:cc72ad58982b 79 bool gameover = false;
aolmenki 1:cc72ad58982b 80
EvolutionOfWar 0:fce0f9489de3 81 void initialize_game_board()
EvolutionOfWar 0:fce0f9489de3 82 {
EvolutionOfWar 0:fce0f9489de3 83 //This is a nested loop to make sure every cell is empty
EvolutionOfWar 0:fce0f9489de3 84 //Cell Codes: 0 = empty, 1 = white piece, 2 = black piece
EvolutionOfWar 0:fce0f9489de3 85 for (int i = 0; i < NUM_ROWS; i++)
EvolutionOfWar 0:fce0f9489de3 86 {
EvolutionOfWar 0:fce0f9489de3 87 for (int j = 0; j < NUM_COLS; j++)
EvolutionOfWar 0:fce0f9489de3 88 gb[i][j] = 0;
EvolutionOfWar 0:fce0f9489de3 89 }
EvolutionOfWar 0:fce0f9489de3 90 gb[3][3] = 1;//Put down white piece
EvolutionOfWar 0:fce0f9489de3 91 gb[4][4] = 1;//Put down white piece
EvolutionOfWar 0:fce0f9489de3 92 gb[3][4] = 2;//Put down black piece
EvolutionOfWar 0:fce0f9489de3 93 gb[4][3] = 2;//Put down black piece
EvolutionOfWar 0:fce0f9489de3 94
EvolutionOfWar 0:fce0f9489de3 95 uLCD.cls();
aolmenki 1:cc72ad58982b 96 uLCD.filled_rectangle(0,0,127,127,0x007f00);
EvolutionOfWar 0:fce0f9489de3 97
EvolutionOfWar 0:fce0f9489de3 98 uLCD.rectangle(7,7,120,120,DGREY);
EvolutionOfWar 0:fce0f9489de3 99 uLCD.rectangle(8,8,119,119,DGREY);
EvolutionOfWar 0:fce0f9489de3 100 //uLCD.filled_rectangle(8,20,120,21,DGREY);
EvolutionOfWar 0:fce0f9489de3 101
EvolutionOfWar 0:fce0f9489de3 102 for( int i = 1; i< 9; i++)
EvolutionOfWar 0:fce0f9489de3 103 {
EvolutionOfWar 0:fce0f9489de3 104 uLCD.filled_rectangle(8, 7 + 14*i,119,8 + 14*i,DGREY);
EvolutionOfWar 0:fce0f9489de3 105 }
EvolutionOfWar 0:fce0f9489de3 106 for( int j = 1; j<9; j++)
EvolutionOfWar 0:fce0f9489de3 107 {
EvolutionOfWar 0:fce0f9489de3 108 uLCD.filled_rectangle(7 + 14*j, 8, 8+14*j, 119, DGREY);
EvolutionOfWar 0:fce0f9489de3 109 }
EvolutionOfWar 0:fce0f9489de3 110 }
EvolutionOfWar 0:fce0f9489de3 111
aolmenki 1:cc72ad58982b 112 void drawCursor(int x, int y) //Expecting x ={0,7} and y ={0,7}
EvolutionOfWar 0:fce0f9489de3 113 {
aolmenki 1:cc72ad58982b 114 uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,8 + 14*x,22 + 14*y,RED);
aolmenki 1:cc72ad58982b 115 uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,22 + 14*x,8 + 14*y,RED);
aolmenki 1:cc72ad58982b 116 uLCD.filled_rectangle(7 + 14*x, 21 + 14*y,22 + 14*x,22 + 14*y,RED);
aolmenki 1:cc72ad58982b 117 uLCD.filled_rectangle(21 + 14*x, 7 + 14*y,22 + 14*x,22 + 14*y,RED);
EvolutionOfWar 0:fce0f9489de3 118 }
EvolutionOfWar 0:fce0f9489de3 119
aolmenki 1:cc72ad58982b 120 void removeCursor(int x,int y)
EvolutionOfWar 0:fce0f9489de3 121 {
aolmenki 1:cc72ad58982b 122 uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,8 + 14*x,22 + 14*y,DGREY);
aolmenki 1:cc72ad58982b 123 uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,22 + 14*x,8 + 14*y,DGREY);
aolmenki 1:cc72ad58982b 124 uLCD.filled_rectangle(7 + 14*x, 21 + 14*y,22 + 14*x,22 + 14*y,DGREY);
aolmenki 1:cc72ad58982b 125 uLCD.filled_rectangle(21 + 14*x, 7 + 14*y,22 + 14*x,22 + 14*y,DGREY);
EvolutionOfWar 0:fce0f9489de3 126 }
EvolutionOfWar 0:fce0f9489de3 127
EvolutionOfWar 0:fce0f9489de3 128 void drawPieces(){
EvolutionOfWar 0:fce0f9489de3 129 for (int i = 0; i < NUM_ROWS; i++)
EvolutionOfWar 0:fce0f9489de3 130 {
EvolutionOfWar 0:fce0f9489de3 131 for (int j = 0; j < NUM_COLS; j++)
EvolutionOfWar 0:fce0f9489de3 132 {
aolmenki 1:cc72ad58982b 133 if(gb[i][j] == 0){
aolmenki 1:cc72ad58982b 134 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x007f00);
aolmenki 1:cc72ad58982b 135 }
EvolutionOfWar 0:fce0f9489de3 136 if(gb[i][j] == 1){
EvolutionOfWar 0:fce0f9489de3 137 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , WHITE);
EvolutionOfWar 0:fce0f9489de3 138 }
EvolutionOfWar 0:fce0f9489de3 139 if(gb[i][j] == 2){
EvolutionOfWar 0:fce0f9489de3 140 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , BLACK);
EvolutionOfWar 0:fce0f9489de3 141 }
EvolutionOfWar 0:fce0f9489de3 142 }
EvolutionOfWar 0:fce0f9489de3 143 }
EvolutionOfWar 0:fce0f9489de3 144 }
EvolutionOfWar 0:fce0f9489de3 145
EvolutionOfWar 0:fce0f9489de3 146 void drawPiece(int i, int j) { //xCoor, yCoor
aolmenki 1:cc72ad58982b 147 if (turn == 0) {
aolmenki 1:cc72ad58982b 148 gb[i][j] = 1;
aolmenki 1:cc72ad58982b 149 } else {
aolmenki 1:cc72ad58982b 150 gb[i][j] = 2;
aolmenki 1:cc72ad58982b 151 }
EvolutionOfWar 0:fce0f9489de3 152 if(gb[i][j] == 1){
EvolutionOfWar 0:fce0f9489de3 153 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , WHITE);
EvolutionOfWar 0:fce0f9489de3 154 }
EvolutionOfWar 0:fce0f9489de3 155 if(gb[i][j] == 2){
EvolutionOfWar 0:fce0f9489de3 156 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , BLACK);
EvolutionOfWar 0:fce0f9489de3 157 }
EvolutionOfWar 0:fce0f9489de3 158 }
EvolutionOfWar 0:fce0f9489de3 159
EvolutionOfWar 0:fce0f9489de3 160 void flippingPiece(int i, int j) { //xCoor, yCoor, animation
aolmenki 1:cc72ad58982b 161
aolmenki 1:cc72ad58982b 162 if(gb[i][j] == 2){ //Gradually changes a piece White
aolmenki 1:cc72ad58982b 163 gb[i][j] = 1;
EvolutionOfWar 0:fce0f9489de3 164 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 165 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 166 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 167 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 168 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 169 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xffffff);
EvolutionOfWar 0:fce0f9489de3 170 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 171 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 172 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 173 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xffffff);
EvolutionOfWar 0:fce0f9489de3 174 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 175 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 176 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xffffff);
EvolutionOfWar 0:fce0f9489de3 177 wait(0.1);
aolmenki 1:cc72ad58982b 178 } else if(gb[i][j] == 1){ //Gradually changes a piece Black
aolmenki 1:cc72ad58982b 179 gb[i][j] = 2;
EvolutionOfWar 0:fce0f9489de3 180 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 181 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 182 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 183 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 184 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 185 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x000000);
EvolutionOfWar 0:fce0f9489de3 186 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 187 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xb2b2b2);
EvolutionOfWar 0:fce0f9489de3 188 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 189 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x000000);
EvolutionOfWar 0:fce0f9489de3 190 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x4c4c4c);
EvolutionOfWar 0:fce0f9489de3 191 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 192 uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x000000);
EvolutionOfWar 0:fce0f9489de3 193 wait(0.1);
EvolutionOfWar 0:fce0f9489de3 194 }
EvolutionOfWar 0:fce0f9489de3 195 }
EvolutionOfWar 0:fce0f9489de3 196
EvolutionOfWar 0:fce0f9489de3 197 /*var fillBoard = function() {
EvolutionOfWar 0:fce0f9489de3 198 for(var r=0; r<8; r++)
EvolutionOfWar 0:fce0f9489de3 199 {
EvolutionOfWar 0:fce0f9489de3 200 for(var c=0; c<8; c++)
EvolutionOfWar 0:fce0f9489de3 201 {
EvolutionOfWar 0:fce0f9489de3 202 drawPiece(r,c,board[r][c]);
EvolutionOfWar 0:fce0f9489de3 203 }
EvolutionOfWar 0:fce0f9489de3 204 }
EvolutionOfWar 0:fce0f9489de3 205 };
EvolutionOfWar 0:fce0f9489de3 206 var drawBoard = function() {
EvolutionOfWar 0:fce0f9489de3 207 drawEmptyBoard();
EvolutionOfWar 0:fce0f9489de3 208 fillBoard();
EvolutionOfWar 0:fce0f9489de3 209 }; --------------------------------------------WAS NOT USED VVVVV ----------------------------
aolmenki 1:cc72ad58982b 210 var flipFromInDir = function(r,c,player,rDir,cDir)
EvolutionOfWar 0:fce0f9489de3 211 {
EvolutionOfWar 0:fce0f9489de3 212 //debug("Checking direction rDir: "+rDir+" cDir: "+cDir+" for player "+player);
EvolutionOfWar 0:fce0f9489de3 213 var currentR = r;
EvolutionOfWar 0:fce0f9489de3 214 var currentC = c;
EvolutionOfWar 0:fce0f9489de3 215 var current = board[currentR][currentC];
EvolutionOfWar 0:fce0f9489de3 216 var toBeFlipped = [];
EvolutionOfWar 0:fce0f9489de3 217 var withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 218 var withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 219 var oppositePieces = true;
EvolutionOfWar 0:fce0f9489de3 220 var samePlayerEncounterred = false;
EvolutionOfWar 0:fce0f9489de3 221 while(withinRBounds && withinCBounds && oppositePieces)
EvolutionOfWar 0:fce0f9489de3 222 {
EvolutionOfWar 0:fce0f9489de3 223 //debug(" oh, sweet! "+currentR+", "+currentC+" looks good!");
EvolutionOfWar 0:fce0f9489de3 224 toBeFlipped.push({r:currentR, c:currentC});
EvolutionOfWar 0:fce0f9489de3 225 currentR += rDir;
EvolutionOfWar 0:fce0f9489de3 226 currentC += cDir;
EvolutionOfWar 0:fce0f9489de3 227 withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 228 withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 229 if(withinCBounds && withinRBounds)
EvolutionOfWar 0:fce0f9489de3 230 {
EvolutionOfWar 0:fce0f9489de3 231 current = board[currentR][currentC];
EvolutionOfWar 0:fce0f9489de3 232 oppositePieces = (current===-player);
EvolutionOfWar 0:fce0f9489de3 233 //debug(" current at "+currentR+", "+currentC+" is "+current);
EvolutionOfWar 0:fce0f9489de3 234 //debug(" oppositePieces at "+currentR+", "+currentC+" is "+oppositePieces);
EvolutionOfWar 0:fce0f9489de3 235 if(current===player)
EvolutionOfWar 0:fce0f9489de3 236 {
EvolutionOfWar 0:fce0f9489de3 237 samePlayerEncounterred = true;
EvolutionOfWar 0:fce0f9489de3 238 }
EvolutionOfWar 0:fce0f9489de3 239 }
EvolutionOfWar 0:fce0f9489de3 240 }
EvolutionOfWar 0:fce0f9489de3 241 //debug(" we found "+toBeFlipped.length);
EvolutionOfWar 0:fce0f9489de3 242 if(toBeFlipped.length > 1 && samePlayerEncounterred)
EvolutionOfWar 0:fce0f9489de3 243 {
EvolutionOfWar 0:fce0f9489de3 244 for(var i=1; i<toBeFlipped.length; i++)
EvolutionOfWar 0:fce0f9489de3 245 {
EvolutionOfWar 0:fce0f9489de3 246 var flipMe = toBeFlipped[i];
EvolutionOfWar 0:fce0f9489de3 247 drawPiece(flipMe.r, flipMe.c, player);
EvolutionOfWar 0:fce0f9489de3 248 board[flipMe.r][flipMe.c] = player;
EvolutionOfWar 0:fce0f9489de3 249 }
EvolutionOfWar 0:fce0f9489de3 250 }
EvolutionOfWar 0:fce0f9489de3 251 }; -------------------------------WAS NOT USED ^^^^--------------------
EvolutionOfWar 0:fce0f9489de3 252 var flipFromInDir = function(r,c,player,rDir,cDir) {
EvolutionOfWar 0:fce0f9489de3 253 var potentialBoard = copyBoard();
EvolutionOfWar 0:fce0f9489de3 254
EvolutionOfWar 0:fce0f9489de3 255 var currentR = r+rDir;
EvolutionOfWar 0:fce0f9489de3 256 var currentC = c+cDir;
EvolutionOfWar 0:fce0f9489de3 257 var withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 258 var withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 259
EvolutionOfWar 0:fce0f9489de3 260 while(withinRBounds && withinCBounds)
EvolutionOfWar 0:fce0f9489de3 261 {
EvolutionOfWar 0:fce0f9489de3 262 debug("r,c: "+r+", "+c+" direction: "+rDir+", "+cDir+" current: "+currentR+", "+currentC);
EvolutionOfWar 0:fce0f9489de3 263 var current = board[currentR][currentC];
EvolutionOfWar 0:fce0f9489de3 264 if(current === 0)
EvolutionOfWar 0:fce0f9489de3 265 {
EvolutionOfWar 0:fce0f9489de3 266 return board;
EvolutionOfWar 0:fce0f9489de3 267 }
EvolutionOfWar 0:fce0f9489de3 268 else if(current === player)
EvolutionOfWar 0:fce0f9489de3 269 {
EvolutionOfWar 0:fce0f9489de3 270 //board = potentialBoard;
EvolutionOfWar 0:fce0f9489de3 271 return potentialBoard;
EvolutionOfWar 0:fce0f9489de3 272 }
EvolutionOfWar 0:fce0f9489de3 273 else
EvolutionOfWar 0:fce0f9489de3 274 {
EvolutionOfWar 0:fce0f9489de3 275 potentialBoard[currentR][currentC] = player;
EvolutionOfWar 0:fce0f9489de3 276 currentR = currentR+rDir;
EvolutionOfWar 0:fce0f9489de3 277 currentC = currentC+cDir;
EvolutionOfWar 0:fce0f9489de3 278 withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 279 withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 280 }
EvolutionOfWar 0:fce0f9489de3 281 }
EvolutionOfWar 0:fce0f9489de3 282 return board;
EvolutionOfWar 0:fce0f9489de3 283 };
EvolutionOfWar 0:fce0f9489de3 284 var flipFrom = function(r,c,player) {
EvolutionOfWar 0:fce0f9489de3 285 for(var rDir = -1; rDir<2; rDir++)
EvolutionOfWar 0:fce0f9489de3 286 {
EvolutionOfWar 0:fce0f9489de3 287 for(var cDir = -1; cDir<2; cDir++)
EvolutionOfWar 0:fce0f9489de3 288 {
EvolutionOfWar 0:fce0f9489de3 289 board = flipFromInDir(r, c, player, rDir, cDir);
EvolutionOfWar 0:fce0f9489de3 290 }
EvolutionOfWar 0:fce0f9489de3 291 }
EvolutionOfWar 0:fce0f9489de3 292 };
EvolutionOfWar 0:fce0f9489de3 293 var placePiece = function(r,c,player) {
EvolutionOfWar 0:fce0f9489de3 294 //debug("placing piece for player "+player);
EvolutionOfWar 0:fce0f9489de3 295 drawPiece(r,c,player);
EvolutionOfWar 0:fce0f9489de3 296 board[r][c] = player;
EvolutionOfWar 0:fce0f9489de3 297 flipFrom(r,c,player);
EvolutionOfWar 0:fce0f9489de3 298 drawBoard();
EvolutionOfWar 0:fce0f9489de3 299 };
EvolutionOfWar 0:fce0f9489de3 300 var move = function(r,c)
EvolutionOfWar 0:fce0f9489de3 301 {
EvolutionOfWar 0:fce0f9489de3 302 placePiece(r,c,whosTurn);
EvolutionOfWar 0:fce0f9489de3 303 whosTurn *= -1;
EvolutionOfWar 0:fce0f9489de3 304 };
EvolutionOfWar 0:fce0f9489de3 305 var isValidInDir = function(r,c,player,rDir,cDir)
EvolutionOfWar 0:fce0f9489de3 306 {
EvolutionOfWar 0:fce0f9489de3 307 //debug("Checking direction rDir: "+rDir+" cDir: "+cDir+" for player "+player);
EvolutionOfWar 0:fce0f9489de3 308 var currentR = r;
EvolutionOfWar 0:fce0f9489de3 309 var currentC = c;
EvolutionOfWar 0:fce0f9489de3 310 var current = board[currentR][currentC];
EvolutionOfWar 0:fce0f9489de3 311 var toBeFlipped = [];
EvolutionOfWar 0:fce0f9489de3 312 var withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 313 var withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 314 var oppositePieces = true;
EvolutionOfWar 0:fce0f9489de3 315 var samePlayerEncounterred = false;
EvolutionOfWar 0:fce0f9489de3 316 while(withinRBounds && withinCBounds && oppositePieces)
EvolutionOfWar 0:fce0f9489de3 317 {
EvolutionOfWar 0:fce0f9489de3 318 //debug(" oh, sweet! "+currentR+", "+currentC+" looks good!");
EvolutionOfWar 0:fce0f9489de3 319 toBeFlipped.push({r:currentR, c:currentC});
EvolutionOfWar 0:fce0f9489de3 320 currentR += rDir;
EvolutionOfWar 0:fce0f9489de3 321 currentC += cDir;
EvolutionOfWar 0:fce0f9489de3 322 withinRBounds = 0<=currentR && currentR<8;
EvolutionOfWar 0:fce0f9489de3 323 withinCBounds = 0<=currentC && currentC<8;
EvolutionOfWar 0:fce0f9489de3 324 if(withinCBounds && withinRBounds)
EvolutionOfWar 0:fce0f9489de3 325 {
EvolutionOfWar 0:fce0f9489de3 326 current = board[currentR][currentC];
EvolutionOfWar 0:fce0f9489de3 327 oppositePieces = (current===-player);
EvolutionOfWar 0:fce0f9489de3 328 //debug(" current at "+currentR+", "+currentC+" is "+current);
EvolutionOfWar 0:fce0f9489de3 329 //debug(" oppositePieces at "+currentR+", "+currentC+" is "+oppositePieces);
EvolutionOfWar 0:fce0f9489de3 330 if(current===player)
EvolutionOfWar 0:fce0f9489de3 331 {
EvolutionOfWar 0:fce0f9489de3 332 samePlayerEncounterred = true;
EvolutionOfWar 0:fce0f9489de3 333 }
EvolutionOfWar 0:fce0f9489de3 334 }
EvolutionOfWar 0:fce0f9489de3 335 }
EvolutionOfWar 0:fce0f9489de3 336 //debug(" we found "+toBeFlipped.length);
EvolutionOfWar 0:fce0f9489de3 337 if(toBeFlipped.length > 1 && samePlayerEncounterred)
EvolutionOfWar 0:fce0f9489de3 338 {
EvolutionOfWar 0:fce0f9489de3 339 return true;
EvolutionOfWar 0:fce0f9489de3 340 }
EvolutionOfWar 0:fce0f9489de3 341 return false;
EvolutionOfWar 0:fce0f9489de3 342 };
EvolutionOfWar 0:fce0f9489de3 343 var isValidMove = function(r,c,player) {
EvolutionOfWar 0:fce0f9489de3 344 if(!isEmpty(r,c))
EvolutionOfWar 0:fce0f9489de3 345 {
EvolutionOfWar 0:fce0f9489de3 346 return false;
EvolutionOfWar 0:fce0f9489de3 347 }
EvolutionOfWar 0:fce0f9489de3 348 for(var rDir = -1; rDir<2; rDir++)
EvolutionOfWar 0:fce0f9489de3 349 {
EvolutionOfWar 0:fce0f9489de3 350 for(var cDir = -1; cDir<2; cDir++)
EvolutionOfWar 0:fce0f9489de3 351 {
EvolutionOfWar 0:fce0f9489de3 352 if(isValidInDir(r, c, player, rDir, cDir))
EvolutionOfWar 0:fce0f9489de3 353 {
EvolutionOfWar 0:fce0f9489de3 354 return true;
EvolutionOfWar 0:fce0f9489de3 355 }
EvolutionOfWar 0:fce0f9489de3 356 }
EvolutionOfWar 0:fce0f9489de3 357 }
EvolutionOfWar 0:fce0f9489de3 358 return false;
EvolutionOfWar 0:fce0f9489de3 359 };
aolmenki 1:cc72ad58982b 360 */
aolmenki 1:cc72ad58982b 361 void invalid(int x, int y, int oldColor){
aolmenki 1:cc72ad58982b 362 gb[x][y] = oldColor;
aolmenki 1:cc72ad58982b 363 drawPieces();
aolmenki 1:cc72ad58982b 364 uLCD.line(9 + 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 9+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 365 uLCD.line(11+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 18+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 366 uLCD.line(20+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 20+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 367 uLCD.line(18+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 11+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 368 uLCD.line(9+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 9+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 369 uLCD.line(18+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 11+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 370 uLCD.line(20+ 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 20+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 371 uLCD.line(11+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 18+ 14 * yCoor, RED);
aolmenki 1:cc72ad58982b 372 wait(1);
aolmenki 1:cc72ad58982b 373 uLCD.line(9 + 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 9+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 374 uLCD.line(11+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 18+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 375 uLCD.line(20+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 20+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 376 uLCD.line(18+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 11+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 377 uLCD.line(9+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 9+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 378 uLCD.line(18+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 11+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 379 uLCD.line(20+ 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 20+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 380 uLCD.line(11+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 18+ 14 * yCoor, 0x007F00);
aolmenki 1:cc72ad58982b 381 drawPieces();
aolmenki 1:cc72ad58982b 382 }
aolmenki 1:cc72ad58982b 383
aolmenki 1:cc72ad58982b 384 void valid_move(int x, int y) {
aolmenki 1:cc72ad58982b 385 int opp, pl;
aolmenki 1:cc72ad58982b 386 bool invalidD[] = {false, false, false, false, false, false, false, false}; //flip checker
aolmenki 1:cc72ad58982b 387 if (turn == 1) { //pl is black
aolmenki 1:cc72ad58982b 388 opp = 1;
aolmenki 1:cc72ad58982b 389 pl = 2;
aolmenki 1:cc72ad58982b 390 } else { // pl is white
aolmenki 1:cc72ad58982b 391 opp = 2;
aolmenki 1:cc72ad58982b 392 pl = 1;
EvolutionOfWar 0:fce0f9489de3 393 }
aolmenki 1:cc72ad58982b 394 int oldColor = gb[x][y]; //save old color for drawing over X
aolmenki 1:cc72ad58982b 395 bool flipped = false;
aolmenki 1:cc72ad58982b 396 if (gb[x][y] == 0) { // check empty space
aolmenki 1:cc72ad58982b 397 drawPiece(x, y); // emtpy so draw
aolmenki 1:cc72ad58982b 398 for (int i = 0; i < 8; i++) { // check for opponent around emtpy space and fill
aolmenki 1:cc72ad58982b 399 if (i == 0) { // right
aolmenki 1:cc72ad58982b 400 if (x + 1 < 7 && gb[x + 1][y] == opp) { //check to see if not beyond board and has to be next to the opponent
aolmenki 1:cc72ad58982b 401 for (int j = x + 2; j < 8; j++) {
aolmenki 1:cc72ad58982b 402 if (gb[j][y] == pl && !flipped) {
aolmenki 1:cc72ad58982b 403 for (int k = x + 1; k < j; k++) {
aolmenki 1:cc72ad58982b 404 flippingPiece(k, y);
aolmenki 1:cc72ad58982b 405 }
aolmenki 1:cc72ad58982b 406 flipped = true;
aolmenki 1:cc72ad58982b 407 } else if (gb[j][y] == 0) {
aolmenki 1:cc72ad58982b 408 j = 8;
aolmenki 1:cc72ad58982b 409 }
aolmenki 1:cc72ad58982b 410 }
aolmenki 1:cc72ad58982b 411 if (flipped) {
aolmenki 1:cc72ad58982b 412 flipped = false;
aolmenki 1:cc72ad58982b 413 } else {
aolmenki 1:cc72ad58982b 414 invalidD[0] = true;
aolmenki 1:cc72ad58982b 415 }
aolmenki 1:cc72ad58982b 416 } else {
aolmenki 1:cc72ad58982b 417 invalidD[0] = true;
aolmenki 1:cc72ad58982b 418 }
aolmenki 1:cc72ad58982b 419 } else if (i == 1) { // down-right
aolmenki 1:cc72ad58982b 420 if (x + 1 < 7 && y + 1 < 7 && gb[x + 1][y + 1] == opp) { // check if within margin and next to other color
aolmenki 1:cc72ad58982b 421 for (int j = 2; j < 8 - x && j < 8 - y; j++) { // start finding next same color
aolmenki 1:cc72ad58982b 422 if (gb[x + j][y + j] == pl && !flipped) { // if same color and not already been flipping
aolmenki 1:cc72ad58982b 423 for (int k = 1; k < j; k++) { // between other color to this same color
aolmenki 1:cc72ad58982b 424 flippingPiece(x + k, y + k); // flip
aolmenki 1:cc72ad58982b 425 }
aolmenki 1:cc72ad58982b 426 flipped = true; // marked flipped
aolmenki 1:cc72ad58982b 427 } else if (gb[x + j][y + j] == 0) { // if you find an empty instead
aolmenki 1:cc72ad58982b 428 j = 8; // skip for loop
aolmenki 1:cc72ad58982b 429 }
aolmenki 1:cc72ad58982b 430 }
aolmenki 1:cc72ad58982b 431 if (flipped) { // if flipped
aolmenki 1:cc72ad58982b 432 flipped = false; // set variable back to false
aolmenki 1:cc72ad58982b 433 } else {
aolmenki 1:cc72ad58982b 434 invalidD[1] = true; // no flip happened, so set invalid tracker to true
aolmenki 1:cc72ad58982b 435 }
aolmenki 1:cc72ad58982b 436 } else {
aolmenki 1:cc72ad58982b 437 invalidD[1] = true; // not within margin or next to other color
aolmenki 1:cc72ad58982b 438 }
aolmenki 1:cc72ad58982b 439 } else if (i == 2) { // down
aolmenki 1:cc72ad58982b 440 if (y + 1 < 7 && gb[x][y + 1] == opp) {
aolmenki 1:cc72ad58982b 441 for (int j = y + 2; j < 8; j++) {
aolmenki 1:cc72ad58982b 442 if (gb[x][j] == pl && !flipped) {
aolmenki 1:cc72ad58982b 443 for (int k = y + 1; k < j; k++) {
aolmenki 1:cc72ad58982b 444 flippingPiece(x, k);
aolmenki 1:cc72ad58982b 445 }
aolmenki 1:cc72ad58982b 446 flipped = true;
aolmenki 1:cc72ad58982b 447 } else if (gb[x][j] == 0) {
aolmenki 1:cc72ad58982b 448 j = 8;
aolmenki 1:cc72ad58982b 449 }
aolmenki 1:cc72ad58982b 450 }
aolmenki 1:cc72ad58982b 451 if (flipped) {
aolmenki 1:cc72ad58982b 452 flipped = false;
aolmenki 1:cc72ad58982b 453 } else {
aolmenki 1:cc72ad58982b 454 invalidD[2] = true;
aolmenki 1:cc72ad58982b 455 }
aolmenki 1:cc72ad58982b 456 } else {
aolmenki 1:cc72ad58982b 457 invalidD[2] = true;
aolmenki 1:cc72ad58982b 458 }
aolmenki 1:cc72ad58982b 459 } else if (i == 3) { // down-left
aolmenki 1:cc72ad58982b 460 if (x - 1 > 0 && y + 1 < 7 && gb[x - 1][y + 1] == opp) {
aolmenki 1:cc72ad58982b 461 for (int j = 2; j < x + 1 && j < 8 - y; j++) {
aolmenki 1:cc72ad58982b 462 if (gb[x - j][y + j] == pl && !flipped) {
aolmenki 1:cc72ad58982b 463 for (int k = 1; k < j; k++) {
aolmenki 1:cc72ad58982b 464 flippingPiece(x - k, y + k);
aolmenki 1:cc72ad58982b 465 }
aolmenki 1:cc72ad58982b 466 flipped = true;
aolmenki 1:cc72ad58982b 467 } else if (gb[x - j][y + j] == 0) {
aolmenki 1:cc72ad58982b 468 j = 5;
aolmenki 1:cc72ad58982b 469 }
aolmenki 1:cc72ad58982b 470 }
aolmenki 1:cc72ad58982b 471 if (flipped) {
aolmenki 1:cc72ad58982b 472 flipped = false;
aolmenki 1:cc72ad58982b 473 } else {
aolmenki 1:cc72ad58982b 474 invalidD[3] = true;
aolmenki 1:cc72ad58982b 475 }
aolmenki 1:cc72ad58982b 476 } else {
aolmenki 1:cc72ad58982b 477 invalidD[3] = true;
aolmenki 1:cc72ad58982b 478 }
aolmenki 1:cc72ad58982b 479 } else if (i == 4) { // left
aolmenki 1:cc72ad58982b 480 if (x - 1 > 0 && gb[x - 1][y] == opp) {
aolmenki 1:cc72ad58982b 481 for (int j = x - 2; j > -1; j--) {
aolmenki 1:cc72ad58982b 482 if (gb[j][y] == pl && !flipped) {
aolmenki 1:cc72ad58982b 483 for (int k = x - 1; k > j; k--) {
aolmenki 1:cc72ad58982b 484 flippingPiece(k, y);
aolmenki 1:cc72ad58982b 485 }
aolmenki 1:cc72ad58982b 486 flipped = true;
aolmenki 1:cc72ad58982b 487 } else if (gb[j][y] == 0) {
aolmenki 1:cc72ad58982b 488 j = -1;
aolmenki 1:cc72ad58982b 489 }
aolmenki 1:cc72ad58982b 490 }
aolmenki 1:cc72ad58982b 491 if (flipped) {
aolmenki 1:cc72ad58982b 492 flipped = false;
aolmenki 1:cc72ad58982b 493 } else {
aolmenki 1:cc72ad58982b 494 invalidD[4] = true;
aolmenki 1:cc72ad58982b 495 }
aolmenki 1:cc72ad58982b 496 } else {
aolmenki 1:cc72ad58982b 497 invalidD[4] = true;
aolmenki 1:cc72ad58982b 498 }
aolmenki 1:cc72ad58982b 499 } else if (i == 5) { // up-left
aolmenki 1:cc72ad58982b 500 if (x - 1 > 0 && y - 1 > 0 && gb[x - 1][y - 1] == opp) {
aolmenki 1:cc72ad58982b 501 for (int j = 2; j < x + 1 && j < y + 1; j++) {
aolmenki 1:cc72ad58982b 502 if (gb[x - j][y - j] == pl && !flipped) {
aolmenki 1:cc72ad58982b 503 for (int k = 1; k < j; k++) {
aolmenki 1:cc72ad58982b 504 flippingPiece(x - k, y - k);
aolmenki 1:cc72ad58982b 505 }
aolmenki 1:cc72ad58982b 506 flipped = true;
aolmenki 1:cc72ad58982b 507 } else if (gb[x - j][y - j] == 0) {
aolmenki 1:cc72ad58982b 508 j = 8;
aolmenki 1:cc72ad58982b 509 }
aolmenki 1:cc72ad58982b 510 }
aolmenki 1:cc72ad58982b 511 if (flipped) {
aolmenki 1:cc72ad58982b 512 flipped = false;
aolmenki 1:cc72ad58982b 513 } else {
aolmenki 1:cc72ad58982b 514 invalidD[5] = true;
aolmenki 1:cc72ad58982b 515 }
aolmenki 1:cc72ad58982b 516 } else {
aolmenki 1:cc72ad58982b 517 invalidD[5] = true;
aolmenki 1:cc72ad58982b 518 }
aolmenki 1:cc72ad58982b 519 } else if (i == 6) { // up
aolmenki 1:cc72ad58982b 520 if (y - 1 > 0 && gb[x][y - 1] == opp) {
aolmenki 1:cc72ad58982b 521 for (int j = y - 2; j > -1; j--) {
aolmenki 1:cc72ad58982b 522 if (gb[x][j] == pl && !flipped) {
aolmenki 1:cc72ad58982b 523 for (int k = y - 1; k > j; k--) {
aolmenki 1:cc72ad58982b 524 flippingPiece(x, k);
aolmenki 1:cc72ad58982b 525 }
aolmenki 1:cc72ad58982b 526 flipped = true;
aolmenki 1:cc72ad58982b 527 } else if (gb[x][j] == 0) {
aolmenki 1:cc72ad58982b 528 j = -1;
aolmenki 1:cc72ad58982b 529 }
aolmenki 1:cc72ad58982b 530 }
aolmenki 1:cc72ad58982b 531 if (flipped) {
aolmenki 1:cc72ad58982b 532 flipped = false;
aolmenki 1:cc72ad58982b 533 } else {
aolmenki 1:cc72ad58982b 534 invalidD[6] = true;
aolmenki 1:cc72ad58982b 535 }
aolmenki 1:cc72ad58982b 536 } else {
aolmenki 1:cc72ad58982b 537 invalidD[6] = true;
aolmenki 1:cc72ad58982b 538 }
aolmenki 1:cc72ad58982b 539 } else if (i == 7) { // up-right
aolmenki 1:cc72ad58982b 540 if (x + 1 < 7 && y - 1 > 0 && gb[x + 1][y - 1] == opp) {
aolmenki 1:cc72ad58982b 541 for (int j = 2; j < 8 - x && j < y + 1; j++) {
aolmenki 1:cc72ad58982b 542 if (gb[x + j][y - j] == pl && !flipped) {
aolmenki 1:cc72ad58982b 543 for (int k = 1; k < j; k++) {
aolmenki 1:cc72ad58982b 544 flippingPiece(x + k, y - k);
aolmenki 1:cc72ad58982b 545 }
aolmenki 1:cc72ad58982b 546 flipped = true;
aolmenki 1:cc72ad58982b 547 } else if (gb[x + j][y - j] == 0) {
aolmenki 1:cc72ad58982b 548 j = 8;
aolmenki 1:cc72ad58982b 549 }
aolmenki 1:cc72ad58982b 550 }
aolmenki 1:cc72ad58982b 551 if (flipped) {
aolmenki 1:cc72ad58982b 552 flipped = false;
aolmenki 1:cc72ad58982b 553 } else {
aolmenki 1:cc72ad58982b 554 invalidD[7] = true;
aolmenki 1:cc72ad58982b 555 }
aolmenki 1:cc72ad58982b 556 } else {
aolmenki 1:cc72ad58982b 557 invalidD[7] = true;
aolmenki 1:cc72ad58982b 558 }
aolmenki 1:cc72ad58982b 559 }
aolmenki 1:cc72ad58982b 560 } // finish checking around
aolmenki 1:cc72ad58982b 561 flipped = false;
aolmenki 1:cc72ad58982b 562 for (int i = 0; i < 8; i++) {
aolmenki 1:cc72ad58982b 563 if (!invalidD[i] && !flipped) { // if a move is found, and only once
aolmenki 1:cc72ad58982b 564 moved = true; // has moved
aolmenki 1:cc72ad58982b 565 turn = ++turn%2; // increment turn
aolmenki 1:cc72ad58982b 566 flipped = true; // check flip
aolmenki 1:cc72ad58982b 567 }
aolmenki 1:cc72ad58982b 568 }
aolmenki 1:cc72ad58982b 569 if (!flipped) { // no changes were made
aolmenki 1:cc72ad58982b 570 invalid(x, y, oldColor); // change back to old color and revert changes
aolmenki 1:cc72ad58982b 571 }
aolmenki 1:cc72ad58982b 572 } else { //invalid
aolmenki 1:cc72ad58982b 573 invalid(x, y, oldColor); // not empty space
aolmenki 1:cc72ad58982b 574 }
aolmenki 1:cc72ad58982b 575 }
aolmenki 1:cc72ad58982b 576
aolmenki 1:cc72ad58982b 577
aolmenki 1:cc72ad58982b 578 void countPieces()
aolmenki 1:cc72ad58982b 579 {
aolmenki 1:cc72ad58982b 580 numBlack = 0;
aolmenki 1:cc72ad58982b 581 numWhite = 0;
aolmenki 1:cc72ad58982b 582 for(int row = 0; row < 8; row++){
aolmenki 1:cc72ad58982b 583 for(int col = 0; col < 8; col++){
aolmenki 1:cc72ad58982b 584 if(gb[row][col]==2)
aolmenki 1:cc72ad58982b 585 {
aolmenki 1:cc72ad58982b 586 numBlack++;
aolmenki 1:cc72ad58982b 587 }
aolmenki 1:cc72ad58982b 588 if(gb[row][col]==1)
aolmenki 1:cc72ad58982b 589 {
aolmenki 1:cc72ad58982b 590 numWhite++;
aolmenki 1:cc72ad58982b 591 }
aolmenki 1:cc72ad58982b 592 }
aolmenki 1:cc72ad58982b 593 }
aolmenki 1:cc72ad58982b 594 }
aolmenki 1:cc72ad58982b 595 void result() {
aolmenki 1:cc72ad58982b 596 uLCD.cls(); // THIS CODE ASSUMES BACKGROUND CORRECTLY RESETS TO 0x007F00
aolmenki 1:cc72ad58982b 597
aolmenki 1:cc72ad58982b 598 countPieces();
aolmenki 1:cc72ad58982b 599 uLCD.color(RED);
aolmenki 1:cc72ad58982b 600 uLCD.printf("Score\n");
aolmenki 1:cc72ad58982b 601 uLCD.color(BLACK);
aolmenki 1:cc72ad58982b 602 uLCD.printf("%D, numBlack");
aolmenki 1:cc72ad58982b 603 uLCD.color(RED);
aolmenki 1:cc72ad58982b 604 uLCD.printf(" - ");
aolmenki 1:cc72ad58982b 605 uLCD.color(WHITE);
aolmenki 1:cc72ad58982b 606 uLCD.printf("%D \n", numWhite);
aolmenki 1:cc72ad58982b 607 uLCD.color(RED);
aolmenki 1:cc72ad58982b 608 uLCD.printf("\n Play again? \n");
aolmenki 1:cc72ad58982b 609
aolmenki 1:cc72ad58982b 610 uLCD.text_char('Y', 4, 9, BLUE);
aolmenki 1:cc72ad58982b 611 uLCD.text_char('E', 5, 9, BLUE);
aolmenki 1:cc72ad58982b 612 uLCD.text_char('S', 6, 9, BLUE);
aolmenki 1:cc72ad58982b 613 uLCD.text_char('N', 11, 9, RED);
aolmenki 1:cc72ad58982b 614 uLCD.text_char('O', 12, 9, RED);
aolmenki 1:cc72ad58982b 615
aolmenki 1:cc72ad58982b 616 uLCD.rectangle(20,90, 40, 110, 0xffff00); //Default over Yes
aolmenki 1:cc72ad58982b 617 bool optionSelected = false;
aolmenki 1:cc72ad58982b 618 int choice = 1; //Default choice Yes
aolmenki 1:cc72ad58982b 619 while(optionSelected ==false){
aolmenki 1:cc72ad58982b 620 if(myNav[2] == 0 ){
aolmenki 1:cc72ad58982b 621 uLCD.rectangle(20,90, 40, 110, 0xffff00);
aolmenki 1:cc72ad58982b 622 uLCD.rectangle(80,90, 100, 110, 0x007F00);
aolmenki 1:cc72ad58982b 623 choice = 1;
aolmenki 1:cc72ad58982b 624 }
aolmenki 1:cc72ad58982b 625 if(myNav[3] == 0 ){
aolmenki 1:cc72ad58982b 626 uLCD.rectangle(20,90, 40, 110, 0x007F00);
aolmenki 1:cc72ad58982b 627 uLCD.rectangle(80,90, 100, 110, 0xffff00);
aolmenki 1:cc72ad58982b 628 choice = 2;
aolmenki 1:cc72ad58982b 629 }
aolmenki 1:cc72ad58982b 630 if(myNav[4] == 0){ //Joystick pressed to Select
aolmenki 1:cc72ad58982b 631 if(choice == 1) {
aolmenki 1:cc72ad58982b 632 //Restart and play again
aolmenki 1:cc72ad58982b 633 initialize_game_board();
aolmenki 1:cc72ad58982b 634 xCoor = 3;
aolmenki 1:cc72ad58982b 635 yCoor = 4;
aolmenki 1:cc72ad58982b 636 }
aolmenki 1:cc72ad58982b 637 else{ //choice == 0
aolmenki 1:cc72ad58982b 638 //Quit?
aolmenki 1:cc72ad58982b 639 }
aolmenki 1:cc72ad58982b 640 }
aolmenki 1:cc72ad58982b 641 }
aolmenki 1:cc72ad58982b 642 }
aolmenki 1:cc72ad58982b 643
EvolutionOfWar 0:fce0f9489de3 644 int main() {
aolmenki 1:cc72ad58982b 645 while (1) {
aolmenki 1:cc72ad58982b 646
aolmenki 1:cc72ad58982b 647 initialize_game_board();
aolmenki 1:cc72ad58982b 648 drawPieces();
aolmenki 1:cc72ad58982b 649 while(!gameover) { //active game, checks game over
aolmenki 1:cc72ad58982b 650
aolmenki 1:cc72ad58982b 651 // check inputs
aolmenki 1:cc72ad58982b 652 while (!moved) {
aolmenki 1:cc72ad58982b 653 drawCursor(xCoor, yCoor);
aolmenki 1:cc72ad58982b 654 wait(0.02);
aolmenki 1:cc72ad58982b 655 removeCursor(xCoor, yCoor);
aolmenki 1:cc72ad58982b 656 //with pullups a button hit is a "0" - "~" inverts data to leds
aolmenki 1:cc72ad58982b 657 //~(myNav & 0x0F); //update leds with nav switch direction inputs
aolmenki 1:cc72ad58982b 658 if(myNav[0] == 0 && xCoor != 0){xCoor --;}
aolmenki 1:cc72ad58982b 659 if(myNav[1] == 0 && xCoor != 7){xCoor ++;}
aolmenki 1:cc72ad58982b 660 if(myNav[2] == 0 && yCoor != 7){yCoor ++;}
aolmenki 1:cc72ad58982b 661 if(myNav[3] == 0 && yCoor != 0){yCoor --;}
aolmenki 1:cc72ad58982b 662 if(myNav.fire()) {valid_move(xCoor, yCoor);} // Press Down Joystick for Select
aolmenki 1:cc72ad58982b 663 //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this
aolmenki 1:cc72ad58982b 664 }
aolmenki 1:cc72ad58982b 665 moved = false;
aolmenki 1:cc72ad58982b 666 // check game over
aolmenki 1:cc72ad58982b 667 countPieces();
aolmenki 1:cc72ad58982b 668 gameover = numBlack + numWhite == 64;
aolmenki 1:cc72ad58982b 669 }
aolmenki 1:cc72ad58982b 670 result();
EvolutionOfWar 0:fce0f9489de3 671 }
EvolutionOfWar 0:fce0f9489de3 672 }
EvolutionOfWar 0:fce0f9489de3 673 //initializeBoard();
EvolutionOfWar 0:fce0f9489de3 674 //drawBoard();
EvolutionOfWar 0:fce0f9489de3 675 //displayScore();