Tic-Tac-Toe als Applet

Ach ja, irgendwo ist noch ein Fehler im Programm )-: Bei der Spieltaktik entstehen noch ab und an Setzfehler. Ich habe diese aber nicht gefunden und habe momentan auch nicht die Zeit dazu nach Ihnen zu suchen. Vielleicht setzt sich ja noch jemand anders damit auseinander und findet ihn (-: Für eine Mail wäre ich dann sehr dankbar.

Programmcode

 TicTacToe.java 
1 import java.applet.*; 2 import java.awt.*; 3 4 public class TicTacToe extends Applet { 5 6 7 final int leer = 0; 8 final int kreischen = 1; 9 final int kreuzchen = 2; 10 11 int[][] Belegung = {{leer, leer, leer}, 12 {leer, leer, leer}, 13 {leer, leer, leer}}; 14 15 16 public void paintSpielfeld(Graphics g, int x, int y) { // Spielfeld 3 * 3 17 g.setColor(Color.white); 18 g.fillRect(x,y,300,300); 19 g.setColor(Color.blue); 20 g.drawLine(x+100,y,x+100,y+300); 21 g.drawLine(x+200,y,x+200,y+300); 22 g.drawLine(x+300,y,x+300,y+300); 23 g.drawLine(x+100,y,x+100,y+300); 24 g.drawLine(x,y+100,x+300,y+100); 25 g.drawLine(x,y+200,x+300,y+200); 26 g.drawLine(x,y+300,x+300,y+300); 27 } 28 29 30 public void paintKreis(Graphics g, int x1, int y1) { // ein Kreis wird gezeichnet 31 g.setColor(Color.green); 32 g.drawOval(x1+10,y1+10,80,80); 33 34 } 35 36 public void paintBelegung(Graphics g) { 37 for (int i = 0; i <= 2; i++) { 38 for (int j = 0; j <= 2; j++) { 39 if (Belegung[i][j] == kreischen) { 40 paintKreis(g, i*100, j*100); 41 } 42 if (Belegung[i][j] == kreuzchen) { 43 paintKreuz(g, i*100, j*100); 44 } 45 } 46 } 47 } 48 49 50 public void paintKreuz(Graphics g, int x1, int y1) { // Kreuz zeichnen 51 g.setColor(Color.green); 52 g.drawLine(x1+10,y1+10,x1+90,y1+90); 53 g.drawLine(x1+90,y1+10,x1+10,y1+90); 54 } 55 56 57 58 public void paintKreisgew(Graphics g, int x1, int y1) { // Kreis zeichnen, wenn er gewonnen hat 59 g.setColor(Color.red); 60 g.drawOval(x1+9,y1+9,82,82); 61 g.drawOval(x1+10,y1+10,80,80); 62 g.drawOval(x1+11,y1+11,78,78); 63 } 64 65 66 67 public void paintKreuzgew(Graphics g, int x1, int y1) { // Kreuz zeichnen, wenn Kreuz gewonnen 68 g.setColor(Color.red); 69 g.drawLine(x1+11,y1+9,x1+91,y1+89); 70 g.drawLine(x1+89,y1+9,x1+11,y1+91); 71 g.drawLine(x1+10,y1+10,x1+90,y1+90); 72 g.drawLine(x1+90,y1+10,x1+10,y1+90); 73 g.drawLine(x1+9,y1+11,x1+89,y1+91); 74 g.drawLine(x1+91,y1+11,x1+9,y1+89); 75 } 76 77 78 public int gewinn() { // hat jamand gewonnen? 79 int wer; 80 81 for (int j = 1; j <=2; j ++) { 82 wer = j; 83 for (int i = 0; i<=2; i++) { 84 if ((Belegung[i][0] == wer) && (Belegung[i][1] == wer) && (Belegung[i][2] == wer)) // die Zeilen 85 return wer; 86 } 87 88 for (int i = 0; i<=2; i++) { 89 if ((Belegung[0][i] == wer) && (Belegung[1][i] == wer) && (Belegung[2][i] == wer)) // die Spalten 90 return wer; 91 } 92 93 if ((Belegung[0][0] == wer) && (Belegung[1][1] == wer) && (Belegung[2][2] == wer)) { // die 1. Diagonale 94 return wer; 95 } 96 97 if ((Belegung[0][2] == wer) && (Belegung[1][1] == wer) && (Belegung[2][0] == wer)) { // die 2. Diagonale 98 return wer; 99 } 100 } 101 return leer; 102 } 103 104 105 public int nochwelchefrei() { // sind noch Felder frei? 106 int zaehler = 0; 107 int i,j; 108 109 for (i = 0; i<=2; i++) { 110 for (j = 0; j<=2; j++) { 111 if (Belegung[i][j] == leer) 112 zaehler++; 113 } 114 } 115 return zaehler; 116 } 117 118 119 public void alleszufaellig(Graphics g, int wert) { // eine zufällige Position wird ausgesucht 120 int zaehler = 0; 121 int i,j; 122 123 for (i = 0; i<=2; i++) { 124 for (j = 0; j<=2; j++) { 125 if (Belegung[i][j] == leer) 126 zaehler++; 127 } 128 } 129 130 int zufall = (int) Math.floor(Math.random()*zaehler); 131 132 int zweiterzaehler; 133 zweiterzaehler=0; 134 for (i=0; i<=2; i++) 135 for (j=0; j<=2; j++) 136 if (Belegung[i][j] == leer) { 137 if (zweiterzaehler == zufall) { 138 if (wert == kreischen) { 139 paintKreis(g, i*100, j*100); 140 Belegung[i][j] = kreischen; 141 } 142 else { 143 paintKreuz(g, i*100, j*100); 144 Belegung[i][j] = kreuzchen; 145 } 146 return; 147 } 148 else zweiterzaehler++; 149 } 150 } 151 152 153 public void wowurdegewonnen(Graphics g) { // suchen, wo gewonnen uwrde und dort zeichnen 154 int wer; 155 for (int j = 1; j <=2; j ++) { 156 wer = j; 157 for (int i = 0; i<=2; i++) { 158 if ((Belegung[i][0] == wer) && (Belegung[i][1] == wer) && (Belegung[i][2] == wer)) { // die Zeilen 159 if (wer == kreischen) { 160 paintKreisgew(g, i* 100, 0 * 100); 161 paintKreisgew(g, i* 100, 1 * 100); 162 paintKreisgew(g, i* 100, 2 * 100); 163 } 164 else { 165 paintKreuzgew(g, i* 100, 0 * 100); 166 paintKreuzgew(g, i* 100, 1 * 100); 167 paintKreuzgew(g, i* 100, 2 * 100); 168 169 } 170 } 171 } 172 173 for (int i = 0; i<=2; i++) { 174 if ((Belegung[0][i] == wer) && (Belegung[1][i] == wer) && (Belegung[2][i] == wer)) { // die Spalten 175 if (wer == kreischen) { 176 paintKreisgew(g, 0* 100, i * 100); 177 paintKreisgew(g, 1* 100, i * 100); 178 paintKreisgew(g, 2* 100, i * 100); 179 } 180 else { 181 paintKreuzgew(g, 0* 100, i * 100); 182 paintKreuzgew(g, 1* 100, i * 100); 183 paintKreuzgew(g, 2* 100, i * 100); 184 185 } 186 } 187 } 188 189 if ((Belegung[0][0] == wer) && (Belegung[1][1] == wer) && (Belegung[2][2] == wer)) { // die 1. Diagonale 190 if (wer == kreischen) { 191 paintKreisgew(g, 0* 100, 0 * 100); 192 paintKreisgew(g, 1* 100, 1 * 100); 193 paintKreisgew(g, 2* 100, 2 * 100); 194 } 195 else { 196 paintKreuzgew(g, 0* 100, 0 * 100); 197 paintKreuzgew(g, 1* 100, 1 * 100); 198 paintKreuzgew(g, 2* 100, 2 * 100); 199 200 } 201 202 } 203 204 if ((Belegung[0][2] == wer) && (Belegung[1][1] == wer) && (Belegung[2][0] == wer)) { // die 2. Diagonale 205 if (wer == kreischen) { 206 paintKreisgew(g, 0* 100, 2 * 100); 207 paintKreisgew(g, 1* 100, 1 * 100); 208 paintKreisgew(g, 2* 100, 0 * 100); 209 } 210 else { 211 paintKreuzgew(g, 0* 100, 2 * 100); 212 paintKreuzgew(g, 1* 100, 1 * 100); 213 paintKreuzgew(g, 2* 100, 0 * 100); 214 215 } 216 } 217 } 218 } 219 220 221 222 public void ichsetzte(Graphics g, int ich) { /* Setzstrategie, 223 erst guckt man, ob man slebst gewinnen kann, 224 dann, ob der andere gewinnen kann und setzt sich dort hin, 225 tritt kein Fall ein, setzt man sich auf eine zufällige 226 Position */ 227 boolean gesetzt1 = false; 228 for (int m = 0; m <= 2; m++) { 229 for (int n = 0; n <= 2; n++) { 230 if ((Belegung[m][n] == leer) && (gesetzt1 == false)) { 231 Belegung[m][n] = ich; 232 if (gewinn() == ich) { 233 if (ich == kreischen) { 234 paintKreis(g, m*100, n*100); 235 gesetzt1 = true; 236 } 237 else { 238 paintKreuz(g, m*100, n*100); 239 gesetzt1 = true; 240 } 241 } 242 else 243 Belegung[m][n] = leer; 244 245 } 246 } 247 } 248 249 250 if (gesetzt1 == false) { 251 int nichtich; 252 boolean gesetzt2 = false; 253 if (ich == kreischen) 254 nichtich = kreuzchen; 255 else 256 nichtich = kreischen; 257 258 259 for (int m = 0; m <= 2; m++) { 260 for (int n = 0; n <= 2; n++) { 261 if ((Belegung[m][n] == leer) && (gesetzt2 == false)) { 262 Belegung[m][n] = nichtich; 263 if (gewinn() == nichtich) { 264 if (ich == kreischen) { 265 paintKreis(g, m*100, n*100); 266 Belegung[m][n] = ich; 267 gesetzt2 = true; 268 } 269 else { 270 paintKreuz(g, m*100, n*100); 271 Belegung[m][n] = ich; 272 gesetzt2 = true; 273 } 274 275 } 276 else 277 Belegung[m][n] = leer; 278 } 279 } 280 } 281 282 if (gesetzt2 == false) { 283 alleszufaellig(g, ich); 284 } 285 } 286 287 try { 288 289 Thread.sleep(1000); 290 291 } catch (Exception e) { e.printStackTrace(); } 292 293 294 } 295 296 297 public void paint (Graphics g) { 298 paintSpielfeld(g, 0, 0); // zeichnen des Spielfeldes 299 300 int weristdran; 301 int zufall = (int) Math.floor(Math.random()*2); 302 303 if (zufall == 1) 304 weristdran = kreischen; 305 else 306 weristdran = kreuzchen; 307 308 309 310 311 while ((gewinn() == leer) && (nochwelchefrei() != 0)) { 312 ichsetzte(g, weristdran); 313 if (weristdran == kreischen) 314 weristdran = kreuzchen; 315 else 316 weristdran = kreischen; 317 } 318 319 paintBelegung(g); 320 321 wowurdegewonnen(g); 322 323 324 325 } 326 327 328 329 } 330

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.