Amina Kantić / Mbed 2 deprecated iks-oks-projekat

Dependencies:   mbed N5110

Committer:
2019US_AminaKantic
Date:
Sat Jun 15 11:07:25 2019 +0000
Revision:
0:41aae9a4c212
finalni kod projekta

Who changed what in which revision?

UserRevisionLine numberNew contents of line
2019US_AminaKantic 0:41aae9a4c212 1 #include "mbed.h"
2019US_AminaKantic 0:41aae9a4c212 2 #include "N5110.h"
2019US_AminaKantic 0:41aae9a4c212 3 #define dp23 P0_0
2019US_AminaKantic 0:41aae9a4c212 4
2019US_AminaKantic 0:41aae9a4c212 5 N5110 lcd(dp4, dp24, dp23, dp25, dp2, dp6, dp18);
2019US_AminaKantic 0:41aae9a4c212 6
2019US_AminaKantic 0:41aae9a4c212 7 AnalogIn VRx (dp11);
2019US_AminaKantic 0:41aae9a4c212 8 AnalogIn VRy (dp10);
2019US_AminaKantic 0:41aae9a4c212 9
2019US_AminaKantic 0:41aae9a4c212 10 InterruptIn SW (dp9);
2019US_AminaKantic 0:41aae9a4c212 11
2019US_AminaKantic 0:41aae9a4c212 12 Timer timer;
2019US_AminaKantic 0:41aae9a4c212 13 Timer seed;
2019US_AminaKantic 0:41aae9a4c212 14
2019US_AminaKantic 0:41aae9a4c212 15 Timeout t1, t2, cp;
2019US_AminaKantic 0:41aae9a4c212 16
2019US_AminaKantic 0:41aae9a4c212 17 struct Point
2019US_AminaKantic 0:41aae9a4c212 18 {
2019US_AminaKantic 0:41aae9a4c212 19 int x;
2019US_AminaKantic 0:41aae9a4c212 20 int y;
2019US_AminaKantic 0:41aae9a4c212 21 };
2019US_AminaKantic 0:41aae9a4c212 22
2019US_AminaKantic 0:41aae9a4c212 23 Point p[9] = {{14, 9}, {41, 9}, {68, 9}, {14, 24}, {41, 24}, {68, 24}, {14, 39}, {41, 39}, {68, 39}};
2019US_AminaKantic 0:41aae9a4c212 24
2019US_AminaKantic 0:41aae9a4c212 25 int currentPointX = 1;
2019US_AminaKantic 0:41aae9a4c212 26 int currentPointY = 1;
2019US_AminaKantic 0:41aae9a4c212 27
2019US_AminaKantic 0:41aae9a4c212 28 int fields[9] = {0,0,0,0,0,0,0,0,0};
2019US_AminaKantic 0:41aae9a4c212 29 int computer, gameType = 1;
2019US_AminaKantic 0:41aae9a4c212 30 bool turnX = true;
2019US_AminaKantic 0:41aae9a4c212 31
2019US_AminaKantic 0:41aae9a4c212 32 enum State {Menu, Turn, AITurn, Pause, End};
2019US_AminaKantic 0:41aae9a4c212 33 State state = Menu;
2019US_AminaKantic 0:41aae9a4c212 34
2019US_AminaKantic 0:41aae9a4c212 35 bool canMove = true;
2019US_AminaKantic 0:41aae9a4c212 36
2019US_AminaKantic 0:41aae9a4c212 37 int winner;
2019US_AminaKantic 0:41aae9a4c212 38
2019US_AminaKantic 0:41aae9a4c212 39 int RandomNumber()
2019US_AminaKantic 0:41aae9a4c212 40 {
2019US_AminaKantic 0:41aae9a4c212 41 return seed.read_ms();
2019US_AminaKantic 0:41aae9a4c212 42 }
2019US_AminaKantic 0:41aae9a4c212 43
2019US_AminaKantic 0:41aae9a4c212 44 void DrawRow(int y)
2019US_AminaKantic 0:41aae9a4c212 45 {
2019US_AminaKantic 0:41aae9a4c212 46 for(int i = 0; i < 84; i++)
2019US_AminaKantic 0:41aae9a4c212 47 {
2019US_AminaKantic 0:41aae9a4c212 48 lcd.setPixel(i, y);
2019US_AminaKantic 0:41aae9a4c212 49 }
2019US_AminaKantic 0:41aae9a4c212 50 }
2019US_AminaKantic 0:41aae9a4c212 51
2019US_AminaKantic 0:41aae9a4c212 52 void DrawColumn(int x)
2019US_AminaKantic 0:41aae9a4c212 53 {
2019US_AminaKantic 0:41aae9a4c212 54 for(int i = 0; i < 48; i++)
2019US_AminaKantic 0:41aae9a4c212 55 {
2019US_AminaKantic 0:41aae9a4c212 56 lcd.setPixel(x, i);
2019US_AminaKantic 0:41aae9a4c212 57 }
2019US_AminaKantic 0:41aae9a4c212 58 }
2019US_AminaKantic 0:41aae9a4c212 59
2019US_AminaKantic 0:41aae9a4c212 60 void DrawBorder()
2019US_AminaKantic 0:41aae9a4c212 61 {
2019US_AminaKantic 0:41aae9a4c212 62 DrawRow(0);
2019US_AminaKantic 0:41aae9a4c212 63 DrawRow(1);
2019US_AminaKantic 0:41aae9a4c212 64 DrawRow(46);
2019US_AminaKantic 0:41aae9a4c212 65 DrawRow(47);
2019US_AminaKantic 0:41aae9a4c212 66 DrawColumn(0);
2019US_AminaKantic 0:41aae9a4c212 67 DrawColumn(1);
2019US_AminaKantic 0:41aae9a4c212 68 DrawColumn(82);
2019US_AminaKantic 0:41aae9a4c212 69 DrawColumn(83);
2019US_AminaKantic 0:41aae9a4c212 70 }
2019US_AminaKantic 0:41aae9a4c212 71
2019US_AminaKantic 0:41aae9a4c212 72 void DrawGrid()
2019US_AminaKantic 0:41aae9a4c212 73 {
2019US_AminaKantic 0:41aae9a4c212 74 DrawBorder();
2019US_AminaKantic 0:41aae9a4c212 75 DrawColumn(28);
2019US_AminaKantic 0:41aae9a4c212 76 DrawColumn(55);
2019US_AminaKantic 0:41aae9a4c212 77 DrawRow(16);
2019US_AminaKantic 0:41aae9a4c212 78 DrawRow(31);
2019US_AminaKantic 0:41aae9a4c212 79 }
2019US_AminaKantic 0:41aae9a4c212 80
2019US_AminaKantic 0:41aae9a4c212 81 void DrawX(int t)
2019US_AminaKantic 0:41aae9a4c212 82 {
2019US_AminaKantic 0:41aae9a4c212 83 fields[t-1] = 1;
2019US_AminaKantic 0:41aae9a4c212 84 int x = p[t-1].x;
2019US_AminaKantic 0:41aae9a4c212 85 int y = p[t-1].y;
2019US_AminaKantic 0:41aae9a4c212 86 lcd.setPixel(x,y);
2019US_AminaKantic 0:41aae9a4c212 87 lcd.setPixel(x+1, y);
2019US_AminaKantic 0:41aae9a4c212 88 lcd.setPixel(x, y-1);
2019US_AminaKantic 0:41aae9a4c212 89 lcd.setPixel(x+1, y-1);
2019US_AminaKantic 0:41aae9a4c212 90 for(int i = 0; i < 4; i++)
2019US_AminaKantic 0:41aae9a4c212 91 {
2019US_AminaKantic 0:41aae9a4c212 92 lcd.setPixel(x-1, y+1);
2019US_AminaKantic 0:41aae9a4c212 93 lcd.setPixel(x+2, y+1);
2019US_AminaKantic 0:41aae9a4c212 94 lcd.setPixel(x-1, y-2);
2019US_AminaKantic 0:41aae9a4c212 95 lcd.setPixel(x+2, y-2);
2019US_AminaKantic 0:41aae9a4c212 96
2019US_AminaKantic 0:41aae9a4c212 97 lcd.setPixel(x-2, y+2);
2019US_AminaKantic 0:41aae9a4c212 98 lcd.setPixel(x+3, y+2);
2019US_AminaKantic 0:41aae9a4c212 99 lcd.setPixel(x-2, y-3);
2019US_AminaKantic 0:41aae9a4c212 100 lcd.setPixel(x+3, y-3);
2019US_AminaKantic 0:41aae9a4c212 101
2019US_AminaKantic 0:41aae9a4c212 102 lcd.setPixel(x-3, y+3);
2019US_AminaKantic 0:41aae9a4c212 103 lcd.setPixel(x+4, y+3);
2019US_AminaKantic 0:41aae9a4c212 104 lcd.setPixel(x-3, y-4);
2019US_AminaKantic 0:41aae9a4c212 105 lcd.setPixel(x+4, y-4);
2019US_AminaKantic 0:41aae9a4c212 106
2019US_AminaKantic 0:41aae9a4c212 107 lcd.setPixel(x-4, y+4);
2019US_AminaKantic 0:41aae9a4c212 108 lcd.setPixel(x+5, y+4);
2019US_AminaKantic 0:41aae9a4c212 109 lcd.setPixel(x-4, y-5);
2019US_AminaKantic 0:41aae9a4c212 110 lcd.setPixel(x+5, y-5);
2019US_AminaKantic 0:41aae9a4c212 111 }
2019US_AminaKantic 0:41aae9a4c212 112 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 113 }
2019US_AminaKantic 0:41aae9a4c212 114
2019US_AminaKantic 0:41aae9a4c212 115 void DrawO(int t)
2019US_AminaKantic 0:41aae9a4c212 116 {
2019US_AminaKantic 0:41aae9a4c212 117 fields[t-1] = 2;
2019US_AminaKantic 0:41aae9a4c212 118 int x = p[t-1].x;
2019US_AminaKantic 0:41aae9a4c212 119 int y = p[t-1].y-1;
2019US_AminaKantic 0:41aae9a4c212 120 for(int i = x-2; i < x+4; i++)
2019US_AminaKantic 0:41aae9a4c212 121 {
2019US_AminaKantic 0:41aae9a4c212 122 lcd.setPixel(i, y-4);
2019US_AminaKantic 0:41aae9a4c212 123 lcd.setPixel(i, y+5);
2019US_AminaKantic 0:41aae9a4c212 124 }
2019US_AminaKantic 0:41aae9a4c212 125
2019US_AminaKantic 0:41aae9a4c212 126 for(int i = y-1; i < y+3; i++)
2019US_AminaKantic 0:41aae9a4c212 127 {
2019US_AminaKantic 0:41aae9a4c212 128 lcd.setPixel(x-5, i);
2019US_AminaKantic 0:41aae9a4c212 129 lcd.setPixel(x+6, i);
2019US_AminaKantic 0:41aae9a4c212 130 }
2019US_AminaKantic 0:41aae9a4c212 131 for(int i = 0; i < 2; i++)
2019US_AminaKantic 0:41aae9a4c212 132 {
2019US_AminaKantic 0:41aae9a4c212 133 lcd.setPixel(x-4, y-2);
2019US_AminaKantic 0:41aae9a4c212 134 lcd.setPixel(x-3, y-3);
2019US_AminaKantic 0:41aae9a4c212 135
2019US_AminaKantic 0:41aae9a4c212 136 lcd.setPixel(x-4, y+3);
2019US_AminaKantic 0:41aae9a4c212 137 lcd.setPixel(x-3, y+4);
2019US_AminaKantic 0:41aae9a4c212 138
2019US_AminaKantic 0:41aae9a4c212 139 lcd.setPixel(x+5, y-2);
2019US_AminaKantic 0:41aae9a4c212 140 lcd.setPixel(x+4, y-3);
2019US_AminaKantic 0:41aae9a4c212 141
2019US_AminaKantic 0:41aae9a4c212 142 lcd.setPixel(x+5, y+3);
2019US_AminaKantic 0:41aae9a4c212 143 lcd.setPixel(x+4, y+4);
2019US_AminaKantic 0:41aae9a4c212 144 }
2019US_AminaKantic 0:41aae9a4c212 145 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 146 }
2019US_AminaKantic 0:41aae9a4c212 147
2019US_AminaKantic 0:41aae9a4c212 148 void DrawSelector(int t)
2019US_AminaKantic 0:41aae9a4c212 149 {
2019US_AminaKantic 0:41aae9a4c212 150 int x = p[t-1].x;
2019US_AminaKantic 0:41aae9a4c212 151 int y = p[t-1].y-1;
2019US_AminaKantic 0:41aae9a4c212 152
2019US_AminaKantic 0:41aae9a4c212 153 for(int i = x-11; i < x+13; i++)
2019US_AminaKantic 0:41aae9a4c212 154 {
2019US_AminaKantic 0:41aae9a4c212 155 lcd.setPixel(i, y-6);
2019US_AminaKantic 0:41aae9a4c212 156 lcd.setPixel(i, y+7);
2019US_AminaKantic 0:41aae9a4c212 157 }
2019US_AminaKantic 0:41aae9a4c212 158
2019US_AminaKantic 0:41aae9a4c212 159 for(int i = y-5; i < y+7; i++)
2019US_AminaKantic 0:41aae9a4c212 160 {
2019US_AminaKantic 0:41aae9a4c212 161 lcd.setPixel(x-12, i);
2019US_AminaKantic 0:41aae9a4c212 162 lcd.setPixel(x+13, i);
2019US_AminaKantic 0:41aae9a4c212 163 }
2019US_AminaKantic 0:41aae9a4c212 164 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 165 }
2019US_AminaKantic 0:41aae9a4c212 166
2019US_AminaKantic 0:41aae9a4c212 167 void DeleteSelector(int t)
2019US_AminaKantic 0:41aae9a4c212 168 {
2019US_AminaKantic 0:41aae9a4c212 169 int x = p[t-1].x;
2019US_AminaKantic 0:41aae9a4c212 170 int y = p[t-1].y-1;
2019US_AminaKantic 0:41aae9a4c212 171
2019US_AminaKantic 0:41aae9a4c212 172 for(int i = x-11; i < x+13; i++)
2019US_AminaKantic 0:41aae9a4c212 173 {
2019US_AminaKantic 0:41aae9a4c212 174 lcd.clearPixel(i, y-6);
2019US_AminaKantic 0:41aae9a4c212 175 lcd.clearPixel(i, y+7);
2019US_AminaKantic 0:41aae9a4c212 176 }
2019US_AminaKantic 0:41aae9a4c212 177
2019US_AminaKantic 0:41aae9a4c212 178 for(int i = y-5; i < y+7; i++)
2019US_AminaKantic 0:41aae9a4c212 179 {
2019US_AminaKantic 0:41aae9a4c212 180 lcd.clearPixel(x-12, i);
2019US_AminaKantic 0:41aae9a4c212 181 lcd.clearPixel(x+13, i);
2019US_AminaKantic 0:41aae9a4c212 182 }
2019US_AminaKantic 0:41aae9a4c212 183 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 184 }
2019US_AminaKantic 0:41aae9a4c212 185
2019US_AminaKantic 0:41aae9a4c212 186 bool WinX(){
2019US_AminaKantic 0:41aae9a4c212 187 if(fields[0]==1 && fields[1]==1 && fields[2]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 188 else if(fields[3]==1 && fields[4]==1 && fields[5]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 189 else if(fields[6]==1 && fields[7]==1 && fields[8]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 190 else if(fields[0]==1 && fields[3]==1 && fields[6]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 191 else if(fields[1]==1 && fields[4]==1 && fields[7]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 192 else if(fields[2]==1 && fields[5]==1 && fields[8]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 193 else if(fields[0]==1 && fields[4]==1 && fields[8]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 194 else if(fields[2]==1 && fields[4]==1 && fields[6]==1) return true;
2019US_AminaKantic 0:41aae9a4c212 195 return false;
2019US_AminaKantic 0:41aae9a4c212 196 }
2019US_AminaKantic 0:41aae9a4c212 197 bool WinO(){
2019US_AminaKantic 0:41aae9a4c212 198 if(fields[0]==2 && fields[1]==2 && fields[2]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 199 else if(fields[3]==2 && fields[4]==2 && fields[5]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 200 else if(fields[6]==2 && fields[7]==2 && fields[8]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 201 else if(fields[0]==2 && fields[3]==2 && fields[6]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 202 else if(fields[1]==2 && fields[4]==2 && fields[7]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 203 else if(fields[2]==2 && fields[5]==2 && fields[8]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 204 else if(fields[0]==2 && fields[4]==2 && fields[8]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 205 else if(fields[2]==2 && fields[4]==2 && fields[6]==2) return true;
2019US_AminaKantic 0:41aae9a4c212 206 return false;
2019US_AminaKantic 0:41aae9a4c212 207 }
2019US_AminaKantic 0:41aae9a4c212 208
2019US_AminaKantic 0:41aae9a4c212 209 bool TieCheck()
2019US_AminaKantic 0:41aae9a4c212 210 {
2019US_AminaKantic 0:41aae9a4c212 211 for(int i = 0; i < 9; i++)
2019US_AminaKantic 0:41aae9a4c212 212 {
2019US_AminaKantic 0:41aae9a4c212 213 if(fields[i] == 0)
2019US_AminaKantic 0:41aae9a4c212 214 return false;
2019US_AminaKantic 0:41aae9a4c212 215 }
2019US_AminaKantic 0:41aae9a4c212 216 return true;
2019US_AminaKantic 0:41aae9a4c212 217 }
2019US_AminaKantic 0:41aae9a4c212 218
2019US_AminaKantic 0:41aae9a4c212 219 void Start();
2019US_AminaKantic 0:41aae9a4c212 220
2019US_AminaKantic 0:41aae9a4c212 221 void Reset()
2019US_AminaKantic 0:41aae9a4c212 222 {
2019US_AminaKantic 0:41aae9a4c212 223 state = Menu;
2019US_AminaKantic 0:41aae9a4c212 224 SW.rise(&Start);
2019US_AminaKantic 0:41aae9a4c212 225 for(int i = 0; i < 9; i++)
2019US_AminaKantic 0:41aae9a4c212 226 fields[i] = 0;
2019US_AminaKantic 0:41aae9a4c212 227 currentPointX = 1;
2019US_AminaKantic 0:41aae9a4c212 228 currentPointY = 1;
2019US_AminaKantic 0:41aae9a4c212 229 turnX = true;
2019US_AminaKantic 0:41aae9a4c212 230 gameType = 1;
2019US_AminaKantic 0:41aae9a4c212 231 }
2019US_AminaKantic 0:41aae9a4c212 232
2019US_AminaKantic 0:41aae9a4c212 233
2019US_AminaKantic 0:41aae9a4c212 234 void DrawMeni(){
2019US_AminaKantic 0:41aae9a4c212 235 Reset();
2019US_AminaKantic 0:41aae9a4c212 236 lcd.clear();
2019US_AminaKantic 0:41aae9a4c212 237 DrawBorder();
2019US_AminaKantic 0:41aae9a4c212 238 lcd.printString ("TIC-TAC-TOE" , 10,1);
2019US_AminaKantic 0:41aae9a4c212 239 lcd.printString ("1 player " , 20,3);
2019US_AminaKantic 0:41aae9a4c212 240 lcd.printString ("2 players" , 20,4);
2019US_AminaKantic 0:41aae9a4c212 241 lcd.setPixel(15, 28);
2019US_AminaKantic 0:41aae9a4c212 242 lcd.setPixel(15, 27);
2019US_AminaKantic 0:41aae9a4c212 243 lcd.setPixel(14, 27);
2019US_AminaKantic 0:41aae9a4c212 244 lcd.setPixel(14, 28);
2019US_AminaKantic 0:41aae9a4c212 245 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 246 }
2019US_AminaKantic 0:41aae9a4c212 247 void DrawWin(){
2019US_AminaKantic 0:41aae9a4c212 248 state = End;
2019US_AminaKantic 0:41aae9a4c212 249 lcd.clear();
2019US_AminaKantic 0:41aae9a4c212 250 DrawBorder();
2019US_AminaKantic 0:41aae9a4c212 251 if(winner == 0)
2019US_AminaKantic 0:41aae9a4c212 252 {
2019US_AminaKantic 0:41aae9a4c212 253 lcd.printString("Winner is" ,15 ,2);
2019US_AminaKantic 0:41aae9a4c212 254 if(gameType == 0)
2019US_AminaKantic 0:41aae9a4c212 255 lcd.printString("Player 1" ,15 ,4);
2019US_AminaKantic 0:41aae9a4c212 256 else
2019US_AminaKantic 0:41aae9a4c212 257 lcd.printString("Player" ,15 ,4);
2019US_AminaKantic 0:41aae9a4c212 258 }
2019US_AminaKantic 0:41aae9a4c212 259 if(winner == 1)
2019US_AminaKantic 0:41aae9a4c212 260 {
2019US_AminaKantic 0:41aae9a4c212 261 lcd.printString("Winner is" ,15 ,2);
2019US_AminaKantic 0:41aae9a4c212 262 if(gameType == 0)
2019US_AminaKantic 0:41aae9a4c212 263 lcd.printString("Player 2" ,15 ,4);
2019US_AminaKantic 0:41aae9a4c212 264 else
2019US_AminaKantic 0:41aae9a4c212 265 lcd.printString("Player" ,15 ,4);
2019US_AminaKantic 0:41aae9a4c212 266 }
2019US_AminaKantic 0:41aae9a4c212 267 if(winner == 2)
2019US_AminaKantic 0:41aae9a4c212 268 {
2019US_AminaKantic 0:41aae9a4c212 269 lcd.printString("Winner is" ,15 ,2);
2019US_AminaKantic 0:41aae9a4c212 270 lcd.printString("Computer" ,15 ,4);
2019US_AminaKantic 0:41aae9a4c212 271 }
2019US_AminaKantic 0:41aae9a4c212 272 if(winner == 3) lcd.printString ("It's a tie!" ,15 ,3);
2019US_AminaKantic 0:41aae9a4c212 273 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 274 t2.attach(&DrawMeni, 3.0);
2019US_AminaKantic 0:41aae9a4c212 275 }
2019US_AminaKantic 0:41aae9a4c212 276
2019US_AminaKantic 0:41aae9a4c212 277 void ComputerTurn()
2019US_AminaKantic 0:41aae9a4c212 278 {
2019US_AminaKantic 0:41aae9a4c212 279 if(state != AITurn)
2019US_AminaKantic 0:41aae9a4c212 280 return;
2019US_AminaKantic 0:41aae9a4c212 281 int field = -1;
2019US_AminaKantic 0:41aae9a4c212 282 int player = (computer%2)+1;
2019US_AminaKantic 0:41aae9a4c212 283 if(fields[0] == computer)
2019US_AminaKantic 0:41aae9a4c212 284 {
2019US_AminaKantic 0:41aae9a4c212 285 if(fields[1] == computer && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 286 {
2019US_AminaKantic 0:41aae9a4c212 287 field = 2;
2019US_AminaKantic 0:41aae9a4c212 288 }
2019US_AminaKantic 0:41aae9a4c212 289 else if(fields[2] == computer && fields[1] == 0)
2019US_AminaKantic 0:41aae9a4c212 290 {
2019US_AminaKantic 0:41aae9a4c212 291 field = 1;
2019US_AminaKantic 0:41aae9a4c212 292 }
2019US_AminaKantic 0:41aae9a4c212 293 else if(fields[3] == computer && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 294 {
2019US_AminaKantic 0:41aae9a4c212 295 field = 6;
2019US_AminaKantic 0:41aae9a4c212 296 }
2019US_AminaKantic 0:41aae9a4c212 297 else if(fields[6] == computer && fields[3] == 0)
2019US_AminaKantic 0:41aae9a4c212 298 {
2019US_AminaKantic 0:41aae9a4c212 299 field = 3;
2019US_AminaKantic 0:41aae9a4c212 300 }
2019US_AminaKantic 0:41aae9a4c212 301 else if(fields[4] == computer && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 302 {
2019US_AminaKantic 0:41aae9a4c212 303 field = 8;
2019US_AminaKantic 0:41aae9a4c212 304 }
2019US_AminaKantic 0:41aae9a4c212 305 else if(fields[8] == computer && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 306 {
2019US_AminaKantic 0:41aae9a4c212 307 field = 4;
2019US_AminaKantic 0:41aae9a4c212 308 }
2019US_AminaKantic 0:41aae9a4c212 309 }
2019US_AminaKantic 0:41aae9a4c212 310 if(fields[1] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 311 {
2019US_AminaKantic 0:41aae9a4c212 312 if(fields[4] == computer && fields[7] == 0)
2019US_AminaKantic 0:41aae9a4c212 313 {
2019US_AminaKantic 0:41aae9a4c212 314 field = 7;
2019US_AminaKantic 0:41aae9a4c212 315 }
2019US_AminaKantic 0:41aae9a4c212 316 else if(fields[7] == computer && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 317 {
2019US_AminaKantic 0:41aae9a4c212 318 field = 4;
2019US_AminaKantic 0:41aae9a4c212 319 }
2019US_AminaKantic 0:41aae9a4c212 320 else if(fields[2] == computer && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 321 {
2019US_AminaKantic 0:41aae9a4c212 322 field = 0;
2019US_AminaKantic 0:41aae9a4c212 323 }
2019US_AminaKantic 0:41aae9a4c212 324 }
2019US_AminaKantic 0:41aae9a4c212 325 if(fields[2] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 326 {
2019US_AminaKantic 0:41aae9a4c212 327 if(fields[5] == computer && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 328 {
2019US_AminaKantic 0:41aae9a4c212 329 field = 8;
2019US_AminaKantic 0:41aae9a4c212 330 }
2019US_AminaKantic 0:41aae9a4c212 331 else if(fields[8] == computer && fields[5] == 0)
2019US_AminaKantic 0:41aae9a4c212 332 {
2019US_AminaKantic 0:41aae9a4c212 333 field = 5;
2019US_AminaKantic 0:41aae9a4c212 334 }
2019US_AminaKantic 0:41aae9a4c212 335 else if(fields[4] == computer && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 336 {
2019US_AminaKantic 0:41aae9a4c212 337 field = 6;
2019US_AminaKantic 0:41aae9a4c212 338 }
2019US_AminaKantic 0:41aae9a4c212 339 else if(fields[6] == computer && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 340 {
2019US_AminaKantic 0:41aae9a4c212 341 field = 4;
2019US_AminaKantic 0:41aae9a4c212 342 }
2019US_AminaKantic 0:41aae9a4c212 343 }
2019US_AminaKantic 0:41aae9a4c212 344 if(fields[3] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 345 {
2019US_AminaKantic 0:41aae9a4c212 346 if(fields[6] == computer && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 347 {
2019US_AminaKantic 0:41aae9a4c212 348 field = 0;
2019US_AminaKantic 0:41aae9a4c212 349 }
2019US_AminaKantic 0:41aae9a4c212 350 else if(fields[4] == computer && fields[5] == 0)
2019US_AminaKantic 0:41aae9a4c212 351 {
2019US_AminaKantic 0:41aae9a4c212 352 field = 5;
2019US_AminaKantic 0:41aae9a4c212 353 }
2019US_AminaKantic 0:41aae9a4c212 354 else if(fields[5] == computer && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 355 {
2019US_AminaKantic 0:41aae9a4c212 356 field = 4;
2019US_AminaKantic 0:41aae9a4c212 357 }
2019US_AminaKantic 0:41aae9a4c212 358 }
2019US_AminaKantic 0:41aae9a4c212 359 if(fields[4] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 360 {
2019US_AminaKantic 0:41aae9a4c212 361 if(fields[5] == computer && fields[3] == 0)
2019US_AminaKantic 0:41aae9a4c212 362 {
2019US_AminaKantic 0:41aae9a4c212 363 field = 3;
2019US_AminaKantic 0:41aae9a4c212 364 }
2019US_AminaKantic 0:41aae9a4c212 365 else if(fields[7] == computer && fields[1] == 0)
2019US_AminaKantic 0:41aae9a4c212 366 {
2019US_AminaKantic 0:41aae9a4c212 367 field = 1;
2019US_AminaKantic 0:41aae9a4c212 368 }
2019US_AminaKantic 0:41aae9a4c212 369 else if(fields[8] == computer && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 370 {
2019US_AminaKantic 0:41aae9a4c212 371 field = 0;
2019US_AminaKantic 0:41aae9a4c212 372 }
2019US_AminaKantic 0:41aae9a4c212 373 else if(fields[6] == computer && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 374 {
2019US_AminaKantic 0:41aae9a4c212 375 field = 2;
2019US_AminaKantic 0:41aae9a4c212 376 }
2019US_AminaKantic 0:41aae9a4c212 377 }
2019US_AminaKantic 0:41aae9a4c212 378 if(fields[5] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 379 {
2019US_AminaKantic 0:41aae9a4c212 380 if(fields[8] == computer && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 381 {
2019US_AminaKantic 0:41aae9a4c212 382 field = 2;
2019US_AminaKantic 0:41aae9a4c212 383 }
2019US_AminaKantic 0:41aae9a4c212 384 }
2019US_AminaKantic 0:41aae9a4c212 385 if(fields[6] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 386 {
2019US_AminaKantic 0:41aae9a4c212 387 if(fields[7] == computer && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 388 {
2019US_AminaKantic 0:41aae9a4c212 389 field = 8;
2019US_AminaKantic 0:41aae9a4c212 390 }
2019US_AminaKantic 0:41aae9a4c212 391 if(fields[8] == computer && fields[7] == 0)
2019US_AminaKantic 0:41aae9a4c212 392 {
2019US_AminaKantic 0:41aae9a4c212 393 field = 7;
2019US_AminaKantic 0:41aae9a4c212 394 }
2019US_AminaKantic 0:41aae9a4c212 395 }
2019US_AminaKantic 0:41aae9a4c212 396 if(fields[7] == computer && field == -1)
2019US_AminaKantic 0:41aae9a4c212 397 {
2019US_AminaKantic 0:41aae9a4c212 398 if(fields[8] == computer && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 399 {
2019US_AminaKantic 0:41aae9a4c212 400 field = 6;
2019US_AminaKantic 0:41aae9a4c212 401 }
2019US_AminaKantic 0:41aae9a4c212 402 }
2019US_AminaKantic 0:41aae9a4c212 403 if(fields[0] == player)
2019US_AminaKantic 0:41aae9a4c212 404 {
2019US_AminaKantic 0:41aae9a4c212 405 if(fields[1] == player && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 406 {
2019US_AminaKantic 0:41aae9a4c212 407 field = 2;
2019US_AminaKantic 0:41aae9a4c212 408 }
2019US_AminaKantic 0:41aae9a4c212 409 else if(fields[2] == player && fields[1] == 0)
2019US_AminaKantic 0:41aae9a4c212 410 {
2019US_AminaKantic 0:41aae9a4c212 411 field = 1;
2019US_AminaKantic 0:41aae9a4c212 412 }
2019US_AminaKantic 0:41aae9a4c212 413 else if(fields[3] == player && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 414 {
2019US_AminaKantic 0:41aae9a4c212 415 field = 6;
2019US_AminaKantic 0:41aae9a4c212 416 }
2019US_AminaKantic 0:41aae9a4c212 417 else if(fields[6] == player && fields[3] == 0)
2019US_AminaKantic 0:41aae9a4c212 418 {
2019US_AminaKantic 0:41aae9a4c212 419 field = 3;
2019US_AminaKantic 0:41aae9a4c212 420 }
2019US_AminaKantic 0:41aae9a4c212 421 else if(fields[4] == player && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 422 {
2019US_AminaKantic 0:41aae9a4c212 423 field = 8;
2019US_AminaKantic 0:41aae9a4c212 424 }
2019US_AminaKantic 0:41aae9a4c212 425 else if(fields[8] == player && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 426 {
2019US_AminaKantic 0:41aae9a4c212 427 field = 4;
2019US_AminaKantic 0:41aae9a4c212 428 }
2019US_AminaKantic 0:41aae9a4c212 429 }
2019US_AminaKantic 0:41aae9a4c212 430 if(fields[1] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 431 {
2019US_AminaKantic 0:41aae9a4c212 432 if(fields[4] == player && fields[7] == 0)
2019US_AminaKantic 0:41aae9a4c212 433 {
2019US_AminaKantic 0:41aae9a4c212 434 field = 7;
2019US_AminaKantic 0:41aae9a4c212 435 }
2019US_AminaKantic 0:41aae9a4c212 436 else if(fields[7] == player && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 437 {
2019US_AminaKantic 0:41aae9a4c212 438 field = 4;
2019US_AminaKantic 0:41aae9a4c212 439 }
2019US_AminaKantic 0:41aae9a4c212 440 else if(fields[2] == player && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 441 {
2019US_AminaKantic 0:41aae9a4c212 442 field = 0;
2019US_AminaKantic 0:41aae9a4c212 443 }
2019US_AminaKantic 0:41aae9a4c212 444 }
2019US_AminaKantic 0:41aae9a4c212 445 if(fields[2] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 446 {
2019US_AminaKantic 0:41aae9a4c212 447 if(fields[5] == player && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 448 {
2019US_AminaKantic 0:41aae9a4c212 449 field = 8;
2019US_AminaKantic 0:41aae9a4c212 450 }
2019US_AminaKantic 0:41aae9a4c212 451 else if(fields[8] == player && fields[5] == 0)
2019US_AminaKantic 0:41aae9a4c212 452 {
2019US_AminaKantic 0:41aae9a4c212 453 field = 5;
2019US_AminaKantic 0:41aae9a4c212 454 }
2019US_AminaKantic 0:41aae9a4c212 455 else if(fields[4] == player && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 456 {
2019US_AminaKantic 0:41aae9a4c212 457 field = 6;
2019US_AminaKantic 0:41aae9a4c212 458 }
2019US_AminaKantic 0:41aae9a4c212 459 else if(fields[6] == player && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 460 {
2019US_AminaKantic 0:41aae9a4c212 461 field = 4;
2019US_AminaKantic 0:41aae9a4c212 462 }
2019US_AminaKantic 0:41aae9a4c212 463 }
2019US_AminaKantic 0:41aae9a4c212 464 if(fields[3] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 465 {
2019US_AminaKantic 0:41aae9a4c212 466 if(fields[6] == player && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 467 {
2019US_AminaKantic 0:41aae9a4c212 468 field = 0;
2019US_AminaKantic 0:41aae9a4c212 469 }
2019US_AminaKantic 0:41aae9a4c212 470 else if(fields[4] == player && fields[5] == 0)
2019US_AminaKantic 0:41aae9a4c212 471 {
2019US_AminaKantic 0:41aae9a4c212 472 field = 5;
2019US_AminaKantic 0:41aae9a4c212 473 }
2019US_AminaKantic 0:41aae9a4c212 474 else if(fields[5] == player && fields[4] == 0)
2019US_AminaKantic 0:41aae9a4c212 475 {
2019US_AminaKantic 0:41aae9a4c212 476 field = 4;
2019US_AminaKantic 0:41aae9a4c212 477 }
2019US_AminaKantic 0:41aae9a4c212 478 }
2019US_AminaKantic 0:41aae9a4c212 479 if(fields[4] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 480 {
2019US_AminaKantic 0:41aae9a4c212 481 if(fields[5] == player && fields[3] == 0)
2019US_AminaKantic 0:41aae9a4c212 482 {
2019US_AminaKantic 0:41aae9a4c212 483 field = 3;
2019US_AminaKantic 0:41aae9a4c212 484 }
2019US_AminaKantic 0:41aae9a4c212 485 else if(fields[7] == player && fields[1] == 0)
2019US_AminaKantic 0:41aae9a4c212 486 {
2019US_AminaKantic 0:41aae9a4c212 487 field = 1;
2019US_AminaKantic 0:41aae9a4c212 488 }
2019US_AminaKantic 0:41aae9a4c212 489 else if(fields[8] == player && fields[0] == 0)
2019US_AminaKantic 0:41aae9a4c212 490 {
2019US_AminaKantic 0:41aae9a4c212 491 field = 0;
2019US_AminaKantic 0:41aae9a4c212 492 }
2019US_AminaKantic 0:41aae9a4c212 493 else if(fields[6] == player && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 494 {
2019US_AminaKantic 0:41aae9a4c212 495 field = 2;
2019US_AminaKantic 0:41aae9a4c212 496 }
2019US_AminaKantic 0:41aae9a4c212 497 }
2019US_AminaKantic 0:41aae9a4c212 498 if(fields[5] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 499 {
2019US_AminaKantic 0:41aae9a4c212 500 if(fields[8] == player && fields[2] == 0)
2019US_AminaKantic 0:41aae9a4c212 501 {
2019US_AminaKantic 0:41aae9a4c212 502 field = 2;
2019US_AminaKantic 0:41aae9a4c212 503 }
2019US_AminaKantic 0:41aae9a4c212 504 }
2019US_AminaKantic 0:41aae9a4c212 505 if(fields[6] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 506 {
2019US_AminaKantic 0:41aae9a4c212 507 if(fields[7] == player && fields[8] == 0)
2019US_AminaKantic 0:41aae9a4c212 508 {
2019US_AminaKantic 0:41aae9a4c212 509 field = 8;
2019US_AminaKantic 0:41aae9a4c212 510 }
2019US_AminaKantic 0:41aae9a4c212 511 if(fields[8] == player && fields[7] == 0)
2019US_AminaKantic 0:41aae9a4c212 512 {
2019US_AminaKantic 0:41aae9a4c212 513 field = 7;
2019US_AminaKantic 0:41aae9a4c212 514 }
2019US_AminaKantic 0:41aae9a4c212 515 }
2019US_AminaKantic 0:41aae9a4c212 516 if(fields[7] == player && field == -1)
2019US_AminaKantic 0:41aae9a4c212 517 {
2019US_AminaKantic 0:41aae9a4c212 518 if(fields[8] == player && fields[6] == 0)
2019US_AminaKantic 0:41aae9a4c212 519 {
2019US_AminaKantic 0:41aae9a4c212 520 field = 6;
2019US_AminaKantic 0:41aae9a4c212 521 }
2019US_AminaKantic 0:41aae9a4c212 522 }
2019US_AminaKantic 0:41aae9a4c212 523 if(field == -1)
2019US_AminaKantic 0:41aae9a4c212 524 {
2019US_AminaKantic 0:41aae9a4c212 525 do{
2019US_AminaKantic 0:41aae9a4c212 526 field = RandomNumber()%9;
2019US_AminaKantic 0:41aae9a4c212 527 }
2019US_AminaKantic 0:41aae9a4c212 528 while(fields[field] != 0);
2019US_AminaKantic 0:41aae9a4c212 529 }
2019US_AminaKantic 0:41aae9a4c212 530
2019US_AminaKantic 0:41aae9a4c212 531 if(turnX)
2019US_AminaKantic 0:41aae9a4c212 532 DrawX(field+1);
2019US_AminaKantic 0:41aae9a4c212 533 else
2019US_AminaKantic 0:41aae9a4c212 534 DrawO(field+1);
2019US_AminaKantic 0:41aae9a4c212 535
2019US_AminaKantic 0:41aae9a4c212 536 if(WinX() || WinO())
2019US_AminaKantic 0:41aae9a4c212 537 {
2019US_AminaKantic 0:41aae9a4c212 538 state = End;
2019US_AminaKantic 0:41aae9a4c212 539 winner = 2;
2019US_AminaKantic 0:41aae9a4c212 540 t1.attach(&DrawWin, 1.0);
2019US_AminaKantic 0:41aae9a4c212 541 }
2019US_AminaKantic 0:41aae9a4c212 542 else if(TieCheck())
2019US_AminaKantic 0:41aae9a4c212 543 {
2019US_AminaKantic 0:41aae9a4c212 544 state = End;
2019US_AminaKantic 0:41aae9a4c212 545 winner = 3;
2019US_AminaKantic 0:41aae9a4c212 546 t1.attach(&DrawWin, 1.0);
2019US_AminaKantic 0:41aae9a4c212 547 }
2019US_AminaKantic 0:41aae9a4c212 548
2019US_AminaKantic 0:41aae9a4c212 549 state = Turn;
2019US_AminaKantic 0:41aae9a4c212 550 turnX = !turnX;
2019US_AminaKantic 0:41aae9a4c212 551 }
2019US_AminaKantic 0:41aae9a4c212 552
2019US_AminaKantic 0:41aae9a4c212 553 void Move()
2019US_AminaKantic 0:41aae9a4c212 554 {
2019US_AminaKantic 0:41aae9a4c212 555 if(state != Turn && state != Menu)
2019US_AminaKantic 0:41aae9a4c212 556 return;
2019US_AminaKantic 0:41aae9a4c212 557 if(state == Turn)
2019US_AminaKantic 0:41aae9a4c212 558 {
2019US_AminaKantic 0:41aae9a4c212 559 if(VRy > 1.0/3.0 && VRy < 2.0/3.0 && canMove)
2019US_AminaKantic 0:41aae9a4c212 560 {
2019US_AminaKantic 0:41aae9a4c212 561 bool change = false;
2019US_AminaKantic 0:41aae9a4c212 562 bool inc;
2019US_AminaKantic 0:41aae9a4c212 563 if(VRx < 1.0/3.0 && currentPointX > 0)
2019US_AminaKantic 0:41aae9a4c212 564 {
2019US_AminaKantic 0:41aae9a4c212 565 currentPointX--;
2019US_AminaKantic 0:41aae9a4c212 566 inc = false;
2019US_AminaKantic 0:41aae9a4c212 567 change = true;
2019US_AminaKantic 0:41aae9a4c212 568 canMove = false;
2019US_AminaKantic 0:41aae9a4c212 569 }
2019US_AminaKantic 0:41aae9a4c212 570
2019US_AminaKantic 0:41aae9a4c212 571 if(VRx > 2.0/3.0 && currentPointX < 2)
2019US_AminaKantic 0:41aae9a4c212 572 {
2019US_AminaKantic 0:41aae9a4c212 573 currentPointX++;
2019US_AminaKantic 0:41aae9a4c212 574 inc = true;
2019US_AminaKantic 0:41aae9a4c212 575 change = true;
2019US_AminaKantic 0:41aae9a4c212 576 canMove = false;
2019US_AminaKantic 0:41aae9a4c212 577 }
2019US_AminaKantic 0:41aae9a4c212 578
2019US_AminaKantic 0:41aae9a4c212 579 if(change)
2019US_AminaKantic 0:41aae9a4c212 580 {
2019US_AminaKantic 0:41aae9a4c212 581 if(!inc)
2019US_AminaKantic 0:41aae9a4c212 582 {
2019US_AminaKantic 0:41aae9a4c212 583 DeleteSelector(currentPointY*3 + currentPointX+2);
2019US_AminaKantic 0:41aae9a4c212 584 }
2019US_AminaKantic 0:41aae9a4c212 585 else
2019US_AminaKantic 0:41aae9a4c212 586 {
2019US_AminaKantic 0:41aae9a4c212 587 DeleteSelector(currentPointY*3 + currentPointX);
2019US_AminaKantic 0:41aae9a4c212 588 }
2019US_AminaKantic 0:41aae9a4c212 589 DrawSelector(currentPointY*3 + currentPointX+1);
2019US_AminaKantic 0:41aae9a4c212 590 }
2019US_AminaKantic 0:41aae9a4c212 591 }
2019US_AminaKantic 0:41aae9a4c212 592 else if(VRx > 1.0/3.0 && VRx < 2.0/3.0 && canMove)
2019US_AminaKantic 0:41aae9a4c212 593 {
2019US_AminaKantic 0:41aae9a4c212 594 bool change = false;
2019US_AminaKantic 0:41aae9a4c212 595 bool inc;
2019US_AminaKantic 0:41aae9a4c212 596 if(VRy < 1.0/3.0 && currentPointY > 0)
2019US_AminaKantic 0:41aae9a4c212 597 {
2019US_AminaKantic 0:41aae9a4c212 598 currentPointY--;
2019US_AminaKantic 0:41aae9a4c212 599 inc = false;
2019US_AminaKantic 0:41aae9a4c212 600 change = true;
2019US_AminaKantic 0:41aae9a4c212 601 canMove = false;
2019US_AminaKantic 0:41aae9a4c212 602 }
2019US_AminaKantic 0:41aae9a4c212 603
2019US_AminaKantic 0:41aae9a4c212 604 if(VRy > 2.0/3.0 && currentPointY < 2)
2019US_AminaKantic 0:41aae9a4c212 605 {
2019US_AminaKantic 0:41aae9a4c212 606 currentPointY++;
2019US_AminaKantic 0:41aae9a4c212 607 inc = true;
2019US_AminaKantic 0:41aae9a4c212 608 change = true;
2019US_AminaKantic 0:41aae9a4c212 609 canMove = false;
2019US_AminaKantic 0:41aae9a4c212 610 }
2019US_AminaKantic 0:41aae9a4c212 611
2019US_AminaKantic 0:41aae9a4c212 612 if(change)
2019US_AminaKantic 0:41aae9a4c212 613 {
2019US_AminaKantic 0:41aae9a4c212 614 if(!inc)
2019US_AminaKantic 0:41aae9a4c212 615 {
2019US_AminaKantic 0:41aae9a4c212 616 DeleteSelector((currentPointY+1)*3 + currentPointX+1);
2019US_AminaKantic 0:41aae9a4c212 617 }
2019US_AminaKantic 0:41aae9a4c212 618 else
2019US_AminaKantic 0:41aae9a4c212 619 {
2019US_AminaKantic 0:41aae9a4c212 620 DeleteSelector((currentPointY-1)*3 + currentPointX+1);
2019US_AminaKantic 0:41aae9a4c212 621 }
2019US_AminaKantic 0:41aae9a4c212 622 DrawSelector(currentPointY*3 + currentPointX+1);
2019US_AminaKantic 0:41aae9a4c212 623 }
2019US_AminaKantic 0:41aae9a4c212 624 }
2019US_AminaKantic 0:41aae9a4c212 625 else if(!canMove && VRx > 1.0/3.0 && VRx < 2.0/3.0 && VRy > 1.0/3.0 && VRy < 2.0/3.0)
2019US_AminaKantic 0:41aae9a4c212 626 {
2019US_AminaKantic 0:41aae9a4c212 627 canMove = true;
2019US_AminaKantic 0:41aae9a4c212 628 }
2019US_AminaKantic 0:41aae9a4c212 629 }
2019US_AminaKantic 0:41aae9a4c212 630 else if(state == Menu)
2019US_AminaKantic 0:41aae9a4c212 631 {
2019US_AminaKantic 0:41aae9a4c212 632 if(VRy < 1.0/3.0 && gameType == 1)
2019US_AminaKantic 0:41aae9a4c212 633 {
2019US_AminaKantic 0:41aae9a4c212 634 gameType = 0;
2019US_AminaKantic 0:41aae9a4c212 635 lcd.setPixel(15, 35);
2019US_AminaKantic 0:41aae9a4c212 636 lcd.setPixel(15, 34);
2019US_AminaKantic 0:41aae9a4c212 637 lcd.setPixel(14, 34);
2019US_AminaKantic 0:41aae9a4c212 638 lcd.setPixel(14, 35);
2019US_AminaKantic 0:41aae9a4c212 639 lcd.clearPixel(15, 28);
2019US_AminaKantic 0:41aae9a4c212 640 lcd.clearPixel(15, 27);
2019US_AminaKantic 0:41aae9a4c212 641 lcd.clearPixel(14, 27);
2019US_AminaKantic 0:41aae9a4c212 642 lcd.clearPixel(14, 28);
2019US_AminaKantic 0:41aae9a4c212 643 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 644 }
2019US_AminaKantic 0:41aae9a4c212 645
2019US_AminaKantic 0:41aae9a4c212 646 if(VRy > 2.0/3.0 && gameType == 0)
2019US_AminaKantic 0:41aae9a4c212 647 {
2019US_AminaKantic 0:41aae9a4c212 648 gameType = 1;
2019US_AminaKantic 0:41aae9a4c212 649 lcd.setPixel(15, 28);
2019US_AminaKantic 0:41aae9a4c212 650 lcd.setPixel(15, 27);
2019US_AminaKantic 0:41aae9a4c212 651 lcd.setPixel(14, 27);
2019US_AminaKantic 0:41aae9a4c212 652 lcd.setPixel(14, 28);
2019US_AminaKantic 0:41aae9a4c212 653 lcd.clearPixel(15, 35);
2019US_AminaKantic 0:41aae9a4c212 654 lcd.clearPixel(15, 34);
2019US_AminaKantic 0:41aae9a4c212 655 lcd.clearPixel(14, 34);
2019US_AminaKantic 0:41aae9a4c212 656 lcd.clearPixel(14, 35);
2019US_AminaKantic 0:41aae9a4c212 657 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 658 }
2019US_AminaKantic 0:41aae9a4c212 659 }
2019US_AminaKantic 0:41aae9a4c212 660 }
2019US_AminaKantic 0:41aae9a4c212 661
2019US_AminaKantic 0:41aae9a4c212 662 void PlayerTurn()
2019US_AminaKantic 0:41aae9a4c212 663 {
2019US_AminaKantic 0:41aae9a4c212 664 if(state != Turn)
2019US_AminaKantic 0:41aae9a4c212 665 return;
2019US_AminaKantic 0:41aae9a4c212 666 int f = currentPointY*3 + currentPointX;
2019US_AminaKantic 0:41aae9a4c212 667 if(fields[f] != 0)
2019US_AminaKantic 0:41aae9a4c212 668 {
2019US_AminaKantic 0:41aae9a4c212 669 return;
2019US_AminaKantic 0:41aae9a4c212 670 }
2019US_AminaKantic 0:41aae9a4c212 671
2019US_AminaKantic 0:41aae9a4c212 672 state = Pause;
2019US_AminaKantic 0:41aae9a4c212 673
2019US_AminaKantic 0:41aae9a4c212 674 if(turnX == true)
2019US_AminaKantic 0:41aae9a4c212 675 DrawX(f+1);
2019US_AminaKantic 0:41aae9a4c212 676 else
2019US_AminaKantic 0:41aae9a4c212 677 DrawO(f+1);
2019US_AminaKantic 0:41aae9a4c212 678
2019US_AminaKantic 0:41aae9a4c212 679 turnX = !turnX;
2019US_AminaKantic 0:41aae9a4c212 680
2019US_AminaKantic 0:41aae9a4c212 681 if(WinX())
2019US_AminaKantic 0:41aae9a4c212 682 {
2019US_AminaKantic 0:41aae9a4c212 683 if(gameType == 0){
2019US_AminaKantic 0:41aae9a4c212 684 winner = 0;
2019US_AminaKantic 0:41aae9a4c212 685 }
2019US_AminaKantic 0:41aae9a4c212 686 else{
2019US_AminaKantic 0:41aae9a4c212 687 if(computer != 1)
2019US_AminaKantic 0:41aae9a4c212 688 winner = 0;
2019US_AminaKantic 0:41aae9a4c212 689 else
2019US_AminaKantic 0:41aae9a4c212 690 winner = 2;
2019US_AminaKantic 0:41aae9a4c212 691 }
2019US_AminaKantic 0:41aae9a4c212 692 state = End;
2019US_AminaKantic 0:41aae9a4c212 693 t1.attach(&DrawWin, 1.0);
2019US_AminaKantic 0:41aae9a4c212 694 }
2019US_AminaKantic 0:41aae9a4c212 695 else if(WinO())
2019US_AminaKantic 0:41aae9a4c212 696 {
2019US_AminaKantic 0:41aae9a4c212 697 if(gameType == 0){
2019US_AminaKantic 0:41aae9a4c212 698 winner = 1;
2019US_AminaKantic 0:41aae9a4c212 699 }
2019US_AminaKantic 0:41aae9a4c212 700 else{
2019US_AminaKantic 0:41aae9a4c212 701 if(computer != 2)
2019US_AminaKantic 0:41aae9a4c212 702 winner = 1;
2019US_AminaKantic 0:41aae9a4c212 703 else
2019US_AminaKantic 0:41aae9a4c212 704 winner = 2;
2019US_AminaKantic 0:41aae9a4c212 705 }
2019US_AminaKantic 0:41aae9a4c212 706 state = End;
2019US_AminaKantic 0:41aae9a4c212 707 t1.attach(&DrawWin, 1.0);
2019US_AminaKantic 0:41aae9a4c212 708 }
2019US_AminaKantic 0:41aae9a4c212 709 else if(TieCheck())
2019US_AminaKantic 0:41aae9a4c212 710 {
2019US_AminaKantic 0:41aae9a4c212 711 state = End;
2019US_AminaKantic 0:41aae9a4c212 712 winner = 3;
2019US_AminaKantic 0:41aae9a4c212 713 t1.attach(&DrawWin, 1.0);
2019US_AminaKantic 0:41aae9a4c212 714 }else{
2019US_AminaKantic 0:41aae9a4c212 715 if(gameType == 1)
2019US_AminaKantic 0:41aae9a4c212 716 {
2019US_AminaKantic 0:41aae9a4c212 717 state = AITurn;
2019US_AminaKantic 0:41aae9a4c212 718 cp.attach(&ComputerTurn, 0.5);
2019US_AminaKantic 0:41aae9a4c212 719 }
2019US_AminaKantic 0:41aae9a4c212 720 else
2019US_AminaKantic 0:41aae9a4c212 721 {
2019US_AminaKantic 0:41aae9a4c212 722 state = Turn;
2019US_AminaKantic 0:41aae9a4c212 723 }
2019US_AminaKantic 0:41aae9a4c212 724 }
2019US_AminaKantic 0:41aae9a4c212 725 }
2019US_AminaKantic 0:41aae9a4c212 726
2019US_AminaKantic 0:41aae9a4c212 727 void Start()
2019US_AminaKantic 0:41aae9a4c212 728 {
2019US_AminaKantic 0:41aae9a4c212 729 if(state != Menu)
2019US_AminaKantic 0:41aae9a4c212 730 return;
2019US_AminaKantic 0:41aae9a4c212 731 state = Pause;
2019US_AminaKantic 0:41aae9a4c212 732 timer.start();
2019US_AminaKantic 0:41aae9a4c212 733 lcd.clear();
2019US_AminaKantic 0:41aae9a4c212 734 DrawBorder();
2019US_AminaKantic 0:41aae9a4c212 735 DrawGrid();
2019US_AminaKantic 0:41aae9a4c212 736 DrawSelector(5);
2019US_AminaKantic 0:41aae9a4c212 737
2019US_AminaKantic 0:41aae9a4c212 738 if(gameType == 1)
2019US_AminaKantic 0:41aae9a4c212 739 {
2019US_AminaKantic 0:41aae9a4c212 740 computer = RandomNumber()%2+1;
2019US_AminaKantic 0:41aae9a4c212 741 if(computer == 1)
2019US_AminaKantic 0:41aae9a4c212 742 {
2019US_AminaKantic 0:41aae9a4c212 743 state = AITurn;
2019US_AminaKantic 0:41aae9a4c212 744 wait(0.5);
2019US_AminaKantic 0:41aae9a4c212 745 ComputerTurn();
2019US_AminaKantic 0:41aae9a4c212 746 }
2019US_AminaKantic 0:41aae9a4c212 747 else
2019US_AminaKantic 0:41aae9a4c212 748 {
2019US_AminaKantic 0:41aae9a4c212 749 state = Turn;
2019US_AminaKantic 0:41aae9a4c212 750 }
2019US_AminaKantic 0:41aae9a4c212 751 }
2019US_AminaKantic 0:41aae9a4c212 752 else
2019US_AminaKantic 0:41aae9a4c212 753 {
2019US_AminaKantic 0:41aae9a4c212 754 state = Turn;
2019US_AminaKantic 0:41aae9a4c212 755 }
2019US_AminaKantic 0:41aae9a4c212 756 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 757 }
2019US_AminaKantic 0:41aae9a4c212 758
2019US_AminaKantic 0:41aae9a4c212 759 int main() {
2019US_AminaKantic 0:41aae9a4c212 760 state = Menu;
2019US_AminaKantic 0:41aae9a4c212 761 lcd.init();
2019US_AminaKantic 0:41aae9a4c212 762 lcd.refresh();
2019US_AminaKantic 0:41aae9a4c212 763 SW.mode(PullUp);
2019US_AminaKantic 0:41aae9a4c212 764 DrawMeni();
2019US_AminaKantic 0:41aae9a4c212 765 seed.start();
2019US_AminaKantic 0:41aae9a4c212 766 while(1) {
2019US_AminaKantic 0:41aae9a4c212 767 Move();
2019US_AminaKantic 0:41aae9a4c212 768 if(timer.read_ms() > 1000)
2019US_AminaKantic 0:41aae9a4c212 769 {
2019US_AminaKantic 0:41aae9a4c212 770 SW.rise(&PlayerTurn);
2019US_AminaKantic 0:41aae9a4c212 771 timer.reset();
2019US_AminaKantic 0:41aae9a4c212 772 timer.stop();
2019US_AminaKantic 0:41aae9a4c212 773 }
2019US_AminaKantic 0:41aae9a4c212 774 if(seed.read_ms() == 100000)
2019US_AminaKantic 0:41aae9a4c212 775 {
2019US_AminaKantic 0:41aae9a4c212 776 seed.reset();
2019US_AminaKantic 0:41aae9a4c212 777 seed.start();
2019US_AminaKantic 0:41aae9a4c212 778 }
2019US_AminaKantic 0:41aae9a4c212 779 }
2019US_AminaKantic 0:41aae9a4c212 780 }