Lab 4 for ECE4180, final verison
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
Fork of Lab4-Reversi-v2 by
Overview
For our project, we created the 2 player game “Reversi”, otherwise known as Othello using the uLCD-144-G2, a Sparkfun 5-way Tactile Switch Joystick, a speaker with a Class D audio amp breakout board, and SD card reader. The program begins with the dark player’s turn, and the joystick is used to move the red cursor box around. Pressing down on the joystick will attempt to put a piece down, resulting in a flipping sound, and will show an X on the screen for invalid moves. The game will finish when the board is filled, and go to a result screen, playing a victory sound. The result screen allows for a play again option.
Components
- /users/4180_1/notebook/using-a-navigation-switch-digital-joystick/
- /users/4180_1/notebook/ulcd-144-g2-128-by-128-color-lcd/
- /users/4180_1/notebook/using-a-speaker-for-audio-output/
- /cookbook/SD-Card-File-System
Wiring
mbed | Cable | uLCD |
---|---|---|
P28 | TX | RX |
P27 | RX | TX |
P29 | RES | RESET |
VU | +5V | +5V |
GND | GND | GND |
mbed | SD Card Reader |
---|---|
P5 | DI |
P6 | DO |
P7 | SCK |
P8 | CS |
GND | GND |
Vout | VCC |
mbed | Amplifer | Speaker |
---|---|---|
P18 | In + | |
GND | GND | |
VU | PWR + | |
Out + | + | |
Out - | - | |
GND | PWR - |
mbed | Joystick |
---|---|
P14 | Up |
P13 | Center |
P12 | Left |
P11 | Down |
P10 | Right |
GND | - |
Vout | + |
Program
Import programLab4-Reversi-Final
Lab 4 for ECE4180, final verison
Reversi.cpp@3:b1fe86f61f2f, 2016-11-01 (annotated)
- Committer:
- aolmenki
- Date:
- Tue Nov 01 23:30:44 2016 +0000
- Revision:
- 3:b1fe86f61f2f
- Parent:
- 2:1f7c6cc19a9a
Final
Who changed what in which revision?
User | Revision | Line number | New 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 | 2:1f7c6cc19a9a | 5 | #include "stdio.h" |
EvolutionOfWar | 0:fce0f9489de3 | 6 | uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object |
aolmenki | 1:cc72ad58982b | 7 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board |
aolmenki | 1:cc72ad58982b | 8 | PwmOut Speaker(p21); |
aolmenki | 1:cc72ad58982b | 9 | AnalogOut DACout(p18); |
EvolutionOfWar | 0:fce0f9489de3 | 10 | |
aolmenki | 3:b1fe86f61f2f | 11 | DigitalIn pb(p15); |
EvolutionOfWar | 2:1f7c6cc19a9a | 12 | |
aolmenki | 1:cc72ad58982b | 13 | wave_player waver(&DACout); |
EvolutionOfWar | 0:fce0f9489de3 | 14 | |
EvolutionOfWar | 0:fce0f9489de3 | 15 | class Nav_Switch |
EvolutionOfWar | 0:fce0f9489de3 | 16 | { |
EvolutionOfWar | 0:fce0f9489de3 | 17 | public: |
EvolutionOfWar | 0:fce0f9489de3 | 18 | Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire); |
EvolutionOfWar | 0:fce0f9489de3 | 19 | int read(); |
EvolutionOfWar | 0:fce0f9489de3 | 20 | //boolean functions to test each switch |
EvolutionOfWar | 0:fce0f9489de3 | 21 | bool up(); |
EvolutionOfWar | 0:fce0f9489de3 | 22 | bool down(); |
EvolutionOfWar | 0:fce0f9489de3 | 23 | bool left(); |
EvolutionOfWar | 0:fce0f9489de3 | 24 | bool right(); |
EvolutionOfWar | 0:fce0f9489de3 | 25 | bool fire(); |
EvolutionOfWar | 0:fce0f9489de3 | 26 | //automatic read on RHS |
EvolutionOfWar | 0:fce0f9489de3 | 27 | operator int (); |
EvolutionOfWar | 0:fce0f9489de3 | 28 | //index to any switch array style |
EvolutionOfWar | 0:fce0f9489de3 | 29 | bool operator[](int index) { |
EvolutionOfWar | 0:fce0f9489de3 | 30 | return _pins[index]; |
EvolutionOfWar | 0:fce0f9489de3 | 31 | }; |
EvolutionOfWar | 0:fce0f9489de3 | 32 | private: |
EvolutionOfWar | 0:fce0f9489de3 | 33 | BusIn _pins; |
EvolutionOfWar | 0:fce0f9489de3 | 34 | |
EvolutionOfWar | 0:fce0f9489de3 | 35 | }; |
EvolutionOfWar | 0:fce0f9489de3 | 36 | Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire): |
EvolutionOfWar | 0:fce0f9489de3 | 37 | _pins(up, down, left, right, fire) |
EvolutionOfWar | 0:fce0f9489de3 | 38 | { |
EvolutionOfWar | 0:fce0f9489de3 | 39 | _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise |
EvolutionOfWar | 0:fce0f9489de3 | 40 | wait(0.001); //delays just a bit for pullups to pull inputs high |
EvolutionOfWar | 0:fce0f9489de3 | 41 | } |
EvolutionOfWar | 0:fce0f9489de3 | 42 | inline bool Nav_Switch::up() |
EvolutionOfWar | 0:fce0f9489de3 | 43 | { |
EvolutionOfWar | 0:fce0f9489de3 | 44 | return !(_pins[0]); |
EvolutionOfWar | 0:fce0f9489de3 | 45 | } |
EvolutionOfWar | 0:fce0f9489de3 | 46 | inline bool Nav_Switch::down() |
EvolutionOfWar | 0:fce0f9489de3 | 47 | { |
EvolutionOfWar | 0:fce0f9489de3 | 48 | return !(_pins[1]); |
EvolutionOfWar | 0:fce0f9489de3 | 49 | } |
EvolutionOfWar | 0:fce0f9489de3 | 50 | inline bool Nav_Switch::left() |
EvolutionOfWar | 0:fce0f9489de3 | 51 | { |
EvolutionOfWar | 0:fce0f9489de3 | 52 | return !(_pins[2]); |
EvolutionOfWar | 0:fce0f9489de3 | 53 | } |
EvolutionOfWar | 0:fce0f9489de3 | 54 | inline bool Nav_Switch::right() |
EvolutionOfWar | 0:fce0f9489de3 | 55 | { |
EvolutionOfWar | 0:fce0f9489de3 | 56 | return !(_pins[3]); |
EvolutionOfWar | 0:fce0f9489de3 | 57 | } |
EvolutionOfWar | 0:fce0f9489de3 | 58 | inline bool Nav_Switch::fire() |
EvolutionOfWar | 0:fce0f9489de3 | 59 | { |
EvolutionOfWar | 0:fce0f9489de3 | 60 | return !(_pins[4]); |
EvolutionOfWar | 0:fce0f9489de3 | 61 | } |
EvolutionOfWar | 0:fce0f9489de3 | 62 | inline int Nav_Switch::read() |
EvolutionOfWar | 0:fce0f9489de3 | 63 | { |
EvolutionOfWar | 0:fce0f9489de3 | 64 | return _pins.read(); |
EvolutionOfWar | 0:fce0f9489de3 | 65 | } |
EvolutionOfWar | 0:fce0f9489de3 | 66 | inline Nav_Switch::operator int () |
EvolutionOfWar | 0:fce0f9489de3 | 67 | { |
EvolutionOfWar | 0:fce0f9489de3 | 68 | return _pins.read(); |
EvolutionOfWar | 0:fce0f9489de3 | 69 | } |
EvolutionOfWar | 0:fce0f9489de3 | 70 | |
EvolutionOfWar | 0:fce0f9489de3 | 71 | Nav_Switch myNav( p14, p11, p12, p10, p13); //pin order on Sparkfun breakout |
EvolutionOfWar | 0:fce0f9489de3 | 72 | |
aolmenki | 1:cc72ad58982b | 73 | int turn = 1; // black goes on 1, white goes on 2 (or 0) |
EvolutionOfWar | 0:fce0f9489de3 | 74 | int gb[8][8]; |
EvolutionOfWar | 0:fce0f9489de3 | 75 | int NUM_COLS = 8; |
EvolutionOfWar | 0:fce0f9489de3 | 76 | int NUM_ROWS = 8; |
aolmenki | 1:cc72ad58982b | 77 | int xCoor = 3; |
aolmenki | 1:cc72ad58982b | 78 | int yCoor = 4; |
aolmenki | 1:cc72ad58982b | 79 | int numBlack = 0; |
aolmenki | 1:cc72ad58982b | 80 | int numWhite = 0; |
aolmenki | 1:cc72ad58982b | 81 | bool moved = false; |
aolmenki | 1:cc72ad58982b | 82 | bool gameover = false; |
aolmenki | 1:cc72ad58982b | 83 | |
EvolutionOfWar | 0:fce0f9489de3 | 84 | void initialize_game_board() |
EvolutionOfWar | 0:fce0f9489de3 | 85 | { |
EvolutionOfWar | 0:fce0f9489de3 | 86 | //This is a nested loop to make sure every cell is empty |
EvolutionOfWar | 0:fce0f9489de3 | 87 | //Cell Codes: 0 = empty, 1 = white piece, 2 = black piece |
EvolutionOfWar | 0:fce0f9489de3 | 88 | for (int i = 0; i < NUM_ROWS; i++) |
EvolutionOfWar | 0:fce0f9489de3 | 89 | { |
EvolutionOfWar | 0:fce0f9489de3 | 90 | for (int j = 0; j < NUM_COLS; j++) |
EvolutionOfWar | 0:fce0f9489de3 | 91 | gb[i][j] = 0; |
EvolutionOfWar | 0:fce0f9489de3 | 92 | } |
EvolutionOfWar | 0:fce0f9489de3 | 93 | gb[3][3] = 1;//Put down white piece |
EvolutionOfWar | 0:fce0f9489de3 | 94 | gb[4][4] = 1;//Put down white piece |
EvolutionOfWar | 0:fce0f9489de3 | 95 | gb[3][4] = 2;//Put down black piece |
EvolutionOfWar | 0:fce0f9489de3 | 96 | gb[4][3] = 2;//Put down black piece |
EvolutionOfWar | 0:fce0f9489de3 | 97 | |
EvolutionOfWar | 0:fce0f9489de3 | 98 | uLCD.cls(); |
aolmenki | 1:cc72ad58982b | 99 | uLCD.filled_rectangle(0,0,127,127,0x007f00); |
EvolutionOfWar | 0:fce0f9489de3 | 100 | |
EvolutionOfWar | 0:fce0f9489de3 | 101 | uLCD.rectangle(7,7,120,120,DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 102 | uLCD.rectangle(8,8,119,119,DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 103 | //uLCD.filled_rectangle(8,20,120,21,DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 104 | |
EvolutionOfWar | 0:fce0f9489de3 | 105 | for( int i = 1; i< 9; i++) |
EvolutionOfWar | 0:fce0f9489de3 | 106 | { |
EvolutionOfWar | 0:fce0f9489de3 | 107 | uLCD.filled_rectangle(8, 7 + 14*i,119,8 + 14*i,DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 108 | } |
EvolutionOfWar | 0:fce0f9489de3 | 109 | for( int j = 1; j<9; j++) |
EvolutionOfWar | 0:fce0f9489de3 | 110 | { |
EvolutionOfWar | 0:fce0f9489de3 | 111 | uLCD.filled_rectangle(7 + 14*j, 8, 8+14*j, 119, DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 112 | } |
EvolutionOfWar | 0:fce0f9489de3 | 113 | } |
EvolutionOfWar | 0:fce0f9489de3 | 114 | |
aolmenki | 1:cc72ad58982b | 115 | void drawCursor(int x, int y) //Expecting x ={0,7} and y ={0,7} |
EvolutionOfWar | 0:fce0f9489de3 | 116 | { |
aolmenki | 1:cc72ad58982b | 117 | uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,8 + 14*x,22 + 14*y,RED); |
aolmenki | 1:cc72ad58982b | 118 | uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,22 + 14*x,8 + 14*y,RED); |
aolmenki | 1:cc72ad58982b | 119 | uLCD.filled_rectangle(7 + 14*x, 21 + 14*y,22 + 14*x,22 + 14*y,RED); |
aolmenki | 1:cc72ad58982b | 120 | uLCD.filled_rectangle(21 + 14*x, 7 + 14*y,22 + 14*x,22 + 14*y,RED); |
EvolutionOfWar | 0:fce0f9489de3 | 121 | } |
EvolutionOfWar | 0:fce0f9489de3 | 122 | |
aolmenki | 1:cc72ad58982b | 123 | void removeCursor(int x,int y) |
EvolutionOfWar | 0:fce0f9489de3 | 124 | { |
aolmenki | 1:cc72ad58982b | 125 | uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,8 + 14*x,22 + 14*y,DGREY); |
aolmenki | 1:cc72ad58982b | 126 | uLCD.filled_rectangle(7 + 14*x, 7 + 14*y,22 + 14*x,8 + 14*y,DGREY); |
aolmenki | 1:cc72ad58982b | 127 | uLCD.filled_rectangle(7 + 14*x, 21 + 14*y,22 + 14*x,22 + 14*y,DGREY); |
aolmenki | 1:cc72ad58982b | 128 | uLCD.filled_rectangle(21 + 14*x, 7 + 14*y,22 + 14*x,22 + 14*y,DGREY); |
EvolutionOfWar | 0:fce0f9489de3 | 129 | } |
EvolutionOfWar | 0:fce0f9489de3 | 130 | |
EvolutionOfWar | 0:fce0f9489de3 | 131 | void drawPieces(){ |
EvolutionOfWar | 0:fce0f9489de3 | 132 | for (int i = 0; i < NUM_ROWS; i++) |
EvolutionOfWar | 0:fce0f9489de3 | 133 | { |
EvolutionOfWar | 0:fce0f9489de3 | 134 | for (int j = 0; j < NUM_COLS; j++) |
EvolutionOfWar | 0:fce0f9489de3 | 135 | { |
aolmenki | 1:cc72ad58982b | 136 | if(gb[i][j] == 0){ |
aolmenki | 1:cc72ad58982b | 137 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x007f00); |
aolmenki | 1:cc72ad58982b | 138 | } |
EvolutionOfWar | 0:fce0f9489de3 | 139 | if(gb[i][j] == 1){ |
EvolutionOfWar | 0:fce0f9489de3 | 140 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , WHITE); |
EvolutionOfWar | 0:fce0f9489de3 | 141 | } |
EvolutionOfWar | 0:fce0f9489de3 | 142 | if(gb[i][j] == 2){ |
EvolutionOfWar | 0:fce0f9489de3 | 143 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , BLACK); |
EvolutionOfWar | 0:fce0f9489de3 | 144 | } |
EvolutionOfWar | 0:fce0f9489de3 | 145 | } |
EvolutionOfWar | 0:fce0f9489de3 | 146 | } |
EvolutionOfWar | 0:fce0f9489de3 | 147 | } |
EvolutionOfWar | 0:fce0f9489de3 | 148 | |
EvolutionOfWar | 0:fce0f9489de3 | 149 | void drawPiece(int i, int j) { //xCoor, yCoor |
aolmenki | 1:cc72ad58982b | 150 | if (turn == 0) { |
aolmenki | 1:cc72ad58982b | 151 | gb[i][j] = 1; |
aolmenki | 1:cc72ad58982b | 152 | } else { |
aolmenki | 1:cc72ad58982b | 153 | gb[i][j] = 2; |
aolmenki | 1:cc72ad58982b | 154 | } |
EvolutionOfWar | 0:fce0f9489de3 | 155 | if(gb[i][j] == 1){ |
EvolutionOfWar | 0:fce0f9489de3 | 156 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , WHITE); |
EvolutionOfWar | 0:fce0f9489de3 | 157 | } |
EvolutionOfWar | 0:fce0f9489de3 | 158 | if(gb[i][j] == 2){ |
EvolutionOfWar | 0:fce0f9489de3 | 159 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , BLACK); |
EvolutionOfWar | 0:fce0f9489de3 | 160 | } |
EvolutionOfWar | 0:fce0f9489de3 | 161 | } |
EvolutionOfWar | 0:fce0f9489de3 | 162 | |
EvolutionOfWar | 0:fce0f9489de3 | 163 | void flippingPiece(int i, int j) { //xCoor, yCoor, animation |
aolmenki | 1:cc72ad58982b | 164 | |
aolmenki | 1:cc72ad58982b | 165 | if(gb[i][j] == 2){ //Gradually changes a piece White |
aolmenki | 1:cc72ad58982b | 166 | gb[i][j] = 1; |
EvolutionOfWar | 0:fce0f9489de3 | 167 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 168 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 169 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 170 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 171 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 172 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xffffff); |
EvolutionOfWar | 0:fce0f9489de3 | 173 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 174 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 175 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 176 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xffffff); |
EvolutionOfWar | 0:fce0f9489de3 | 177 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 178 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 179 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xffffff); |
EvolutionOfWar | 0:fce0f9489de3 | 180 | wait(0.1); |
aolmenki | 1:cc72ad58982b | 181 | } else if(gb[i][j] == 1){ //Gradually changes a piece Black |
aolmenki | 1:cc72ad58982b | 182 | gb[i][j] = 2; |
EvolutionOfWar | 0:fce0f9489de3 | 183 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 184 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 185 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 186 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 187 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 188 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 1 , 0x000000); |
EvolutionOfWar | 0:fce0f9489de3 | 189 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 190 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0xb2b2b2); |
EvolutionOfWar | 0:fce0f9489de3 | 191 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 192 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 3 , 0x000000); |
EvolutionOfWar | 0:fce0f9489de3 | 193 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x4c4c4c); |
EvolutionOfWar | 0:fce0f9489de3 | 194 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 195 | uLCD.filled_circle(14 * (i + 1), 14 * (j + 1), 5 , 0x000000); |
EvolutionOfWar | 0:fce0f9489de3 | 196 | wait(0.1); |
EvolutionOfWar | 0:fce0f9489de3 | 197 | } |
EvolutionOfWar | 0:fce0f9489de3 | 198 | } |
EvolutionOfWar | 0:fce0f9489de3 | 199 | |
EvolutionOfWar | 2:1f7c6cc19a9a | 200 | |
aolmenki | 1:cc72ad58982b | 201 | void invalid(int x, int y, int oldColor){ |
aolmenki | 1:cc72ad58982b | 202 | gb[x][y] = oldColor; |
aolmenki | 1:cc72ad58982b | 203 | drawPieces(); |
aolmenki | 1:cc72ad58982b | 204 | uLCD.line(9 + 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 9+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 205 | uLCD.line(11+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 18+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 206 | uLCD.line(20+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 20+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 207 | uLCD.line(18+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 11+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 208 | uLCD.line(9+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 9+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 209 | uLCD.line(18+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 11+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 210 | uLCD.line(20+ 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 20+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 211 | uLCD.line(11+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 18+ 14 * yCoor, RED); |
aolmenki | 1:cc72ad58982b | 212 | wait(1); |
aolmenki | 1:cc72ad58982b | 213 | uLCD.line(9 + 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 9+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 214 | uLCD.line(11+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 18+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 215 | uLCD.line(20+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 20+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 216 | uLCD.line(18+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 11+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 217 | uLCD.line(9+ 14 * xCoor, 18+ 14 * yCoor, 18+ 14 * xCoor, 9+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 218 | uLCD.line(18+ 14 * xCoor, 9+ 14 * yCoor, 20+ 14 * xCoor, 11+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 219 | uLCD.line(20+ 14 * xCoor, 11+ 14 * yCoor, 11+ 14 * xCoor, 20+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 220 | uLCD.line(11+ 14 * xCoor, 20+ 14 * yCoor, 9+ 14 * xCoor, 18+ 14 * yCoor, 0x007F00); |
aolmenki | 1:cc72ad58982b | 221 | drawPieces(); |
aolmenki | 1:cc72ad58982b | 222 | } |
aolmenki | 1:cc72ad58982b | 223 | |
aolmenki | 1:cc72ad58982b | 224 | void valid_move(int x, int y) { |
aolmenki | 1:cc72ad58982b | 225 | int opp, pl; |
aolmenki | 1:cc72ad58982b | 226 | bool invalidD[] = {false, false, false, false, false, false, false, false}; //flip checker |
aolmenki | 1:cc72ad58982b | 227 | if (turn == 1) { //pl is black |
aolmenki | 1:cc72ad58982b | 228 | opp = 1; |
aolmenki | 1:cc72ad58982b | 229 | pl = 2; |
aolmenki | 1:cc72ad58982b | 230 | } else { // pl is white |
aolmenki | 1:cc72ad58982b | 231 | opp = 2; |
aolmenki | 1:cc72ad58982b | 232 | pl = 1; |
EvolutionOfWar | 0:fce0f9489de3 | 233 | } |
aolmenki | 1:cc72ad58982b | 234 | int oldColor = gb[x][y]; //save old color for drawing over X |
aolmenki | 1:cc72ad58982b | 235 | bool flipped = false; |
aolmenki | 1:cc72ad58982b | 236 | if (gb[x][y] == 0) { // check empty space |
aolmenki | 1:cc72ad58982b | 237 | drawPiece(x, y); // emtpy so draw |
aolmenki | 1:cc72ad58982b | 238 | for (int i = 0; i < 8; i++) { // check for opponent around emtpy space and fill |
aolmenki | 1:cc72ad58982b | 239 | if (i == 0) { // right |
aolmenki | 1:cc72ad58982b | 240 | 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 | 3:b1fe86f61f2f | 241 | for (int j = x + 2; j < 8 && !flipped; j++) { |
aolmenki | 3:b1fe86f61f2f | 242 | if (gb[j][y] == pl) { |
aolmenki | 1:cc72ad58982b | 243 | for (int k = x + 1; k < j; k++) { |
aolmenki | 1:cc72ad58982b | 244 | flippingPiece(k, y); |
aolmenki | 1:cc72ad58982b | 245 | } |
aolmenki | 1:cc72ad58982b | 246 | flipped = true; |
aolmenki | 1:cc72ad58982b | 247 | } else if (gb[j][y] == 0) { |
aolmenki | 1:cc72ad58982b | 248 | j = 8; |
aolmenki | 1:cc72ad58982b | 249 | } |
aolmenki | 1:cc72ad58982b | 250 | } |
aolmenki | 1:cc72ad58982b | 251 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 252 | flipped = false; |
aolmenki | 1:cc72ad58982b | 253 | } else { |
aolmenki | 1:cc72ad58982b | 254 | invalidD[0] = true; |
aolmenki | 1:cc72ad58982b | 255 | } |
aolmenki | 1:cc72ad58982b | 256 | } else { |
aolmenki | 1:cc72ad58982b | 257 | invalidD[0] = true; |
aolmenki | 1:cc72ad58982b | 258 | } |
aolmenki | 1:cc72ad58982b | 259 | } else if (i == 1) { // down-right |
aolmenki | 1:cc72ad58982b | 260 | if (x + 1 < 7 && y + 1 < 7 && gb[x + 1][y + 1] == opp) { // check if within margin and next to other color |
aolmenki | 3:b1fe86f61f2f | 261 | for (int j = 2; j < 8 - x && j < 8 - y && !flipped; j++) { // start finding next same color |
aolmenki | 3:b1fe86f61f2f | 262 | if (gb[x + j][y + j] == pl) { // if same color and not already been flipping |
aolmenki | 1:cc72ad58982b | 263 | for (int k = 1; k < j; k++) { // between other color to this same color |
aolmenki | 1:cc72ad58982b | 264 | flippingPiece(x + k, y + k); // flip |
aolmenki | 1:cc72ad58982b | 265 | } |
aolmenki | 1:cc72ad58982b | 266 | flipped = true; // marked flipped |
aolmenki | 1:cc72ad58982b | 267 | } else if (gb[x + j][y + j] == 0) { // if you find an empty instead |
aolmenki | 1:cc72ad58982b | 268 | j = 8; // skip for loop |
aolmenki | 1:cc72ad58982b | 269 | } |
aolmenki | 1:cc72ad58982b | 270 | } |
aolmenki | 1:cc72ad58982b | 271 | if (flipped) { // if flipped |
aolmenki | 1:cc72ad58982b | 272 | flipped = false; // set variable back to false |
aolmenki | 1:cc72ad58982b | 273 | } else { |
aolmenki | 1:cc72ad58982b | 274 | invalidD[1] = true; // no flip happened, so set invalid tracker to true |
aolmenki | 1:cc72ad58982b | 275 | } |
aolmenki | 1:cc72ad58982b | 276 | } else { |
aolmenki | 1:cc72ad58982b | 277 | invalidD[1] = true; // not within margin or next to other color |
aolmenki | 1:cc72ad58982b | 278 | } |
aolmenki | 1:cc72ad58982b | 279 | } else if (i == 2) { // down |
aolmenki | 1:cc72ad58982b | 280 | if (y + 1 < 7 && gb[x][y + 1] == opp) { |
aolmenki | 3:b1fe86f61f2f | 281 | for (int j = y + 2; j < 8 && !flipped; j++) { |
aolmenki | 3:b1fe86f61f2f | 282 | if (gb[x][j] == pl) { |
aolmenki | 1:cc72ad58982b | 283 | for (int k = y + 1; k < j; k++) { |
aolmenki | 1:cc72ad58982b | 284 | flippingPiece(x, k); |
aolmenki | 1:cc72ad58982b | 285 | } |
aolmenki | 1:cc72ad58982b | 286 | flipped = true; |
aolmenki | 1:cc72ad58982b | 287 | } else if (gb[x][j] == 0) { |
aolmenki | 1:cc72ad58982b | 288 | j = 8; |
aolmenki | 1:cc72ad58982b | 289 | } |
aolmenki | 1:cc72ad58982b | 290 | } |
aolmenki | 1:cc72ad58982b | 291 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 292 | flipped = false; |
aolmenki | 1:cc72ad58982b | 293 | } else { |
aolmenki | 1:cc72ad58982b | 294 | invalidD[2] = true; |
aolmenki | 1:cc72ad58982b | 295 | } |
aolmenki | 1:cc72ad58982b | 296 | } else { |
aolmenki | 1:cc72ad58982b | 297 | invalidD[2] = true; |
aolmenki | 1:cc72ad58982b | 298 | } |
aolmenki | 1:cc72ad58982b | 299 | } else if (i == 3) { // down-left |
aolmenki | 1:cc72ad58982b | 300 | if (x - 1 > 0 && y + 1 < 7 && gb[x - 1][y + 1] == opp) { |
aolmenki | 3:b1fe86f61f2f | 301 | for (int j = 2; j < x + 1 && j < 8 - y && !flipped; j++) { |
aolmenki | 3:b1fe86f61f2f | 302 | if (gb[x - j][y + j] == pl) { |
aolmenki | 1:cc72ad58982b | 303 | for (int k = 1; k < j; k++) { |
aolmenki | 1:cc72ad58982b | 304 | flippingPiece(x - k, y + k); |
aolmenki | 1:cc72ad58982b | 305 | } |
aolmenki | 1:cc72ad58982b | 306 | flipped = true; |
aolmenki | 1:cc72ad58982b | 307 | } else if (gb[x - j][y + j] == 0) { |
aolmenki | 1:cc72ad58982b | 308 | j = 5; |
aolmenki | 1:cc72ad58982b | 309 | } |
aolmenki | 1:cc72ad58982b | 310 | } |
aolmenki | 1:cc72ad58982b | 311 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 312 | flipped = false; |
aolmenki | 1:cc72ad58982b | 313 | } else { |
aolmenki | 1:cc72ad58982b | 314 | invalidD[3] = true; |
aolmenki | 1:cc72ad58982b | 315 | } |
aolmenki | 1:cc72ad58982b | 316 | } else { |
aolmenki | 1:cc72ad58982b | 317 | invalidD[3] = true; |
aolmenki | 1:cc72ad58982b | 318 | } |
aolmenki | 1:cc72ad58982b | 319 | } else if (i == 4) { // left |
aolmenki | 1:cc72ad58982b | 320 | if (x - 1 > 0 && gb[x - 1][y] == opp) { |
aolmenki | 3:b1fe86f61f2f | 321 | for (int j = x - 2; j > -1 && !flipped; j--) { |
aolmenki | 3:b1fe86f61f2f | 322 | if (gb[j][y] == pl) { |
aolmenki | 1:cc72ad58982b | 323 | for (int k = x - 1; k > j; k--) { |
aolmenki | 1:cc72ad58982b | 324 | flippingPiece(k, y); |
aolmenki | 1:cc72ad58982b | 325 | } |
aolmenki | 1:cc72ad58982b | 326 | flipped = true; |
aolmenki | 1:cc72ad58982b | 327 | } else if (gb[j][y] == 0) { |
aolmenki | 1:cc72ad58982b | 328 | j = -1; |
aolmenki | 1:cc72ad58982b | 329 | } |
aolmenki | 1:cc72ad58982b | 330 | } |
aolmenki | 1:cc72ad58982b | 331 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 332 | flipped = false; |
aolmenki | 1:cc72ad58982b | 333 | } else { |
aolmenki | 1:cc72ad58982b | 334 | invalidD[4] = true; |
aolmenki | 1:cc72ad58982b | 335 | } |
aolmenki | 1:cc72ad58982b | 336 | } else { |
aolmenki | 1:cc72ad58982b | 337 | invalidD[4] = true; |
aolmenki | 1:cc72ad58982b | 338 | } |
aolmenki | 1:cc72ad58982b | 339 | } else if (i == 5) { // up-left |
aolmenki | 1:cc72ad58982b | 340 | if (x - 1 > 0 && y - 1 > 0 && gb[x - 1][y - 1] == opp) { |
aolmenki | 3:b1fe86f61f2f | 341 | for (int j = 2; j < x + 1 && j < y + 1 && !flipped; j++) { |
aolmenki | 3:b1fe86f61f2f | 342 | if (gb[x - j][y - j] == pl) { |
aolmenki | 1:cc72ad58982b | 343 | for (int k = 1; k < j; k++) { |
aolmenki | 1:cc72ad58982b | 344 | flippingPiece(x - k, y - k); |
aolmenki | 1:cc72ad58982b | 345 | } |
aolmenki | 1:cc72ad58982b | 346 | flipped = true; |
aolmenki | 1:cc72ad58982b | 347 | } else if (gb[x - j][y - j] == 0) { |
aolmenki | 3:b1fe86f61f2f | 348 | j = x + 1; |
aolmenki | 1:cc72ad58982b | 349 | } |
aolmenki | 1:cc72ad58982b | 350 | } |
aolmenki | 1:cc72ad58982b | 351 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 352 | flipped = false; |
aolmenki | 1:cc72ad58982b | 353 | } else { |
aolmenki | 1:cc72ad58982b | 354 | invalidD[5] = true; |
aolmenki | 1:cc72ad58982b | 355 | } |
aolmenki | 1:cc72ad58982b | 356 | } else { |
aolmenki | 1:cc72ad58982b | 357 | invalidD[5] = true; |
aolmenki | 1:cc72ad58982b | 358 | } |
aolmenki | 1:cc72ad58982b | 359 | } else if (i == 6) { // up |
aolmenki | 1:cc72ad58982b | 360 | if (y - 1 > 0 && gb[x][y - 1] == opp) { |
aolmenki | 3:b1fe86f61f2f | 361 | for (int j = y - 2; j > -1 && !flipped; j--) { |
aolmenki | 3:b1fe86f61f2f | 362 | if (gb[x][j] == pl) { |
aolmenki | 1:cc72ad58982b | 363 | for (int k = y - 1; k > j; k--) { |
aolmenki | 1:cc72ad58982b | 364 | flippingPiece(x, k); |
aolmenki | 1:cc72ad58982b | 365 | } |
aolmenki | 1:cc72ad58982b | 366 | flipped = true; |
aolmenki | 1:cc72ad58982b | 367 | } else if (gb[x][j] == 0) { |
aolmenki | 1:cc72ad58982b | 368 | j = -1; |
aolmenki | 1:cc72ad58982b | 369 | } |
aolmenki | 1:cc72ad58982b | 370 | } |
aolmenki | 1:cc72ad58982b | 371 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 372 | flipped = false; |
aolmenki | 1:cc72ad58982b | 373 | } else { |
aolmenki | 1:cc72ad58982b | 374 | invalidD[6] = true; |
aolmenki | 1:cc72ad58982b | 375 | } |
aolmenki | 1:cc72ad58982b | 376 | } else { |
aolmenki | 1:cc72ad58982b | 377 | invalidD[6] = true; |
aolmenki | 1:cc72ad58982b | 378 | } |
aolmenki | 1:cc72ad58982b | 379 | } else if (i == 7) { // up-right |
aolmenki | 1:cc72ad58982b | 380 | if (x + 1 < 7 && y - 1 > 0 && gb[x + 1][y - 1] == opp) { |
aolmenki | 3:b1fe86f61f2f | 381 | for (int j = 2; j < 8 - x && j < y + 1 && !flipped; j++) { |
aolmenki | 3:b1fe86f61f2f | 382 | if (gb[x + j][y - j] == pl) { |
aolmenki | 1:cc72ad58982b | 383 | for (int k = 1; k < j; k++) { |
aolmenki | 1:cc72ad58982b | 384 | flippingPiece(x + k, y - k); |
aolmenki | 1:cc72ad58982b | 385 | } |
aolmenki | 1:cc72ad58982b | 386 | flipped = true; |
aolmenki | 1:cc72ad58982b | 387 | } else if (gb[x + j][y - j] == 0) { |
aolmenki | 3:b1fe86f61f2f | 388 | j = 8 - x; |
aolmenki | 1:cc72ad58982b | 389 | } |
aolmenki | 1:cc72ad58982b | 390 | } |
aolmenki | 1:cc72ad58982b | 391 | if (flipped) { |
aolmenki | 1:cc72ad58982b | 392 | flipped = false; |
aolmenki | 1:cc72ad58982b | 393 | } else { |
aolmenki | 1:cc72ad58982b | 394 | invalidD[7] = true; |
aolmenki | 1:cc72ad58982b | 395 | } |
aolmenki | 1:cc72ad58982b | 396 | } else { |
aolmenki | 1:cc72ad58982b | 397 | invalidD[7] = true; |
aolmenki | 1:cc72ad58982b | 398 | } |
aolmenki | 1:cc72ad58982b | 399 | } |
aolmenki | 1:cc72ad58982b | 400 | } // finish checking around |
aolmenki | 1:cc72ad58982b | 401 | flipped = false; |
aolmenki | 1:cc72ad58982b | 402 | for (int i = 0; i < 8; i++) { |
aolmenki | 1:cc72ad58982b | 403 | if (!invalidD[i] && !flipped) { // if a move is found, and only once |
aolmenki | 1:cc72ad58982b | 404 | moved = true; // has moved |
aolmenki | 1:cc72ad58982b | 405 | turn = ++turn%2; // increment turn |
aolmenki | 1:cc72ad58982b | 406 | flipped = true; // check flip |
EvolutionOfWar | 2:1f7c6cc19a9a | 407 | |
EvolutionOfWar | 2:1f7c6cc19a9a | 408 | FILE *fp2 = fopen("/sd/wavfiles/FlipSound.wav", "r"); |
EvolutionOfWar | 2:1f7c6cc19a9a | 409 | if(fp2 == NULL) { |
EvolutionOfWar | 2:1f7c6cc19a9a | 410 | error("Could not open file for read\n"); |
EvolutionOfWar | 2:1f7c6cc19a9a | 411 | } |
EvolutionOfWar | 2:1f7c6cc19a9a | 412 | Speaker.period(1.0/400000.0); |
EvolutionOfWar | 2:1f7c6cc19a9a | 413 | waver.play(fp2); //Plays *.wav audio file |
EvolutionOfWar | 2:1f7c6cc19a9a | 414 | fclose(fp2); |
aolmenki | 1:cc72ad58982b | 415 | } |
aolmenki | 1:cc72ad58982b | 416 | } |
aolmenki | 1:cc72ad58982b | 417 | if (!flipped) { // no changes were made |
aolmenki | 1:cc72ad58982b | 418 | invalid(x, y, oldColor); // change back to old color and revert changes |
aolmenki | 1:cc72ad58982b | 419 | } |
aolmenki | 1:cc72ad58982b | 420 | } else { //invalid |
aolmenki | 1:cc72ad58982b | 421 | invalid(x, y, oldColor); // not empty space |
aolmenki | 1:cc72ad58982b | 422 | } |
aolmenki | 1:cc72ad58982b | 423 | } |
aolmenki | 1:cc72ad58982b | 424 | |
aolmenki | 1:cc72ad58982b | 425 | |
aolmenki | 1:cc72ad58982b | 426 | void countPieces() |
aolmenki | 1:cc72ad58982b | 427 | { |
aolmenki | 1:cc72ad58982b | 428 | numBlack = 0; |
aolmenki | 1:cc72ad58982b | 429 | numWhite = 0; |
aolmenki | 1:cc72ad58982b | 430 | for(int row = 0; row < 8; row++){ |
aolmenki | 1:cc72ad58982b | 431 | for(int col = 0; col < 8; col++){ |
aolmenki | 1:cc72ad58982b | 432 | if(gb[row][col]==2) |
aolmenki | 1:cc72ad58982b | 433 | { |
aolmenki | 1:cc72ad58982b | 434 | numBlack++; |
aolmenki | 1:cc72ad58982b | 435 | } |
aolmenki | 1:cc72ad58982b | 436 | if(gb[row][col]==1) |
aolmenki | 1:cc72ad58982b | 437 | { |
aolmenki | 1:cc72ad58982b | 438 | numWhite++; |
aolmenki | 1:cc72ad58982b | 439 | } |
aolmenki | 1:cc72ad58982b | 440 | } |
aolmenki | 1:cc72ad58982b | 441 | } |
aolmenki | 1:cc72ad58982b | 442 | } |
aolmenki | 1:cc72ad58982b | 443 | void result() { |
aolmenki | 1:cc72ad58982b | 444 | uLCD.cls(); // THIS CODE ASSUMES BACKGROUND CORRECTLY RESETS TO 0x007F00 |
EvolutionOfWar | 2:1f7c6cc19a9a | 445 | uLCD.filled_rectangle(0,0,127,127,0x007f00); |
aolmenki | 1:cc72ad58982b | 446 | |
EvolutionOfWar | 2:1f7c6cc19a9a | 447 | FILE *fp1 = fopen("/sd/wavfiles/Victory.wav", "r"); |
aolmenki | 3:b1fe86f61f2f | 448 | if(fp1 == NULL) { |
EvolutionOfWar | 2:1f7c6cc19a9a | 449 | error("Could not open file for read\n"); |
aolmenki | 3:b1fe86f61f2f | 450 | } |
aolmenki | 3:b1fe86f61f2f | 451 | Speaker.period(1.0/400000.0); |
aolmenki | 3:b1fe86f61f2f | 452 | waver.play(fp1); //Plays *.wav audio file |
aolmenki | 3:b1fe86f61f2f | 453 | fclose(fp1); |
aolmenki | 1:cc72ad58982b | 454 | countPieces(); |
aolmenki | 3:b1fe86f61f2f | 455 | uLCD.textbackground_color(0x007f00); |
aolmenki | 1:cc72ad58982b | 456 | uLCD.color(RED); |
aolmenki | 1:cc72ad58982b | 457 | uLCD.printf("Score\n"); |
aolmenki | 1:cc72ad58982b | 458 | uLCD.color(BLACK); |
aolmenki | 3:b1fe86f61f2f | 459 | uLCD.printf("%d", numBlack); |
aolmenki | 1:cc72ad58982b | 460 | uLCD.color(RED); |
aolmenki | 1:cc72ad58982b | 461 | uLCD.printf(" - "); |
aolmenki | 1:cc72ad58982b | 462 | uLCD.color(WHITE); |
aolmenki | 1:cc72ad58982b | 463 | uLCD.printf("%D \n", numWhite); |
aolmenki | 1:cc72ad58982b | 464 | uLCD.color(RED); |
aolmenki | 1:cc72ad58982b | 465 | uLCD.printf("\n Play again? \n"); |
aolmenki | 1:cc72ad58982b | 466 | |
aolmenki | 3:b1fe86f61f2f | 467 | uLCD.text_char('Y', 8, 9, BLUE); |
aolmenki | 3:b1fe86f61f2f | 468 | uLCD.text_char('E', 9, 9, BLUE); |
aolmenki | 3:b1fe86f61f2f | 469 | uLCD.text_char('S', 10, 9, BLUE); |
aolmenki | 1:cc72ad58982b | 470 | |
aolmenki | 1:cc72ad58982b | 471 | bool optionSelected = false; |
aolmenki | 3:b1fe86f61f2f | 472 | while(optionSelected == false){ |
aolmenki | 1:cc72ad58982b | 473 | if(myNav[4] == 0){ //Joystick pressed to Select |
aolmenki | 3:b1fe86f61f2f | 474 | //Restart and play again |
aolmenki | 3:b1fe86f61f2f | 475 | initialize_game_board(); |
aolmenki | 3:b1fe86f61f2f | 476 | drawPieces(); |
aolmenki | 3:b1fe86f61f2f | 477 | xCoor = 3; |
aolmenki | 3:b1fe86f61f2f | 478 | yCoor = 4; |
aolmenki | 3:b1fe86f61f2f | 479 | optionSelected = true; |
aolmenki | 1:cc72ad58982b | 480 | } |
aolmenki | 1:cc72ad58982b | 481 | } |
aolmenki | 1:cc72ad58982b | 482 | } |
aolmenki | 1:cc72ad58982b | 483 | |
EvolutionOfWar | 0:fce0f9489de3 | 484 | int main() { |
EvolutionOfWar | 2:1f7c6cc19a9a | 485 | pb.mode(PullUp); |
aolmenki | 1:cc72ad58982b | 486 | while (1) { |
aolmenki | 1:cc72ad58982b | 487 | |
aolmenki | 1:cc72ad58982b | 488 | initialize_game_board(); |
aolmenki | 1:cc72ad58982b | 489 | drawPieces(); |
aolmenki | 1:cc72ad58982b | 490 | while(!gameover) { //active game, checks game over |
aolmenki | 1:cc72ad58982b | 491 | while (!moved) { |
aolmenki | 1:cc72ad58982b | 492 | drawCursor(xCoor, yCoor); |
aolmenki | 1:cc72ad58982b | 493 | wait(0.02); |
aolmenki | 1:cc72ad58982b | 494 | removeCursor(xCoor, yCoor); |
aolmenki | 1:cc72ad58982b | 495 | //with pullups a button hit is a "0" - "~" inverts data to leds |
aolmenki | 1:cc72ad58982b | 496 | //~(myNav & 0x0F); //update leds with nav switch direction inputs |
aolmenki | 1:cc72ad58982b | 497 | if(myNav[0] == 0 && xCoor != 0){xCoor --;} |
aolmenki | 1:cc72ad58982b | 498 | if(myNav[1] == 0 && xCoor != 7){xCoor ++;} |
aolmenki | 1:cc72ad58982b | 499 | if(myNav[2] == 0 && yCoor != 7){yCoor ++;} |
aolmenki | 1:cc72ad58982b | 500 | if(myNav[3] == 0 && yCoor != 0){yCoor --;} |
aolmenki | 1:cc72ad58982b | 501 | if(myNav.fire()) {valid_move(xCoor, yCoor);} // Press Down Joystick for Select |
aolmenki | 1:cc72ad58982b | 502 | //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this |
aolmenki | 3:b1fe86f61f2f | 503 | if (pb == 0) { |
aolmenki | 3:b1fe86f61f2f | 504 | result(); |
aolmenki | 3:b1fe86f61f2f | 505 | } |
aolmenki | 1:cc72ad58982b | 506 | } |
aolmenki | 1:cc72ad58982b | 507 | moved = false; |
aolmenki | 1:cc72ad58982b | 508 | // check game over |
aolmenki | 1:cc72ad58982b | 509 | countPieces(); |
aolmenki | 3:b1fe86f61f2f | 510 | gameover = (numBlack + numWhite == 64 || gameover); |
aolmenki | 1:cc72ad58982b | 511 | } |
aolmenki | 1:cc72ad58982b | 512 | result(); |
EvolutionOfWar | 0:fce0f9489de3 | 513 | } |
EvolutionOfWar | 0:fce0f9489de3 | 514 | } |
EvolutionOfWar | 0:fce0f9489de3 | 515 | //initializeBoard(); |
EvolutionOfWar | 0:fce0f9489de3 | 516 | //drawBoard(); |
EvolutionOfWar | 0:fce0f9489de3 | 517 | //displayScore(); |