swag

Dependencies:   Motor Servo mbed_tictactoe

Committer:
mattsims12
Date:
Tue Oct 20 12:55:55 2015 +0000
Revision:
3:317e06586628
Parent:
2:cbc3ef689c91
Child:
4:6342714f3bc3
swag

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mattsims12 3:317e06586628 1 /*
mattsims12 3:317e06586628 2 Matthew Sims and Ryan Limjoco
mattsims12 3:317e06586628 3 Robot that plays you in tic tac toe
mattsims12 3:317e06586628 4 Shorr 1001
mattsims12 3:317e06586628 5 */
mattsims12 3:317e06586628 6
mattsims12 0:233cd31a07a8 7 #include "mbed.h"
mattsims12 0:233cd31a07a8 8 #include "Motor.h"
mattsims12 0:233cd31a07a8 9 #include "Servo.h"
mattsims12 0:233cd31a07a8 10 #include "Timer.h"
mattsims12 0:233cd31a07a8 11
mattsims12 0:233cd31a07a8 12 DigitalOut test(LED1);
mattsims12 0:233cd31a07a8 13 DigitalIn in[]= {p16,p17,p18,p19,p20,p15};
mattsims12 0:233cd31a07a8 14 DigitalOut lights[]= {p5,p6,p7,p8,p11};
mattsims12 0:233cd31a07a8 15 Timer timer;
mattsims12 0:233cd31a07a8 16 Motor m(p25,p27,p28);
mattsims12 0:233cd31a07a8 17 Servo twist(p22);
mattsims12 0:233cd31a07a8 18 Servo drop(p21);
mattsims12 0:233cd31a07a8 19
mattsims12 0:233cd31a07a8 20 int board[3][3];
mattsims12 0:233cd31a07a8 21 int xglobal,yglobal; //Used to get 2 ints out of tworow
mattsims12 0:233cd31a07a8 22 int xprev,yprev,xstart,ystart; //Record Player's Previous move and the starting move of the ai
mattsims12 0:233cd31a07a8 23
mattsims12 0:233cd31a07a8 24 //Function Prototypes
mattsims12 0:233cd31a07a8 25 int winner(); //Checks winner and returns who won
mattsims12 0:233cd31a07a8 26 void player(int chip); //Player picks space
mattsims12 0:233cd31a07a8 27 void ai(int chip,int difficulty); //Ai picks space
mattsims12 0:233cd31a07a8 28 int turn(); //Determines the turn number(useful for difficulty 4)
mattsims12 0:233cd31a07a8 29 bool tworow(); //Checks for 2 in a row(for ai)
mattsims12 0:233cd31a07a8 30 void perfectplace(); //Picks best spot to put a chip for difficulty 4
mattsims12 0:233cd31a07a8 31 void placechip(int x, int y); //Moves robot to place chip
mattsims12 0:233cd31a07a8 32
mattsims12 0:233cd31a07a8 33 int main()
mattsims12 0:233cd31a07a8 34 {
mattsims12 0:233cd31a07a8 35 timer.start(); //Starts timer for the random seed
mattsims12 0:233cd31a07a8 36 twist.calibrate(.0009,90);
mattsims12 0:233cd31a07a8 37 drop.calibrate(.0009,90);
mattsims12 0:233cd31a07a8 38 twist=.75;
mattsims12 0:233cd31a07a8 39 drop=.8;
mattsims12 0:233cd31a07a8 40
mattsims12 0:233cd31a07a8 41 //Initialize board to -1
mattsims12 0:233cd31a07a8 42 for(int i=0; i<=2; i++) {
mattsims12 0:233cd31a07a8 43 for(int j=0; j<=2; j++) {
mattsims12 0:233cd31a07a8 44 board[i][j]=-1;
mattsims12 0:233cd31a07a8 45 }
mattsims12 0:233cd31a07a8 46 }
mattsims12 0:233cd31a07a8 47
mattsims12 0:233cd31a07a8 48 //User Selects Difficulty
mattsims12 0:233cd31a07a8 49 printf("Select Difficulty");
mattsims12 0:233cd31a07a8 50 int difficulty;
mattsims12 0:233cd31a07a8 51 while(in[0]+in[1]+in[2]+in[3]!=1) {
mattsims12 0:233cd31a07a8 52 }
mattsims12 0:233cd31a07a8 53 if(in[0]==1)
mattsims12 0:233cd31a07a8 54 difficulty=1;
mattsims12 0:233cd31a07a8 55 else if(in[1]==1)
mattsims12 0:233cd31a07a8 56 difficulty=2;
mattsims12 0:233cd31a07a8 57 else if(in[2]==1)
mattsims12 0:233cd31a07a8 58 difficulty=3;
mattsims12 0:233cd31a07a8 59 else if(in[3]==1)
mattsims12 0:233cd31a07a8 60 difficulty=4;
mattsims12 0:233cd31a07a8 61
mattsims12 0:233cd31a07a8 62 lights[difficulty-1]=1;
mattsims12 0:233cd31a07a8 63
mattsims12 0:233cd31a07a8 64 //Random Seed
mattsims12 0:233cd31a07a8 65 timer.stop();
mattsims12 0:233cd31a07a8 66 srand(timer.read_us());
mattsims12 0:233cd31a07a8 67
mattsims12 0:233cd31a07a8 68 //Pick who is x's and who is o's (0=o,1=x)
mattsims12 0:233cd31a07a8 69 int playerchip,aichip;
mattsims12 0:233cd31a07a8 70 playerchip=rand()%2;
mattsims12 0:233cd31a07a8 71 if(playerchip==0) {
mattsims12 0:233cd31a07a8 72 aichip=1;
mattsims12 0:233cd31a07a8 73 lights[4]=1;
mattsims12 0:233cd31a07a8 74 } else {
mattsims12 0:233cd31a07a8 75 aichip=0;
mattsims12 0:233cd31a07a8 76 }
mattsims12 0:233cd31a07a8 77
mattsims12 0:233cd31a07a8 78 //Loops of turns until someone wins or a tie
mattsims12 0:233cd31a07a8 79 while(winner()==-1) {
mattsims12 0:233cd31a07a8 80 if(playerchip==1) {
mattsims12 0:233cd31a07a8 81 player(playerchip);
mattsims12 0:233cd31a07a8 82 if(winner()!=-1)
mattsims12 0:233cd31a07a8 83 break;
mattsims12 0:233cd31a07a8 84 ai(aichip,difficulty);
mattsims12 0:233cd31a07a8 85 if(winner()!=-1)
mattsims12 0:233cd31a07a8 86 break;
mattsims12 0:233cd31a07a8 87 } else {
mattsims12 0:233cd31a07a8 88 ai(aichip,difficulty);
mattsims12 0:233cd31a07a8 89 if(winner()!=-1)
mattsims12 0:233cd31a07a8 90 break;
mattsims12 0:233cd31a07a8 91 player(playerchip);
mattsims12 0:233cd31a07a8 92 if(winner()!=-1)
mattsims12 0:233cd31a07a8 93 break;
mattsims12 0:233cd31a07a8 94 }
mattsims12 0:233cd31a07a8 95 }
mattsims12 0:233cd31a07a8 96
mattsims12 0:233cd31a07a8 97 //Operates LED's based on winner
mattsims12 3:317e06586628 98 lights[difficulty-1]=0;
mattsims12 3:317e06586628 99 lights[4]=0;
mattsims12 0:233cd31a07a8 100 if(winner()==playerchip) { //Light Boucnes back and forth if player wins
mattsims12 0:233cd31a07a8 101 while(1) {
mattsims12 0:233cd31a07a8 102 for(int i=0; i<=4; i++) {
mattsims12 0:233cd31a07a8 103 lights[i]=1;
mattsims12 0:233cd31a07a8 104 wait(.2);
mattsims12 0:233cd31a07a8 105 }
mattsims12 0:233cd31a07a8 106 for(int i=4; i>=0; i--) {
mattsims12 0:233cd31a07a8 107 lights[i]=0;
mattsims12 0:233cd31a07a8 108 wait(.2);
mattsims12 0:233cd31a07a8 109 }
mattsims12 0:233cd31a07a8 110 }
mattsims12 0:233cd31a07a8 111 } else if(winner()==aichip) {
mattsims12 0:233cd31a07a8 112 while(1) { //All lights blink if ai wins
mattsims12 0:233cd31a07a8 113 for(int i=0; i<=4; i++) {
mattsims12 0:233cd31a07a8 114 lights[i]=!lights[i];
mattsims12 0:233cd31a07a8 115 }
mattsims12 0:233cd31a07a8 116 wait(.25);
mattsims12 0:233cd31a07a8 117 }
mattsims12 0:233cd31a07a8 118 } else {
mattsims12 0:233cd31a07a8 119 for(int i=0; i<=4; i++) { //Lights turn on solid if tue
mattsims12 0:233cd31a07a8 120 lights[i]=1;
mattsims12 0:233cd31a07a8 121 }
mattsims12 0:233cd31a07a8 122 }
mattsims12 0:233cd31a07a8 123 }
mattsims12 0:233cd31a07a8 124
mattsims12 0:233cd31a07a8 125
mattsims12 0:233cd31a07a8 126
mattsims12 0:233cd31a07a8 127
mattsims12 0:233cd31a07a8 128 //Checks to see if someone won
mattsims12 0:233cd31a07a8 129 int winner()
mattsims12 0:233cd31a07a8 130 {
mattsims12 0:233cd31a07a8 131 int winner=-1;
mattsims12 0:233cd31a07a8 132 //Horizontal and Vertical check
mattsims12 0:233cd31a07a8 133 for(int i=0; i<=2; i++) {
mattsims12 0:233cd31a07a8 134 if(board[i][0]==board[i][1] && board[i][0]==board[i][2] && board[i][0]!=-1)
mattsims12 0:233cd31a07a8 135 winner=board[i][0];
mattsims12 0:233cd31a07a8 136 if(board[0][i]==board[1][i] && board[0][i]==board[2][i] && board[0][i]!=-1)
mattsims12 0:233cd31a07a8 137 winner=board[0][i];
mattsims12 0:233cd31a07a8 138 }
mattsims12 0:233cd31a07a8 139 //Diagonal Checks
mattsims12 0:233cd31a07a8 140 if(board[0][0]==board[1][1] && board[0][0]==board[2][2] && board[0][0]!=-1)
mattsims12 0:233cd31a07a8 141 winner=board[0][0];
mattsims12 0:233cd31a07a8 142 if(board[0][2]==board[1][1] && board[0][2]==board[2][0] && board[0][2]!=-1)
mattsims12 0:233cd31a07a8 143 winner=board[0][2];
mattsims12 0:233cd31a07a8 144
mattsims12 0:233cd31a07a8 145 return(winner);
mattsims12 0:233cd31a07a8 146 }
mattsims12 0:233cd31a07a8 147
mattsims12 0:233cd31a07a8 148
mattsims12 0:233cd31a07a8 149
mattsims12 1:c9f7302eac4f 150 //Player inputs using the switches until they pick an empty space
mattsims12 0:233cd31a07a8 151 void player(int chip)
mattsims12 0:233cd31a07a8 152 {
mattsims12 0:233cd31a07a8 153 int x,y;
mattsims12 0:233cd31a07a8 154 do {
mattsims12 0:233cd31a07a8 155 if(in[0]+in[1]+in[2]==1 && in[3]+in[4]+in[5]==1) {
mattsims12 0:233cd31a07a8 156 if(in[0]==1)
mattsims12 0:233cd31a07a8 157 x=0;
mattsims12 0:233cd31a07a8 158 else if(in[1]==1)
mattsims12 0:233cd31a07a8 159 x=1;
mattsims12 0:233cd31a07a8 160 else if(in[2]==1)
mattsims12 0:233cd31a07a8 161 x=2;
mattsims12 0:233cd31a07a8 162
mattsims12 0:233cd31a07a8 163 if(in[3]==1)
mattsims12 0:233cd31a07a8 164 y=0;
mattsims12 0:233cd31a07a8 165 else if(in[4]==1)
mattsims12 0:233cd31a07a8 166 y=1;
mattsims12 0:233cd31a07a8 167 else if(in[5]==1)
mattsims12 0:233cd31a07a8 168 y=2;
mattsims12 0:233cd31a07a8 169 }
mattsims12 0:233cd31a07a8 170 } while(board[x][y]!=-1);
mattsims12 0:233cd31a07a8 171 board[x][y]=chip;
mattsims12 0:233cd31a07a8 172 xprev=x;
mattsims12 0:233cd31a07a8 173 yprev=y;
mattsims12 0:233cd31a07a8 174 placechip(x,y);
mattsims12 0:233cd31a07a8 175 }
mattsims12 0:233cd31a07a8 176
mattsims12 0:233cd31a07a8 177
mattsims12 0:233cd31a07a8 178
mattsims12 0:233cd31a07a8 179
mattsims12 0:233cd31a07a8 180 //Counts filled spaces to determine how many turns have passed
mattsims12 0:233cd31a07a8 181 int turn()
mattsims12 0:233cd31a07a8 182 {
mattsims12 0:233cd31a07a8 183 int turn=9;
mattsims12 0:233cd31a07a8 184 for(int i=1; i<=2; i++) {
mattsims12 0:233cd31a07a8 185 for(int j=0; j<=2; j++) {
mattsims12 0:233cd31a07a8 186 if(board[i][j]==-1)
mattsims12 0:233cd31a07a8 187 turn--;
mattsims12 0:233cd31a07a8 188 }
mattsims12 0:233cd31a07a8 189 }
mattsims12 0:233cd31a07a8 190 return turn;
mattsims12 0:233cd31a07a8 191 }
mattsims12 0:233cd31a07a8 192
mattsims12 0:233cd31a07a8 193
mattsims12 0:233cd31a07a8 194
mattsims12 0:233cd31a07a8 195
mattsims12 0:233cd31a07a8 196 //Easy randomly picks any empty space on the board
mattsims12 0:233cd31a07a8 197 void ai(int chip,int difficulty)
mattsims12 0:233cd31a07a8 198 {
mattsims12 0:233cd31a07a8 199 int x,y;
mattsims12 0:233cd31a07a8 200
mattsims12 0:233cd31a07a8 201 if(difficulty!=4) {
mattsims12 0:233cd31a07a8 202 do {
mattsims12 0:233cd31a07a8 203 x=rand()%2;
mattsims12 0:233cd31a07a8 204 y=rand()%2;
mattsims12 0:233cd31a07a8 205 } while(board[x][y]!=-1);
mattsims12 0:233cd31a07a8 206
mattsims12 0:233cd31a07a8 207 if(difficulty==2 || difficulty==3) { //Middle difficulties have a random chance of not blocking
mattsims12 0:233cd31a07a8 208 if(tworow()) {
mattsims12 0:233cd31a07a8 209 if(difficulty==2 && rand()%10<8) { //Sometimes doesn't notice two in a row
mattsims12 0:233cd31a07a8 210 x=xglobal;
mattsims12 0:233cd31a07a8 211 y=yglobal;
mattsims12 0:233cd31a07a8 212 } else if(difficulty==3) { //Always notices 2 in a row
mattsims12 0:233cd31a07a8 213 x=xglobal;
mattsims12 0:233cd31a07a8 214 y=yglobal;
mattsims12 0:233cd31a07a8 215 }
mattsims12 0:233cd31a07a8 216 }
mattsims12 0:233cd31a07a8 217 } else {
mattsims12 0:233cd31a07a8 218 perfectplace();
mattsims12 0:233cd31a07a8 219 x=xglobal;
mattsims12 0:233cd31a07a8 220 y=yglobal;
mattsims12 0:233cd31a07a8 221 }
mattsims12 3:317e06586628 222 placechip(x,y);
mattsims12 0:233cd31a07a8 223 board[x][y]=chip;
mattsims12 0:233cd31a07a8 224 }
mattsims12 0:233cd31a07a8 225 }
mattsims12 0:233cd31a07a8 226
mattsims12 0:233cd31a07a8 227
mattsims12 0:233cd31a07a8 228
mattsims12 0:233cd31a07a8 229 bool tworow()
mattsims12 0:233cd31a07a8 230 {
mattsims12 0:233cd31a07a8 231 //Vertical and horizontals
mattsims12 0:233cd31a07a8 232 for(int i=0; i<=2; i++) {
mattsims12 0:233cd31a07a8 233 if(board[0][i]==board[1][i] && board[2][i]==-1) {
mattsims12 0:233cd31a07a8 234 xglobal=2;
mattsims12 0:233cd31a07a8 235 yglobal=i; //board[2][i]
mattsims12 0:233cd31a07a8 236 }
mattsims12 0:233cd31a07a8 237 if(board[1][i]==board[2][i] && board[0][i]==-1) {
mattsims12 0:233cd31a07a8 238 xglobal=0;
mattsims12 0:233cd31a07a8 239 yglobal=i; //board[0][i]
mattsims12 0:233cd31a07a8 240 }
mattsims12 0:233cd31a07a8 241 if(board[0][i]==board[2][i] && board[1][i]==-1) {
mattsims12 0:233cd31a07a8 242 xglobal=1;
mattsims12 0:233cd31a07a8 243 yglobal=i; //board[1][i]
mattsims12 0:233cd31a07a8 244 }
mattsims12 0:233cd31a07a8 245
mattsims12 0:233cd31a07a8 246 if(board[i][0]==board[i][1] && board[i][2]==-1) {
mattsims12 0:233cd31a07a8 247 xglobal=i;
mattsims12 0:233cd31a07a8 248 yglobal=2; //board[i][2]
mattsims12 0:233cd31a07a8 249 }
mattsims12 0:233cd31a07a8 250 if(board[i][1]==board[i][2] && board[i][0]==-1) {
mattsims12 0:233cd31a07a8 251 xglobal=i;
mattsims12 0:233cd31a07a8 252 yglobal=0; //board[i][0]
mattsims12 0:233cd31a07a8 253 }
mattsims12 0:233cd31a07a8 254 if(board[i][0]==board[i][2] && board[i][1]==-1) {
mattsims12 0:233cd31a07a8 255 xglobal=i;
mattsims12 0:233cd31a07a8 256 yglobal=1; //board[i][1]
mattsims12 0:233cd31a07a8 257 }
mattsims12 0:233cd31a07a8 258 }
mattsims12 0:233cd31a07a8 259 //Diagonal Components
mattsims12 0:233cd31a07a8 260 if(board[0][0]==board[1][1] && board[2][2]==-1) {
mattsims12 0:233cd31a07a8 261 xglobal=2;
mattsims12 0:233cd31a07a8 262 yglobal=2; //board[2][2]
mattsims12 0:233cd31a07a8 263 }
mattsims12 0:233cd31a07a8 264 if(board[1][1]==board[2][2] && board[0][0]==-1) {
mattsims12 0:233cd31a07a8 265 xglobal=0;
mattsims12 0:233cd31a07a8 266 yglobal=0; //board[0][0]
mattsims12 0:233cd31a07a8 267 }
mattsims12 0:233cd31a07a8 268 if(board[0][0]==board[2][2] && board[1][1]==-1) {
mattsims12 0:233cd31a07a8 269 xglobal=1;
mattsims12 0:233cd31a07a8 270 yglobal=1; //board[1][1]
mattsims12 0:233cd31a07a8 271 }
mattsims12 0:233cd31a07a8 272
mattsims12 0:233cd31a07a8 273 if(board[0][2]==board[1][1] && board[2][0]==-1) {
mattsims12 0:233cd31a07a8 274 xglobal=2;
mattsims12 0:233cd31a07a8 275 yglobal=0; //board[2][0]
mattsims12 0:233cd31a07a8 276 }
mattsims12 0:233cd31a07a8 277 if(board[1][1]==board[2][0] && board[0][2]==-1) {
mattsims12 0:233cd31a07a8 278 xglobal=0;
mattsims12 0:233cd31a07a8 279 yglobal=2; //board[0][2]
mattsims12 0:233cd31a07a8 280 }
mattsims12 0:233cd31a07a8 281 if(board[0][2]==board[2][0] && board[1][1]==-1) {
mattsims12 0:233cd31a07a8 282 xglobal=1;
mattsims12 0:233cd31a07a8 283 yglobal=1; //board[1][1]
mattsims12 0:233cd31a07a8 284 }
mattsims12 0:233cd31a07a8 285 if(xglobal==-1 && yglobal==-1) //Returns true if there are 2 in a row
mattsims12 0:233cd31a07a8 286 return false;
mattsims12 0:233cd31a07a8 287 else
mattsims12 0:233cd31a07a8 288 return true;
mattsims12 0:233cd31a07a8 289 }
mattsims12 0:233cd31a07a8 290
mattsims12 0:233cd31a07a8 291
mattsims12 0:233cd31a07a8 292
mattsims12 0:233cd31a07a8 293 void perfectplace()
mattsims12 0:233cd31a07a8 294 {
mattsims12 0:233cd31a07a8 295 if(turn()==0) { //Places in a random corner if first
mattsims12 0:233cd31a07a8 296 xglobal=(rand()%2)*2; //Picks either 0 or 2
mattsims12 0:233cd31a07a8 297 yglobal=(rand()%2)*2;
mattsims12 0:233cd31a07a8 298 xstart=xglobal;
mattsims12 0:233cd31a07a8 299 ystart=yglobal;
mattsims12 0:233cd31a07a8 300 }
mattsims12 0:233cd31a07a8 301 if(turn()==1) {
mattsims12 0:233cd31a07a8 302 if(xprev!=1 && yprev!=1) { //If player takes corner, ai takes center
mattsims12 0:233cd31a07a8 303 xglobal=1;
mattsims12 0:233cd31a07a8 304 yglobal=1;
mattsims12 0:233cd31a07a8 305 } else if(xprev==1 && yprev==1) { //If player takes center, ai takes a corner
mattsims12 0:233cd31a07a8 306 xglobal=(rand()%2)*2; //Picks either 0 or 2
mattsims12 0:233cd31a07a8 307 yglobal=(rand()%2)*2;
mattsims12 0:233cd31a07a8 308 } else { //If player takes edge, ai takes spot in either same row or col
mattsims12 0:233cd31a07a8 309 if(xprev==1) {
mattsims12 0:233cd31a07a8 310 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 311 if(xglobal==xprev) {
mattsims12 0:233cd31a07a8 312 do {
mattsims12 0:233cd31a07a8 313 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 314 } while(yglobal==yprev);
mattsims12 0:233cd31a07a8 315 } else {
mattsims12 0:233cd31a07a8 316 yglobal=yprev;
mattsims12 0:233cd31a07a8 317 }
mattsims12 0:233cd31a07a8 318 } else {
mattsims12 0:233cd31a07a8 319 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 320 if(yglobal==yprev) {
mattsims12 0:233cd31a07a8 321 do {
mattsims12 0:233cd31a07a8 322 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 323 } while(xglobal==xprev);
mattsims12 0:233cd31a07a8 324 } else {
mattsims12 0:233cd31a07a8 325 xglobal=xprev;
mattsims12 0:233cd31a07a8 326 }
mattsims12 0:233cd31a07a8 327 }
mattsims12 0:233cd31a07a8 328 }
mattsims12 0:233cd31a07a8 329 }
mattsims12 2:cbc3ef689c91 330 //The ai's second turn if the user goes first
mattsims12 0:233cd31a07a8 331 if(turn()==2) {
mattsims12 0:233cd31a07a8 332 if(xprev==1 && yprev==1) { //If user places in middle, any open spot leads to tie
mattsims12 0:233cd31a07a8 333 do {
mattsims12 0:233cd31a07a8 334 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 335 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 336 } while(board[xglobal][yglobal]!=-1);
mattsims12 0:233cd31a07a8 337 } else if((xprev==1 ||yprev==1) && (xprev!=xstart && yprev!=ystart)) { //Opposite edge
mattsims12 0:233cd31a07a8 338 if(xprev-xstart==2 || xprev-xstart==-2) {
mattsims12 0:233cd31a07a8 339 yglobal=ystart;
mattsims12 0:233cd31a07a8 340 if(yprev+ystart==1)
mattsims12 0:233cd31a07a8 341 xglobal=2;
mattsims12 0:233cd31a07a8 342 else
mattsims12 0:233cd31a07a8 343 xglobal=0;
mattsims12 0:233cd31a07a8 344 } else {
mattsims12 0:233cd31a07a8 345 xglobal=xstart;
mattsims12 0:233cd31a07a8 346 if(xprev+xstart==1)
mattsims12 0:233cd31a07a8 347 yglobal=2;
mattsims12 0:233cd31a07a8 348 else
mattsims12 0:233cd31a07a8 349 yglobal=0;
mattsims12 0:233cd31a07a8 350 }
mattsims12 0:233cd31a07a8 351 } else if((xprev==1 || yprev==1) && (xprev==xstart || yprev==ystart)) { //Adjascent edge
mattsims12 0:233cd31a07a8 352 if(xprev==xstart) {
mattsims12 0:233cd31a07a8 353 do {
mattsims12 0:233cd31a07a8 354 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 355 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 356 } while(((ystart!=yglobal) && (xstart==xglobal)) || (xglobal==1 && yglobal==1));
mattsims12 0:233cd31a07a8 357 } else {
mattsims12 0:233cd31a07a8 358 do {
mattsims12 0:233cd31a07a8 359 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 360 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 361 } while(((xstart!=xglobal) && (ystart==yglobal)) || (xglobal==1 && yglobal==1));
mattsims12 0:233cd31a07a8 362 }
mattsims12 0:233cd31a07a8 363 } else if((xprev-xstart==2 || xprev-xstart==-2) && (yprev-ystart==2 || yprev-ystart==-2)) { //Opposite Corner
mattsims12 0:233cd31a07a8 364 do {
mattsims12 0:233cd31a07a8 365 xglobal=(rand()%2)*2;
mattsims12 0:233cd31a07a8 366 yglobal=(rand()%2)*2;
mattsims12 0:233cd31a07a8 367 } while(board[xglobal][yglobal]!=-1);
mattsims12 0:233cd31a07a8 368 } else { //Adjascent Corner
mattsims12 0:233cd31a07a8 369 if(xprev==xstart) {
mattsims12 0:233cd31a07a8 370 do {
mattsims12 0:233cd31a07a8 371 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 372 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 373 } while((ystart==yglobal && xstart!=xglobal) || (yprev==yglobal && (yprev-yglobal==2 || yprev-yglobal==-2)));
mattsims12 0:233cd31a07a8 374 } else {
mattsims12 0:233cd31a07a8 375 do {
mattsims12 0:233cd31a07a8 376 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 377 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 378 } while((xstart==xglobal && ystart!=yglobal) || (xprev==xglobal && (xprev-xglobal==2 || xprev-xglobal==-2)));
mattsims12 0:233cd31a07a8 379 }
mattsims12 0:233cd31a07a8 380 }
mattsims12 0:233cd31a07a8 381 }
mattsims12 0:233cd31a07a8 382 if(turn()>=3) { //If there are not 2 in a row, place in a random place
mattsims12 0:233cd31a07a8 383 do {
mattsims12 0:233cd31a07a8 384 xglobal=rand()%3;
mattsims12 0:233cd31a07a8 385 yglobal=rand()%3;
mattsims12 0:233cd31a07a8 386 } while(board[xglobal][yglobal]!=-1);
mattsims12 0:233cd31a07a8 387 tworow();
mattsims12 0:233cd31a07a8 388 }
mattsims12 0:233cd31a07a8 389 }
mattsims12 0:233cd31a07a8 390
mattsims12 0:233cd31a07a8 391
mattsims12 0:233cd31a07a8 392
mattsims12 0:233cd31a07a8 393
mattsims12 0:233cd31a07a8 394 void placechip(int x,int y)
mattsims12 0:233cd31a07a8 395 {
mattsims12 0:233cd31a07a8 396 drop=.8;
mattsims12 0:233cd31a07a8 397 twist=.75;
mattsims12 0:233cd31a07a8 398 //Roll to correct x
mattsims12 0:233cd31a07a8 399 if(x!=0) {
mattsims12 0:233cd31a07a8 400 m.speed(-.4);
mattsims12 0:233cd31a07a8 401 wait(.25);
mattsims12 0:233cd31a07a8 402 if(x==2)
mattsims12 0:233cd31a07a8 403 wait(.15);
mattsims12 0:233cd31a07a8 404 }
mattsims12 0:233cd31a07a8 405 m.speed(0.0);
mattsims12 0:233cd31a07a8 406 //Twist to correct y
mattsims12 0:233cd31a07a8 407 if(y==0)
mattsims12 0:233cd31a07a8 408 twist=1.0;
mattsims12 0:233cd31a07a8 409 else if(y==1)
mattsims12 0:233cd31a07a8 410 twist=.75;
mattsims12 0:233cd31a07a8 411 else
mattsims12 0:233cd31a07a8 412 twist=.5;
mattsims12 0:233cd31a07a8 413 wait(.25);
mattsims12 0:233cd31a07a8 414 //Drop a Chip
mattsims12 0:233cd31a07a8 415 drop=.5;
mattsims12 0:233cd31a07a8 416 wait(.1);
mattsims12 0:233cd31a07a8 417 drop=.8;
mattsims12 0:233cd31a07a8 418 wait(.25);
mattsims12 0:233cd31a07a8 419 twist=.75;
mattsims12 0:233cd31a07a8 420 //Roll back to origin
mattsims12 0:233cd31a07a8 421 if(x!=0) {
mattsims12 0:233cd31a07a8 422 m.speed(.5);
mattsims12 0:233cd31a07a8 423 wait(.25);
mattsims12 0:233cd31a07a8 424 if(x==2)
mattsims12 0:233cd31a07a8 425 wait(.15);
mattsims12 0:233cd31a07a8 426 }
mattsims12 0:233cd31a07a8 427 m.speed(0.0);
mattsims12 0:233cd31a07a8 428 wait(5);
mattsims12 0:233cd31a07a8 429 }