Tic-Tac-Toe als Applikation

Hier der Programmcode:

 TicTac.java 
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class TicTac extends Frame { 5 static Spielfeld brett; 6 final int leer = 0; 7 final int kreischen = 1; 8 final int kreuzchen = 2; 9 int[][] Belegung = {{leer, leer, leer}, 10 {leer, leer, leer}, 11 {leer, leer, leer}}; 12 static Button Neuanfang; 13 static Button Ende; 14 15 public TicTac() { 16 setTitle("TicTacToe-Spiel"); 17 this.addWindowListener(new WindowAdapter() { 18 public void windowClosing(WindowEvent e) { 19 System.exit(0); 20 } 21 }); 22 setLayout(new FlowLayout()); 23 add(Neuanfang = new Button("Neustart")); 24 Neuanfang.addActionListener(new Neuzeichnen()); 25 add(Ende = new Button("Ende")); 26 Ende.addActionListener(new Schluss()); 27 add(brett = new Spielfeld(0,0,this)); 28 setVisible(true); 29 pack(); 30 setBackground(Color.lightGray); 31 32 } 33 public class Neuzeichnen implements ActionListener{ 34 public void actionPerformed(ActionEvent e) { 35 if (e.paramString().indexOf("=Neustart")!=-1){ 36 for(int i=0;i<3;i++) { 37 for (int j = 0; j <3; j++) { 38 Belegung[i][j] = leer; 39 } 40 } 41 brett.repaint(); 42 } 43 } 44 } 45 46 public class Schluss implements ActionListener{ 47 public void actionPerformed(ActionEvent e) { 48 if (e.paramString().indexOf("=Ende")!=-1) 49 System.exit(0); 50 } 51 } 52 53 54 55 public int gewinn() { // hat jamand gewonnen? 56 int wer; 57 58 for (int j = 1; j <=2; j ++) { 59 wer = j; 60 for (int i = 0; i<=2; i++) { 61 if ((Belegung[i][0] == wer) && (Belegung[i][1] == wer) && (Belegung[i][2] == wer)) // die Zeilen 62 return wer; 63 } 64 65 for (int i = 0; i<=2; i++) { 66 if ((Belegung[0][i] == wer) && (Belegung[1][i] == wer) && (Belegung[2][i] == wer)) // die Spalten 67 return wer; 68 } 69 70 if ((Belegung[0][0] == wer) && (Belegung[1][1] == wer) && (Belegung[2][2] == wer)) { // die 1. Diagonale 71 return wer; 72 } 73 74 if ((Belegung[0][2] == wer) && (Belegung[1][1] == wer) && (Belegung[2][0] == wer)) { // die 2. Diagonale 75 return wer; 76 } 77 } 78 return leer; 79 } 80 81 82 public int nochwelchefrei() { // sind noch Felder frei? 83 int zaehler = 0; 84 int i,j; 85 86 for (i = 0; i<=2; i++) { 87 for (j = 0; j<=2; j++) { 88 if (Belegung[i][j] == leer) 89 zaehler++; 90 } 91 } 92 return zaehler; 93 } 94 95 96 97 public void alleszufaellig(int wert) { // eine zufällige Position wird ausgesucht 98 int zaehler = 0; 99 int i,j; 100 101 for (i = 0; i<=2; i++) { 102 for (j = 0; j<=2; j++) { 103 if (Belegung[i][j] == leer) 104 zaehler++; 105 } 106 } 107 108 int zufall = (int) Math.floor(Math.random()*zaehler); 109 110 int zweiterzaehler; 111 zweiterzaehler=0; 112 for (i=0; i<=2; i++) 113 for (j=0; j<=2; j++) 114 if (Belegung[i][j] == leer) { 115 if (zweiterzaehler == zufall) { 116 if (wert == kreischen) { 117 Belegung[i][j] = kreischen; 118 } 119 else { 120 Belegung[i][j] = kreuzchen; 121 } 122 return; 123 } 124 else zweiterzaehler++; 125 } 126 } 127 128 129 public void ichsetzte(int ich) { /* Setzstrategie, 130 erst guckt man, ob man slebst gewinnen kann, 131 dann, ob der andere gewinnen kann und setzt sich dort hin, 132 tritt kein Fall ein, setzt man sich auf eine zufällige 133 Position */ 134 boolean gesetzt1 = false; 135 for (int m = 0; m <= 2; m++) { 136 for (int n = 0; n <= 2; n++) { 137 if ((Belegung[m][n] == leer) && (gesetzt1 == false)) { 138 Belegung[m][n] = ich; 139 if (gewinn() == ich) { 140 if (ich == kreischen) { 141 gesetzt1 = true; 142 } 143 else { 144 gesetzt1 = true; 145 } 146 } 147 else 148 Belegung[m][n] = leer; 149 150 } 151 } 152 } 153 154 155 if (gesetzt1 == false) { 156 int nichtich; 157 boolean gesetzt2 = false; 158 if (ich == kreischen) 159 nichtich = kreuzchen; 160 else 161 nichtich = kreischen; 162 163 164 for (int m = 0; m <= 2; m++) { 165 for (int n = 0; n <= 2; n++) { 166 if ((Belegung[m][n] == leer) && (gesetzt2 == false)) { 167 Belegung[m][n] = nichtich; 168 if (gewinn() == nichtich) { 169 if (ich == kreischen) { 170 Belegung[m][n] = ich; 171 gesetzt2 = true; 172 } 173 else { 174 Belegung[m][n] = ich; 175 gesetzt2 = true; 176 } 177 178 } 179 else 180 Belegung[m][n] = leer; 181 } 182 } 183 } 184 185 if (gesetzt2 == false) { 186 alleszufaellig(ich); 187 } 188 } 189 190 try { 191 192 Thread.sleep(1000); 193 194 } catch (Exception e) { e.printStackTrace(); } 195 196 197 } 198 199 200 class Spielfeld extends Canvas { 201 TicTac mypr; 202 int x, y; 203 204 Spielfeld(int anfang1, int anfang2, Frame myframe) { 205 x = anfang1; 206 y = anfang2; 207 setSize(300,300); 208 setBackground(Color.white); 209 mypr = (TicTac)myframe; 210 211 } 212 213 public void paint(Graphics g) { 214 g.setColor(Color.white); 215 g.fillRect(x,y,300,300); 216 g.setColor(Color.blue); 217 g.drawLine(x+100,y,x+100,y+300); 218 g.drawLine(x+200,y,x+200,y+300); 219 g.drawLine(x+300,y,x+300,y+300); 220 g.drawLine(x+100,y,x+100,y+300); 221 g.drawLine(x,y+100,x+300,y+100); 222 g.drawLine(x,y+200,x+300,y+200); 223 g.drawLine(x,y+300,x+300,y+300); // Spielfeld wird gezeichnet 224 225 226 int weristdran; 227 int zufall = (int) Math.floor(Math.random()*2); 228 229 if (zufall == 1) 230 weristdran = kreischen; 231 else 232 weristdran = kreuzchen; 233 234 235 236 while ((gewinn() == leer) && (nochwelchefrei() != 0)) { 237 ichsetzte(weristdran); 238 239 for (int i = 0; i <= 2; i++) { 240 for (int j = 0; j <= 2; j++) { 241 if (Belegung[i][j] == kreischen) { 242 g.setColor(Color.green); 243 g.drawOval(i*100+10,j*100+10,80,80); 244 } 245 if (Belegung[i][j] == kreuzchen) { 246 g.setColor(Color.green); 247 g.drawLine(i*100+10,j*100+10,i*100+90,j*100+90); 248 g.drawLine(i*100+90,j*100+10,i*100+10,j*100+90); 249 } 250 } 251 } 252 253 if (weristdran == kreischen) 254 weristdran = kreuzchen; 255 else 256 weristdran = kreischen; 257 } 258 259 260 int wer; 261 for (int j = 1; j <=2; j ++) { 262 wer = j; 263 for (int i = 0; i<=2; i++) { 264 if ((Belegung[i][0] == wer) && (Belegung[i][1] == wer) && (Belegung[i][2] == wer)) { // die Zeilen 265 if (wer == kreischen) { 266 267 g.setColor(Color.red); 268 g.drawOval(i*100+9,0+9,82,82); 269 g.drawOval(i*100+10,0+10,80,80); 270 g.drawOval(i*100+11,0+11,78,78); 271 g.drawOval(i*100+9,100+9,82,82); 272 g.drawOval(i*100+10,100+10,80,80); 273 g.drawOval(i*100+11,100+11,78,78); 274 g.drawOval(i*100+9,200+9,82,82); 275 g.drawOval(i*100+10,200+10,80,80); 276 g.drawOval(i*100+11,200+11,78,78); 277 278 } 279 else { 280 g.setColor(Color.red); 281 g.drawLine(i*100+11,0*100+9,i*100+91,0*100+89); 282 g.drawLine(i*100+89,0*100+9,i*100+11,0*100+91); 283 g.drawLine(i*100+10,0*100+10,i*100+90,0*100+90); 284 g.drawLine(i*100+90,0*100+10,i*100+10,0*100+90); 285 g.drawLine(i*100+9,0*100+11,i*100+89,0*100+91); 286 g.drawLine(i*100+91,0*100+11,i*100+9,0*100+89); 287 g.drawLine(i*100+11,100+9,i*100+91,100+89); 288 g.drawLine(i*100+89,100+9,i*100+11,100+91); 289 g.drawLine(i*100+10,100+10,i*100+90,100+90); 290 g.drawLine(i*100+90,100+10,i*100+10,100+90); 291 g.drawLine(i*100+9,100+11,i*100+89,100+91); 292 g.drawLine(i*100+91,100+11,i*100+9,100+89); 293 g.drawLine(i*100+11,200+9,i*100+91,200+89); 294 g.drawLine(i*100+89,200+9,i*100+11,200+91); 295 g.drawLine(i*100+10,200+10,i*100+90,200+90); 296 g.drawLine(i*100+90,200+10,i*100+10,200+90); 297 g.drawLine(i*100+9,200+11,i*100+89,200+91); 298 g.drawLine(i*100+91,200+11,i*100+9,200+89); 299 300 301 } 302 } 303 } 304 305 for (int i = 0; i<=2; i++) { 306 if ((Belegung[0][i] == wer) && (Belegung[1][i] == wer) && (Belegung[2][i] == wer)) { // die Spalten 307 if (wer == kreischen) { 308 309 g.setColor(Color.red); 310 g.drawOval(0+9,i+9,82,82); 311 g.drawOval(0+10,i+10,80,80); 312 g.drawOval(0+11,i+11,78,78); 313 g.drawOval(100+9,i+9,82,82); 314 g.drawOval(100+10,i+10,80,80); 315 g.drawOval(100+11,i+11,78,78); 316 g.drawOval(200+9,i+9,82,82); 317 g.drawOval(200+10,i+10,80,80); 318 g.drawOval(200+11,i+11,78,78); 319 320 } 321 else { 322 g.setColor(Color.red); 323 g.drawLine(0*100+11,i*100+9,0*100+91,i*100+89); 324 g.drawLine(0*100+89,i*100+9,0*100+11,i*100+91); 325 g.drawLine(0*100+10,i*100+10,0*100+90,i*100+90); 326 g.drawLine(0*100+90,i*100+10,0*100+10,i*100+90); 327 g.drawLine(0*100+9,i*100+11,0*100+89,i*100+91); 328 g.drawLine(0*100+91,i*100+11,0*100+9,i*100+89); 329 g.drawLine(1*100+11,i*100+9,1*100+91,i*100+89); 330 g.drawLine(1*100+89,i*100+9,1*100+11,i*100+91); 331 g.drawLine(1*100+10,i*100+10,1*100+90,i*100+90); 332 g.drawLine(1*100+90,i*100+10,1*100+10,i*100+90); 333 g.drawLine(1*100+9,i*100+11,1*100+89,i*100+91); 334 g.drawLine(1*100+91,i*100+11,1*100+9,i*100+89); 335 g.drawLine(2*100+11,i*100+9,2*100+91,i*100+89); 336 g.drawLine(2*100+89,i*100+9,2*100+11,i*100+91); 337 g.drawLine(2*100+10,i*100+10,2*100+90,i*100+90); 338 g.drawLine(2*100+90,i*100+10,2*100+10,i*100+90); 339 g.drawLine(2*100+9,i*100+11,2*100+89,i*100+91); 340 g.drawLine(2*100+91,i*100+11,2*100+9,i*100+89); 341 342 343 344 } 345 } 346 } 347 348 if ((Belegung[0][0] == wer) && (Belegung[1][1] == wer) && (Belegung[2][2] == wer)) { // die 1. Diagonale 349 if (wer == kreischen) { 350 351 g.setColor(Color.red); 352 g.drawOval(0+9,0+9,82,82); 353 g.drawOval(0+10,0+10,80,80); 354 g.drawOval(0+11,0+11,78,78); 355 g.drawOval(100+9,100+9,82,82); 356 g.drawOval(100+10,100+10,80,80); 357 g.drawOval(100+11,100+11,78,78); 358 g.drawOval(200+9,200+9,82,82); 359 g.drawOval(200+10,200+10,80,80); 360 g.drawOval(200+11,200+11,78,78); 361 362 } 363 else { 364 g.setColor(Color.red); 365 g.drawLine(0*100+11,0*100+9,0*100+91,0*100+89); 366 g.drawLine(0*100+89,0*100+9,0*100+11,0*100+91); 367 g.drawLine(0*100+10,0*100+10,0*100+90,0*100+90); 368 g.drawLine(0*100+90,0*100+10,0*100+10,0*100+90); 369 g.drawLine(0*100+9,0*100+11,0*100+89,0*100+91); 370 g.drawLine(0*100+91,0*100+11,0*100+9,0*100+89); 371 g.drawLine(1*100+11,1*100+9,1*100+91,1*100+89); 372 g.drawLine(1*100+89,1*100+9,1*100+11,1*100+91); 373 g.drawLine(1*100+10,1*100+10,1*100+90,1*100+90); 374 g.drawLine(1*100+90,1*100+10,1*100+10,1*100+90); 375 g.drawLine(1*100+9,1*100+11,1*100+89,1*100+91); 376 g.drawLine(1*100+91,1*100+11,1*100+9,1*100+89); 377 g.drawLine(2*100+11,2*100+9,2*100+91,2*100+89); 378 g.drawLine(2*100+89,2*100+9,2*100+11,2*100+91); 379 g.drawLine(2*100+10,2*100+10,2*100+90,2*100+90); 380 g.drawLine(2*100+90,2*100+10,2*100+10,2*100+90); 381 g.drawLine(2*100+9,2*100+11,2*100+89,2*100+91); 382 g.drawLine(2*100+91,2*100+11,2*100+9,2*100+89); 383 384 385 } 386 387 } 388 389 if ((Belegung[0][2] == wer) && (Belegung[1][1] == wer) && (Belegung[2][0] == wer)) { // die 2. Diagonale 390 if (wer == kreischen) { 391 392 g.setColor(Color.red); 393 g.drawOval(0+9,200+9,82,82); 394 g.drawOval(0+10,200+10,80,80); 395 g.drawOval(0+11,200+11,78,78); 396 g.drawOval(100+9,100+9,82,82); 397 g.drawOval(100+10,100+10,80,80); 398 g.drawOval(100+11,100+11,78,78); 399 g.drawOval(200+9,0+9,82,82); 400 g.drawOval(200+10,0+10,80,80); 401 g.drawOval(200+11,0+11,78,78); 402 403 } 404 else { 405 406 g.setColor(Color.red); 407 g.drawLine(0+11,200+9,0+91,200+89); 408 g.drawLine(0+89,200+9,0+11,200+91); 409 g.drawLine(0+10,200+10,0+90,200+90); 410 g.drawLine(0+90,200+10,0+10,200+90); 411 g.drawLine(0+9,200+11,0+89,200+91); 412 g.drawLine(0+91,200+11,0+9,200+89); 413 g.drawLine(100+11,100+9,100+91,100+89); 414 g.drawLine(100+89,100+9,100+11,100+91); 415 g.drawLine(100+10,100+10,100+90,100+90); 416 g.drawLine(100+90,100+10,100+10,100+90); 417 g.drawLine(100+9,100+11,100+89,100+91); 418 g.drawLine(100+91,100+11,100+9,100+89); 419 g.drawLine(200+11,0+9,200+91,0+89); 420 g.drawLine(200+89,0+9,200+11,0+91); 421 g.drawLine(200+10,0+10,200+90,0+90); 422 g.drawLine(200+90,0+10,200+10,0+90); 423 g.drawLine(200+9,0+11,200+89,0+91); 424 g.drawLine(200+91,0+11,200+9,0+89); 425 426 427 } 428 } 429 } 430 431 432 433 434 } 435 436 437 } 438 439 public static void main (String args[]) { 440 TicTac Ho = new TicTac(); 441 Ho.setSize(400,400); 442 Ho.show(); 443 } 444 445 } 446 447

Letzte Änderung: 26.04.2012: 17:53:41 von X. Rendtel

Creative Commons Lizenzvertrag
Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.
Beruht auf einem Inhalt unter www.rendtel.de.