Components and supplies
Piezo Buzzer
8*8 led matrix
Push Button
Arduino Nano
Tools and machines
Soldering kit
Apps and platforms
Arduino IDE
Project description
Code
Arduino code
cpp
connect4
1/* Vier gewinnt - entweder zwei Spieler (linke Richtungstaste)oder Spieler gegen MCU (rechte Richtungstaste) 2 * Bei Spieler gegen Spieler wird die Anfangsfarbe bei jedem neuer Spiel gewechselt. 3 * Bei Spieler gegen Rechner hat der Spieler immer rot und beginnt das erste Spiel. Danach beginnt immer der Verlierer. 4 * Man benötigt: https://www.az-delivery.de/products/u-64-led-panel an 5V, GND und Pin 6 5 * https://www.az-delivery.de/products/nano-v3-0-pro 6 * sowie Spiele-Controller mit 3 Tastern (Buttons) an folgenden Pins: 7 * rechts = 10, links = 9 und runter = 8 8 * Es gibt die Möglichkeit, sich die Auswertungstabellen auf dem Bildschirm anzeigen zu lassen. 9 * Dazu muss man in der Zeile 704 das Kommentarzeichen entfernen. 10 * Allerdings wird dann das Programm etwas langsamer. 11 * Am Ende des Programms ist dazu noch eine kurze Erklärung. 12 * HUK Vier_gewinnt_duo_4 16.10.2021 */ 13 14#include <Adafruit_NeoPixel.h> 15int anzahl = 64; 16Adafruit_NeoPixel strip(anzahl, 6, NEO_GRB + NEO_KHZ800); 17#include <NewTone.h> 18#define TONE_PIN 2 19long rot = strip.Color(5, 0, 0); long gruen = strip.Color(0, 5, 0); long farbe = 0; 20 21// Variable Ablauf 22byte zw1 = 0; int zw2 = 0; // werden in "Ausgabe Spielfeld" benutzt 23byte zw3 = 0; // wird in Absenken der Spielsteine benutzt 24byte zw4 = 0; // Startfeld beim Testen, Spielstand 25byte zw5 = 0; // Zaehlwert innere Schleife, testet 4 Felder, 26byte zw6 = 0; // Zaehlwert mittlere Schleife, testet eine Spalte, Testen Spielstand 27byte zw7 = 0; // Zaehlwert aeußere Schleife, testet alle Spalten, Testen Spielstand 28byte zw8 = 0; // Gefallene Steine 29byte zw9 = 0; // Ausgabe Siegerfarbe 30byte zw10 = 0; //Loeschen Anzeige und Spielfeld 31byte zw11 = 0; //Blinken Siegersteine 32long farbe_1 = 0; long farbe_2 = 0; // Siegerfarbe 33byte position_1 = 0; byte position_2 = 0; byte position_3 = 0; byte position_4 = 0; //Position Gewinnersteine 34byte ergebnis_zw1 = 0; // aeußere Schleife wird zum Testen des Programms benutzt 35byte ergebnis_zw2 = 0; // innere Schleif wird zum Testen des Programms benutzt 36 37byte rechts = 10; byte links = 9; byte runter = 8; // Nummer der benoetigten Ports 38 39byte richtung = 0 ; // 1 -> rechts; 2 -> links; 3 -> runter 40byte status_start = 1; // 1 -> rot; 2 -> gruen, gilt nur fur Spieler gegen Spieler 41byte status_spiel = 1 ; // 1 -> rot; 2 -> gruen, gilt nur fur Spieler gegen Spieler 42byte status_spiel_spieler = 0 ; //Spielstatus fur moegliche Zuege des Spielers 43byte position_0 = 0; // Zeiger fuer Spielfeld 44byte test_rot = 0; byte test_gruen = 0; byte sieger = 0; // Benoetigt zum Ermitteln des Siegers 45 46// Variable Rechner Ermittlung naechter Spielzug 47 48byte r_zw1 = 0; // Zaehlwert zum Kopieren der Spielfelder 49byte r_zw2 = 0; // 8 Versuche Rechner 50byte r_zw3 = 0; // Adresse des vom Rechner gesetzten Stein 51byte r_zw4 = 0; // 8 mögliche Versuche Spieler 52byte r_zw5 = 0; // Adresse des vom Rechner gesetzten Stein fuer Versuch Spieler 53byte r_zw6 = 0; // Zwischenspeicher Auswertung Test 54byte r_zw7 = 0; // Schritte nach Test 55byte r_zw8 = 0; // Zaehlwert fuer Auswertung Test 56byte r_zw9 = 0; // Zwischenspeicher fuer zw4 57byte r_zw10 = 0; // Auswertung Tabelle auswertung_vergleich (Gruppe in Zeile 6) 58byte r_zw11_1 = 0; // Auswertung Tabelle auswertung_rot 59byte r_zw11_2 = 0; // Auswertung Tabelle auswertung_rot 60byte r_zw12 = 0; // Eintrag Ergebnis der Analyse in auswertung_vergleich, Ermittlung bester Zug 61byte r_zw12_1 = 0; // Eintrag Ergebnis der Analyse in auswertung_vergleich, Ermittlung bester Zug 62byte r_zw14 = 0; // Schritte zum Absenken 63byte max_rot = 0; // Maximalwert einer Zeile in Tabelle auswertung_rot 64byte max_zug_1 = 0; // Ermittelt besten Zug 65byte max_gruen_2 = 0; // Maximale 2-Gruppen bei einem Zug 66byte max_gruen_3 = 0; // Maximale 3-Gruppen bei einem Zug 67byte max_gruen_4 = 0; // Maximale 4-Gruppen bei einem Zug 68byte r_test_rot = 0; byte r_test_gruen = 0; // Test Spielstand 69byte r_test_gruen_1 = 0; byte r_test_gruen_2 = 0; byte r_test_gruen_3 = 0; byte r_test_gruen_4 = 0; // Test Spielstand nach Kettenlaenge 70byte spiel_art = 0; // 1-> gegen Rechner, 2 -> Spieler gegen Spieler; 71byte r_erster_zug = 0; // 0 -> Spieler beginnt, 1 -> Rechner beginnt 72byte r_anzahl_zuege = 0 ; //Anzahl Zuege bei Spieler gegen Rechner 73byte r_alles3 = 0; // Zwischenspeicher fuer Sonderfall in der Auswertung 74byte r_alles4 = 0; // Zwischenspeicher fuer Sonderfall in der Auswertung 75byte zufall = 0; // wird benötigt um unbestimmten Anfang zu erreichen 76 77// 0 -> nicht belegt; 1 -> rot; 2 -> gruen 78byte spielfeld [64] = { 79 1, 0, 0, 0, 0, 0, 0, 0, 80 0, 0, 0, 0, 0, 0, 0, 0, 81 0, 0, 0, 0, 0, 0, 0, 0, 82 0, 0, 0, 0, 0, 0, 0, 0, 83 0, 0, 0, 0, 0, 0, 0, 0, 84 0, 0, 0, 0, 0, 0, 0, 0, 85 0, 0, 0, 0, 0, 0, 0, 0, 86 0, 0, 0, 0, 0, 0, 0, 0 87}; 88 89// Kopie des Spielfeldes, wird benoetigt bei Rechner gegen Spieler 90// 0 -> nicht belegt; 1 -> rot; 2 -> gruen 91byte spielfeld_r1 [64] = { 92 0, 0, 0, 0, 0, 0, 0, 0, 93 0, 0, 0, 0, 0, 0, 0, 0, 94 0, 0, 0, 0, 0, 0, 0, 0, 95 0, 0, 0, 0, 0, 0, 0, 0, 96 0, 0, 0, 0, 0, 0, 0, 0, 97 0, 0, 0, 0, 0, 0, 0, 0, 98 0, 0, 0, 0, 0, 0, 0, 0, 99 0, 0, 0, 0, 0, 0, 0, 0 100}; 101 102// In dem Feld wird die Auswertung des Spielfeldes und die Schlussfolgerungen abgelegt (Rechner gegen Spieler) 103byte auswertung_vergleich [12] [10] = { 104 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 105 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 106 {0, 0, 0, 0, 0, 0, 0, 0, 0, 2}, 107 {0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, 108 {0, 0, 0, 0, 0, 0, 0, 0, 0, 4}, 109 {0, 0, 0, 0, 0, 0, 0, 0, 0, 5}, 110 {0, 0, 0, 0, 0, 0, 0, 0, 0, 6}, 111 {0, 0, 0, 0, 0, 0, 0, 0, 0, 7}, 112 {0, 0, 0, 0, 0, 0, 0, 0, 0, 8}, 113 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 114 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 115 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 116}; 117 118// Position Rechner, 8 mal Gegner 119byte auswertung_rot [10] [8] = { 120 {0, 0, 0, 0, 0, 0, 0, 0}, 121 {0, 0, 0, 0, 0, 0, 0, 0}, 122 {0, 0, 0, 0, 0, 0, 0, 0}, 123 {0, 0, 0, 0, 0, 0, 0, 0}, 124 {0, 0, 0, 0, 0, 0, 0, 0}, 125 {0, 0, 0, 0, 0, 0, 0, 0}, 126 {0, 0, 0, 0, 0, 0, 0, 0}, 127 {0, 0, 0, 0, 0, 0, 0, 0}, 128 {0, 0, 0, 0, 0, 0, 0, 0}, 129 {0, 0, 0, 0, 0, 0, 0, 0}, 130}; 131 132void setup() { 133 134 Serial.begin(9600); 135 136 strip.begin(); 137 strip.show(); // Initialize all pixels to 'off' 138 139 pinMode(rechts, INPUT); digitalWrite (rechts, HIGH); 140 pinMode(links, INPUT); digitalWrite (links, HIGH); 141 pinMode(runter, INPUT); digitalWrite (runter, HIGH); 142 143 // -------------------- Spielauswahl links zu zweit, rechts gegen Rechner -------------------- 144 145 strip.setPixelColor (63 - 25, 10, 0, 0); strip.setPixelColor (63 - 26, 0, 10, 0); strip.setPixelColor (63 - 30, 10, 0, 0); 146 strip.show(); 147 148 do { 149 if ( digitalRead(rechts) == LOW) { 150 spiel_art = 1; 151 NewTone(TONE_PIN,600); 152 delay(1000); 153 noNewTone(TONE_PIN); 154 155 } 156 if ( digitalRead(links) == LOW) { 157 spiel_art = 2; 158 NewTone(TONE_PIN,300); 159 delay(1000); 160 noNewTone(TONE_PIN); 161 } 162 } while (spiel_art == 0); 163 164 strip.setPixelColor (63 - 25, 0, 0, 0); strip.setPixelColor (63 - 26, 0, 0, 0); strip.setPixelColor (63 - 30, 0, 0, 0); 165 strip.show(); delay(1000); 166 167 ausgabe_spielfeld (); 168} 169 170void loop() { 171 172 // -------------------- Abfrage Tastatur und Sprung in entsprechendes Programm -------------------- 173 // -------------------- Nutzung in beiden Spielarten -------------------- 174 175 176 177 do { 178 179 zufall = random(1, 20); // unbestimmter Anfang 180 181 if (digitalRead(rechts) == LOW && digitalRead(links) == LOW) { 182 zw8 = 56; // Unentschieden 183 test_spielende (); 184 185 }; 186 if ( digitalRead(rechts) == LOW) { 187 richtung = 1; rechts_0 (); 188 189 } 190 if ( digitalRead(links) == LOW) { 191 richtung = 2; links_0 (); 192 193 } 194 if ( digitalRead(runter) == LOW ) { 195 if (spielfeld [position_0 + 8] == 0) { 196 richtung = 3; 197 runter_0 (); zw8 ++; // Anzahl Durchlaeufe + 1 198 test_spielende (); 199 200 // -------------------- Aufruf bei Rechner gegen Spieler -------------------- 201 202 if (spiel_art == 1) { 203 rechner (); test_spielende (); 204 }; 205 }; 206 } 207 } 208 while ( richtung == 0); 209 richtung = 0; // Loeschen der Richtung 210 211 ausgabe_spielfeld (); 212 delay(300); 213} 214 215// -------------------- Programmteile Spiel Rechner -------------------- 216 217// -------------- Erster Programmteil der aufgerufen wird bei Spieler gegen Rechner -------------------------- 218void rechner () { 219 220 // -------------------- Laden spielfeld_r1; -------------------- 221 r_zw1 = 0; 222 do { 223 spielfeld_r1 [r_zw1] = spielfeld [r_zw1]; 224 r_zw1++; 225 } 226 while ( r_zw1 != 64); 227 228 // -------------------- 8 Versuche Rechner, setzen einen eigenen Stein, Rechner immer gruen -------------------- 229 r_zw2 = 0; r_zw6 = 0; r_zw7 = 0; r_zw8 = 0; 230 231 do { 232 r_zw3 = 0; 233 if (spielfeld_r1 [r_zw2 + 8] != 0) { 234 r_zw3 = 0; // Es wurde kein Stein gesetzt 235 auswertung_vergleich [4] [r_zw2] = 0; 236 r_zw2 ++; 237 } 238 else { 239 auswertung_vergleich [4] [r_zw2] = 1; 240 if (spielfeld_r1 [r_zw2 + 16] != 0) { 241 spielfeld_r1 [r_zw2 + 8] = 2; r_zw3 = r_zw2 + 8; r_zw2 ++; 242 } 243 else { 244 if ( spielfeld_r1 [ r_zw2 + 24] != 0) { 245 spielfeld_r1 [r_zw2 + 16] = 2; r_zw3 = r_zw2 + 16; r_zw2 ++; 246 } else { 247 if ( spielfeld_r1 [ r_zw2 + 32] != 0) { 248 spielfeld_r1 [r_zw2 + 24] = 2; r_zw3 = r_zw2 + 24; r_zw2 ++; 249 } else { 250 if ( spielfeld_r1 [ r_zw2 + 40] != 0) { 251 spielfeld_r1 [r_zw2 + 32] = 2; r_zw3 = r_zw2 + 32; r_zw2 ++; 252 } else { 253 if ( spielfeld_r1 [ r_zw2 + 48] != 0) { 254 spielfeld_r1 [r_zw2 + 40] = 2; r_zw3 = r_zw2 + 40; r_zw2 ++; 255 } else { 256 if ( spielfeld_r1 [ r_zw2 + 56] != 0) { 257 spielfeld_r1 [r_zw2 + 48] = 2; r_zw3 = r_zw2 + 48; r_zw2 ++; 258 } else { 259 spielfeld_r1 [r_zw2 + 56] = 2; r_zw3 = r_zw2 + 56; r_zw2 ++; 260 }; 261 }; 262 }; 263 } 264 }; 265 }; 266 }; // Ende "else" absenken ein eigener Stein 267 268 // -------------------- Umschreiben Anzahl 1, 2, 3 und 4-Gruppen. 1 wird nicht ausgewertet. ---------- 269 test_spielstand_gruen (); 270 auswertung_vergleich [0] [r_zw2 - 1] = r_test_gruen_1; auswertung_vergleich [1] [r_zw2 - 1] = r_test_gruen_2; 271 auswertung_vergleich [2] [r_zw2 - 1] = r_test_gruen_3; auswertung_vergleich [3] [r_zw2 - 1] = r_test_gruen_4; 272 273 // -------------------- Setzen fremden Stein -------------------- 274 // Es werden alle 8 Moeglichkeiten getestet (bei jedem gruenen Stein) 275 r_zw4 = 0; 276 do { 277 r_zw5 = 0; 278 279 if (spielfeld_r1 [r_zw4 + 8] != 0) { 280 r_zw5 = 0; // Kein Stein gesetzt 281 r_zw4 ++; 282 } 283 else { 284 if (spielfeld_r1 [r_zw4 + 16] != 0) { 285 spielfeld_r1 [r_zw4 + 8] = 1; r_zw5 = r_zw4 + 8; r_zw4 ++; 286 } 287 else { 288 if ( spielfeld_r1 [ r_zw4 + 24] != 0) { 289 spielfeld_r1 [r_zw4 + 16] = 1; r_zw5 = r_zw4 + 16; r_zw4 ++; 290 } else { 291 if ( spielfeld_r1 [ r_zw4 + 32] != 0) { 292 spielfeld_r1 [r_zw4 + 24] = 1; r_zw5 = r_zw4 + 24; r_zw4 ++; 293 } else { 294 if ( spielfeld_r1 [ r_zw4 + 40] != 0) { 295 spielfeld_r1 [r_zw4 + 32] = 1; r_zw5 = r_zw4 + 32; r_zw4 ++; 296 } else { 297 if ( spielfeld_r1 [ r_zw4 + 48] != 0) { 298 spielfeld_r1 [r_zw4 + 40] = 1; r_zw5 = r_zw4 + 40; r_zw4 ++; 299 } else { 300 if ( spielfeld_r1 [ r_zw4 + 56] != 0) { 301 spielfeld_r1 [r_zw4 + 48] = 1; r_zw5 = r_zw4 + 48; r_zw4 ++; 302 } else { 303 spielfeld_r1 [r_zw4 + 56] = 1; r_zw5 = r_zw4 + 56; r_zw4 ++; 304 }; 305 }; 306 }; 307 }; 308 }; 309 }; 310 }; // Ende "else" absenken ein frender Stein 311 312 test_spielstand_rot (); 313 auswertung_rot [r_zw2 - 1] [r_zw4 - 1] = r_test_rot; 314 315 spielfeld_r1 [ r_zw5] = 0; // Loeschen Teststein fremd 316 } 317 while (r_zw4 != 8); // ------------- Ende setzen fremder Stein------------------- 318 319 spielfeld_r1 [ r_zw3] = 0; // Loeschen Teststein eigen 320 } 321 while (r_zw2 != 8); // Ende Steinsetzen zum Test 322 323 // ( 01 ) -------------------- Ermittell von max_gruen_2, max_gruen_3, max_gruen_4, -------------------- 324 325 r_zw10 = 0; max_gruen_2 = 0; max_gruen_3 = 0; max_gruen_4 = 0; 326 327 do { 328 if (max_gruen_2 < auswertung_vergleich [1] [r_zw10]) { 329 max_gruen_2 = auswertung_vergleich [1] [r_zw10]; 330 }; 331 if (max_gruen_3 < auswertung_vergleich [2] [r_zw10]) { 332 max_gruen_3 = auswertung_vergleich [2] [r_zw10]; 333 }; 334 if (max_gruen_4 < auswertung_vergleich [3] [r_zw10]) { 335 max_gruen_4 = auswertung_vergleich [3] [r_zw10]; 336 }; 337 r_zw10++; 338 } while (r_zw10 != 8); 339 340 auswertung_vergleich [1] [8] = max_gruen_2; 341 auswertung_vergleich [2] [8] = max_gruen_3; 342 auswertung_vergleich [3] [8] = max_gruen_4; 343 344 345 // -------------------- Umschreiben Ergebnisse in Zeile 5 von auswertung_vergleich -------------------- 346 // ( 02 ) -------------------- Loeschen Zeile 5 -------------------- 347 348 r_zw10 = 0; 349 350 do { 351 auswertung_vergleich [5] [r_zw10] == 0; 352 r_zw10++; 353 } while (r_zw10 != 8); 354 355 // (03 ) -------------------- Eintragen des höchsten Wertes aus den einzelnen Spalten der Zeilen 1-3 in die Zeile 5. -------------------- 356 357 r_zw10 = 0; 358 do { 359 if (auswertung_vergleich [4] [r_zw10] == 0) 360 { 361 auswertung_vergleich [5] [r_zw10] = 0; // Spalte voll 362 } 363 else { 364 if (auswertung_vergleich [3] [r_zw10] > 0 && auswertung_vergleich [3] [r_zw10] == max_gruen_4) 365 366 { auswertung_vergleich [5] [r_zw10] = 4; 367 } else { 368 if (auswertung_vergleich [2] [r_zw10] > 0 && auswertung_vergleich [2] [r_zw10] == max_gruen_3) { 369 auswertung_vergleich [5] [r_zw10] = 3; 370 } else { 371 if (auswertung_vergleich [1] [r_zw10] > 0 && auswertung_vergleich [1] [r_zw10] == max_gruen_2) { 372 auswertung_vergleich [5] [r_zw10] = 2; 373 } else { 374 auswertung_vergleich [5] [r_zw10] = 0; 375 }; 376 }; 377 }; 378 }; 379 r_zw10++; 380 } while (r_zw10 != 8); 381 382 // ( 04 ) -------------------- Ermitteln und Eintragen von max_rot aus auswertung_rot nach Zeile 6 in auswertung_vergleich -------------------- 383 384 r_zw11_1 = 0; 385 do { 386 r_zw11_2 = 0; max_rot = 0; 387 do { 388 if (auswertung_rot [r_zw11_1] [r_zw11_2] > max_rot) { 389 max_rot = auswertung_rot [r_zw11_1] [r_zw11_2]; 390 }; 391 r_zw11_2++; 392 } while (r_zw11_2 != 8); 393 auswertung_vergleich [6] [r_zw11_1] = max_rot; 394 r_zw11_1++; 395 } while (r_zw11_1 != 8); 396 397 // ( 05 ) -------------------- Löschen Zeile [8] und [9] in auswertung_rot -------------------- 398 399 r_zw11_1 = 0; 400 401 do { 402 auswertung_rot [8] [r_zw11_1] = 0; auswertung_rot [9] [r_zw11_1] = 0; 403 r_zw11_1++; 404 } while (r_zw11_1 != 8); 405 406 // ( 06 ) -------------------- Anzahl 3 in auswertung_rot [6] -------------------- 407 r_zw11_1 = 0; 408 409 do { 410 if ( auswertung_rot [r_zw11_1] [0] == 3 ) { 411 auswertung_rot [8] [0] ++ ; 412 }; 413 if ( auswertung_rot [r_zw11_1] [1] == 3 ) { 414 auswertung_rot [8] [1] ++ ; 415 }; 416 if ( auswertung_rot [r_zw11_1] [2] == 3 ) { 417 auswertung_rot [8] [2] ++ ; 418 }; 419 if ( auswertung_rot [r_zw11_1] [3] == 3 ) { 420 auswertung_rot [8] [3] ++ ; 421 }; 422 if ( auswertung_rot [r_zw11_1] [4] == 3 ) { 423 auswertung_rot [8] [4] ++ ; 424 }; 425 if ( auswertung_rot [r_zw11_1] [5] == 3 ) { 426 auswertung_rot [8] [5] ++ ; 427 }; 428 if ( auswertung_rot [r_zw11_1] [6] == 3 ) { 429 auswertung_rot [8] [6] ++ ; 430 }; 431 if ( auswertung_rot [r_zw11_1] [7] == 3 ) { 432 auswertung_rot [8] [7] ++ ; 433 }; 434 if ( auswertung_rot [r_zw11_1] [0] == 4 ) { 435 auswertung_rot [9] [0] ++ ; 436 }; 437 if ( auswertung_rot [r_zw11_1] [1] == 4 ) { 438 auswertung_rot [9] [1] ++ ; 439 }; 440 if ( auswertung_rot [r_zw11_1] [2] == 4 ) { 441 auswertung_rot [9] [2] ++ ; 442 }; 443 if ( auswertung_rot [r_zw11_1] [3] == 4 ) { 444 auswertung_rot [9] [3] ++ ; 445 }; 446 if ( auswertung_rot [r_zw11_1] [4] == 4 ) { 447 auswertung_rot [9] [4] ++ ; 448 }; 449 if ( auswertung_rot [r_zw11_1] [5] == 4 ) { 450 auswertung_rot [9] [5] ++ ; 451 }; 452 if ( auswertung_rot [r_zw11_1] [6] == 4 ) { 453 auswertung_rot [9] [6] ++ ; 454 }; 455 if ( auswertung_rot [r_zw11_1] [7] == 4 ) { 456 auswertung_rot [9] [7] ++ ; 457 }; 458 459 r_zw11_1 ++; 460 461 } while (r_zw11_1 != 8); 462 463 // ( 07 ) -------------------- Wertung auswertung_vergleich Zeile 5 und 6 zur Ermittlung bester Zug -------------------- 464 // -------------------- Ergebnis in auswertung_vergleich Zeile 7 -------------------- 465 466 r_zw12 = 0; 467 468 do { 469 if (auswertung_vergleich [5] [r_zw12] == 4) { // Rechner gewinnt 470 auswertung_vergleich [7] [r_zw12] = 10; auswertung_vergleich [11] [0] = 1; 471 472 } else { 473 if (auswertung_vergleich [6] [r_zw12] == 4) { // Spieler koennte gewinnen 474 auswertung_vergleich [7] [r_zw12] = 0; auswertung_vergleich [11] [1] = 1; 475 476 } else { 477 if (auswertung_vergleich [6] [r_zw12] == 3) { 478 auswertung_vergleich [7] [r_zw12] = 2 + auswertung_vergleich [5] [r_zw12]; 479 } else { 480 if (auswertung_vergleich [6] [r_zw12] == 2) { 481 auswertung_vergleich [7] [r_zw12] = 6 + auswertung_vergleich [5] [r_zw12]; 482 } else { 483 auswertung_vergleich [7] [r_zw12] = 1; 484 }; 485 }; 486 }; 487 }; 488 r_zw12++; 489 } while (r_zw12 != 8); 490 491 // ( 08 )-------------------- auswertung_vergleich [6] alles 3 -------------------- 492 // Wenn alle auswertung_rot [6] == 3 sind, dann gibt es mehrere Moeglichkeiten fuer eine 3-Gruppe 493 // Dann erfolgt ein anderer Auswertemodus statt der normalen Auswertung. 494 495 if (auswertung_vergleich [6] [0] == 3 && auswertung_vergleich [6] [1] == 3 && auswertung_vergleich [6] [2] == 3 && auswertung_vergleich [6] [3] == 3 && 496 auswertung_vergleich [6] [4] == 3 && auswertung_vergleich [6] [5] == 3 && auswertung_vergleich [6] [6] == 3 && auswertung_vergleich [6] [7] == 3 497 && auswertung_vergleich [3] [8] == 0) 498 { 499 r_alles3 = 1; auswertung_vergleich [11] [2] = 1; 500 501 r_zw11_1 = 0; 502 do { 503 auswertung_vergleich [7] [r_zw11_1] = auswertung_rot [8] [r_zw11_1]; 504 r_zw11_1 ++; 505 } while (r_zw11_1 != 8); 506 } 507 else { 508 r_alles3 = 0; 509 }; 510 511 // ( 09 ) -------------------- auswertung_vergleich [6] alles 4 -------------------- 512 // Wenn alle auswertung_rot [6] == 4 sind, dann gibt es mehrere Moeglichkeiten fuer eine 4-Gruppe 513 // Dann erfolgt ein anderer Auswertemodus statt der normalen Auswertung. 514 515 if (auswertung_vergleich [6] [0] == 4 && auswertung_vergleich [6] [1] == 4 && auswertung_vergleich [6] [2] == 4 && auswertung_vergleich [6] [3] == 4 && 516 auswertung_vergleich [6] [4] == 4 && auswertung_vergleich [6] [5] == 4 && auswertung_vergleich [6] [6] == 4 && auswertung_vergleich [6] [7] == 4) { 517 518 if (auswertung_rot [9] [0] == 7 || auswertung_rot [9] [1] == 7 || auswertung_rot [9] [2] == 7 || auswertung_rot [9] [3] == 7 || 519 auswertung_rot [9] [4] == 7 || auswertung_rot [9] [5] == 7 || auswertung_rot [9] [6] == 7 || auswertung_rot [9] [7] == 7 ) { 520 if (auswertung_rot [9] [0] == 7) { 521 auswertung_vergleich [7] [0] = 9; 522 } else { 523 auswertung_vergleich [7] [0] = 0; 524 }; 525 if (auswertung_rot [9] [1] == 7) { 526 auswertung_vergleich [7] [1] = 9; 527 } else { 528 auswertung_vergleich [7] [1] = 0; 529 }; 530 if (auswertung_rot [9] [2] == 7) { 531 auswertung_vergleich [7] [2] = 9; 532 } else { 533 auswertung_vergleich [7] [2] = 0; 534 }; 535 if (auswertung_rot [9] [3] == 7) { 536 auswertung_vergleich [7] [3] = 9; 537 } else { 538 auswertung_vergleich [7] [3] = 0; 539 }; 540 if (auswertung_rot [9] [4] == 7) { 541 auswertung_vergleich [7] [4] = 9; 542 } else { 543 auswertung_vergleich [7] [4] = 0; 544 }; 545 if (auswertung_rot [9] [5] == 7) { 546 auswertung_vergleich [7] [5] = 9; 547 } else { 548 auswertung_vergleich [7] [5] = 0; 549 }; 550 if (auswertung_rot [9] [6] == 7) { 551 auswertung_vergleich [7] [6] = 9; 552 } else { 553 auswertung_vergleich [7] [6] = 0; 554 }; 555 if (auswertung_rot [9] [7] == 7) { 556 auswertung_vergleich [7] [7] = 9; 557 } else { 558 auswertung_vergleich [7] [7] = 0; 559 }; 560 } 561 else { 562 r_zw11_1 = 0; auswertung_vergleich [11] [3] = 1; 563 do { 564 auswertung_vergleich [7] [r_zw11_1] = auswertung_rot [9] [r_zw11_1]; 565 r_zw11_1 ++; 566 } while (r_zw11_1 != 8); 567 }; 568 }; 569 570 // ( 10 ) --------------------- Sperren der vollen Spalten -------------------- 571 572 r_zw12 = 0; 573 do { 574 if (auswertung_vergleich [4] [r_zw12] == 0) { 575 auswertung_vergleich [7] [r_zw12] = 0; 576 }; 577 r_zw12++; 578 } while (r_zw12 != 8); 579 580 // ( 11 ) -------------------- Ermittlung hoechster Wert -------------------- 581 582 r_zw12 = 0; max_zug_1 = 0; 583 do { 584 if (max_zug_1 < auswertung_vergleich [7] [r_zw12]) { 585 max_zug_1 = auswertung_vergleich [7] [r_zw12]; 586 }; 587 r_zw12++; 588 } 589 while (r_zw12 != 8); 590 auswertung_vergleich [7] [8] = max_zug_1; 591 592 // ( 12 ) -------------------- max_zug_1 = 0 -------------------- 593 // Kein sinnvoller Zug nach dem Auswerteschema möglich, 594 // hoechter Wert aus auswertung_vergleich [1],[2] und [3] wird gesetzt. 595 596 if (max_zug_1 == 0) { 597 598 r_zw12 = 0; auswertung_vergleich [11] [4] = 1; 599 do { 600 601 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [1] [r_zw12] > 0) { 602 auswertung_vergleich [7] [r_zw12] = 1; 603 if (max_zug_1 < 1) { 604 max_zug_1 = 1; 605 }; 606 }; 607 608 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [2] [r_zw12] > 0) { 609 auswertung_vergleich [7] [r_zw12] = 2; 610 if (max_zug_1 < 2) { 611 max_zug_1 = 2; 612 }; 613 }; 614 615 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [3] [r_zw12] > 0) 616 { 617 auswertung_vergleich [7] [r_zw12] = 3; 618 if (max_zug_1 < 3) { 619 max_zug_1 = 3; 620 }; 621 }; 622 r_zw12++; 623 } while (r_zw12 != 8); 624 }; 625 626 // ( 13 ) -------------------- Anzahl 3 in auswertung_rot [8] in allen Spalten gleich -------------------- 627 628 if ( auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 1 ] && auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 2 ] && 629 auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 3 ] && auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 4 ] && 630 auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 5 ] && auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 6 ] && 631 auswertung_rot [8] [ 0 ] == auswertung_rot [8] [ 7 ] && r_alles3 == 1) 632 { 633 r_zw12 = 0; max_zug_1 = 0; 634 do { 635 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [1] [r_zw12] > 0) { 636 auswertung_vergleich [7] [r_zw12] = 1; 637 if (max_zug_1 < 1) { 638 max_zug_1 = 1; 639 }; 640 }; 641 642 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [5] [r_zw12] > 0) { 643 auswertung_vergleich [7] [r_zw12] = auswertung_vergleich [5] [r_zw12]; 644 if (max_zug_1 < auswertung_vergleich [5] [r_zw12]) { 645 max_zug_1 = auswertung_vergleich [5] [r_zw12]; 646 }; 647 }; 648 649 if (auswertung_vergleich [4] [r_zw12] == 1 && auswertung_vergleich [3] [r_zw12] > 0) 650 { 651 auswertung_vergleich [7] [r_zw12] = auswertung_vergleich [5] [r_zw12]; 652 if (max_zug_1 < auswertung_vergleich [5] [r_zw12]) { 653 max_zug_1 = auswertung_vergleich [5] [r_zw12]; 654 }; 655 }; 656 657 r_zw12++; 658 } while (r_zw12 != 8); 659 }; 660 661 // ( 14 ) -------------------- Zufall bei gleichen Ergebnissen -------------------- 662 663 r_zw12 = 0; 664 do { 665 if (auswertung_vergleich [7] [r_zw12] == max_zug_1) { 666 auswertung_vergleich [8] [r_zw12] = auswertung_vergleich [7] [r_zw12] * random(1, 20); 667 } else { 668 auswertung_vergleich [8] [r_zw12] = 0; 669 }; 670 r_zw12++; 671 } while (r_zw12 != 8); 672 673 // ( 15 ) -------------------- Setzen ersten Zug bzw. Schritte danach -------------------- 674 if (zw8 < 2 ) { 675 if (spielfeld [59] == 0) { 676 r_zw14 = 3; 677 } else { 678 r_zw14 = 4; 679 }; 680 } else { 681 682 // ( 16 ) -------------------- Schritte zum hoechsten Wert -------------------- 683 max_zug_1 = 0; r_zw12 = 0; r_zw14 = 0; 684 685 do { 686 if (max_zug_1 < auswertung_vergleich [8] [r_zw12]) { 687 max_zug_1 = auswertung_vergleich [8] [r_zw12]; r_zw14 = r_zw12; 688 }; 689 r_zw12++; 690 } 691 while (r_zw12 != 8); 692 }; 693 694 // --------------------( 17 ) Gewaehlte Spalte war schon gesperrt, es wird die naechste freie Spalte genommen.-------------------- 695 // --------------------Das tritt nur auf, wenn alle Spalten gesperrt oder zur Niederlage des Rechners fuehren 696 697 if (auswertung_vergleich [4][0] == 0 && r_zw14 == 0) { 698 r_zw14++; 699 auswertung_vergleich [11] [6]++; 700 }; 701 if (auswertung_vergleich [4][1] == 0 && r_zw14 == 1) { 702 r_zw14++; 703 auswertung_vergleich [11] [6]++; 704 }; 705 if (auswertung_vergleich [4][2] == 0 && r_zw14 == 2) { 706 r_zw14++; 707 auswertung_vergleich [11] [6]++; 708 }; 709 if (auswertung_vergleich [4][3] == 0 && r_zw14 == 3) { 710 r_zw14++; 711 auswertung_vergleich [11] [6]++; 712 }; 713 if (auswertung_vergleich [4][4] == 0 && r_zw14 == 4) { 714 r_zw14++; 715 auswertung_vergleich [11] [6]++; 716 }; 717 if (auswertung_vergleich [4][5] == 0 && r_zw14 == 5) { 718 r_zw14++; 719 auswertung_vergleich [11] [6]++; 720 }; 721 if (auswertung_vergleich [4][6] == 0 && r_zw14 == 6) { 722 r_zw14++; 723 auswertung_vergleich [11] [6]++; 724 }; 725 726 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 727 // ausgabe_ergebnis (); // nur zu Testzwecken. Ist die Zeile aktiv, werden Daten der Auswertung auf den Bildaschirm ausgegeben. 728 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 729 delay (600); 730 731 // ( 18 ) -------------------- Ausfueren Schritte -------------------- 732 733 if (r_zw14 != 0) { 734 do { 735 rechts_0 (); ausgabe_spielfeld (); delay(500); 736 r_zw14--; 737 } while (r_zw14 != 0); 738 }; 739 runter_0 (); zw8++; 740} 741 742// -------------------Test Spielstand ----------------------- 743// Uebergabewerte r_test_gruen, r_test_rot 744 745void test_spielstand_gruen () { 746 747 r_test_gruen = 0; r_test_gruen_1 = 0; r_test_gruen_2 = 0; r_test_gruen_3 = 0; r_test_gruen_4 = 0; 748 749 // -------------------- Gruen Test diagonal oben Rechner -------------------- 750 751 zw4 = 32; // Startfeld beim Testen 752 r_zw9 = zw4; // Zwischenspeicher 753 zw7 = 0; // Zaehlschleife 754 755 do { 756 zw6 = 0; // Zaehlschleife 757 do { 758 759 // 1 2 760 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 - 7] == 2 && spielfeld_r1 [zw4 - 14] == 0 && spielfeld_r1 [zw4 - 21] == 0) { 761 r_test_gruen_2++; 762 }; 763 // 2 3 764 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 2 && spielfeld_r1 [zw4 - 14] == 2 && spielfeld_r1 [zw4 - 21] == 0) { 765 r_test_gruen_2++; 766 }; 767 // 3 4 768 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 0 && spielfeld_r1 [zw4 - 14] == 2 && spielfeld_r1 [zw4 - 21] == 2) { 769 r_test_gruen_2++; 770 }; 771 // 1 2 3 772 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 - 7] == 2 && spielfeld_r1 [zw4 - 14] == 2 && spielfeld_r1 [zw4 - 21] == 0 && spielfeld_r1 [zw4 - 13] != 0) { 773 r_test_gruen_3++; 774 }; 775 // 2 3 4 776 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 2 && spielfeld_r1 [zw4 - 14] == 2 && spielfeld_r1 [zw4 - 21] == 2) { 777 r_test_gruen_3++; 778 }; 779 // 1 2 3 4 780 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 - 7] == 2 && spielfeld_r1 [zw4 - 14] == 2 && spielfeld_r1 [zw4 - 21] == 2) { 781 r_test_gruen_4++; 782 }; 783 zw6 ++; zw4 = zw4 + 1; 784 } 785 while (zw6 != 5); 786 787 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 788 789 zw7 ++; 790 } 791 while (zw7 != 4); 792 793 // -------------------- gruen Test diagonal unten Rechner -------------------- 794 795 zw4 = 8; // Startfeld beim Testen 796 r_zw9 = zw4; // Zwischenspeicher 797 zw7 = 0; // Zaehlschleife 798 799 do { 800 zw6 = 0; // Zaehlschleife 801 do { 802 803 // 1 2 804 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 9] == 2 && spielfeld_r1 [zw4 + 18] == 0 && spielfeld_r1 [zw4 + 27] == 0) { 805 r_test_gruen_2++; 806 }; 807 // 2 3 808 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 2 && spielfeld_r1 [zw4 + 18] == 2 && spielfeld_r1 [zw4 + 27] == 0) { 809 r_test_gruen_2++; 810 }; 811 // 3 4 812 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 0 && spielfeld_r1 [zw4 + 18] == 2 && spielfeld_r1 [zw4 + 27] == 2) { 813 r_test_gruen_2++; 814 }; 815 // 1 2 3 816 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 9] == 2 && spielfeld_r1 [zw4 + 18] == 2 && spielfeld_r1 [zw4 + 27] == 0) { 817 r_test_gruen_3++; 818 }; 819 // (1)2 3 4 820 if (spielfeld_r1 [zw4 + 8] != 0 && spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 2 && spielfeld_r1 [zw4 + 18] == 2 && spielfeld_r1 [zw4 + 27] == 2) { 821 r_test_gruen_3++; 822 }; 823 // 1 2 3 4 824 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 9] == 2 && spielfeld_r1 [zw4 + 18] == 2 && spielfeld_r1 [zw4 + 27] == 2) { 825 r_test_gruen_4++; 826 }; 827 zw6 ++; zw4 = zw4 + 1; 828 } 829 while (zw6 != 5); 830 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 831 zw7 ++; 832 } 833 while (zw7 != 4); 834 835 // -------------------- gruen Test senkrecht Rechner -------------------- 836 837 zw4 = 8; // Startfeld beim Testen 838 r_zw9 = zw4; // Zwischenspeicher 839 zw7 = 0; // Zaehlschleife 840 841 do { 842 zw6 = 0; // Zaehlschleife 843 do { 844 845 // 1 2 846 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 8] == 2 && spielfeld_r1 [zw4 + 16] == 0 && spielfeld_r1 [zw4 + 24] == 0) { 847 r_test_gruen_2++; 848 }; 849 // 2 3 850 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 2 && spielfeld_r1 [zw4 + 16] == 2 && spielfeld_r1 [zw4 + 24] == 0) { 851 r_test_gruen_2++; 852 }; 853 // 3 4 854 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 0 && spielfeld_r1 [zw4 + 16] == 2 && spielfeld_r1 [zw4 + 24] == 2) { 855 r_test_gruen_2++; 856 }; 857 // 1 2 3 858 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 8] == 2 && spielfeld_r1 [zw4 + 16] == 2 && spielfeld_r1 [zw4 + 24] == 0) { 859 r_test_gruen_3++; 860 }; 861 // 2 3 4 862 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 2 && spielfeld_r1 [zw4 + 16] == 2 && spielfeld_r1 [zw4 + 24] == 2) { 863 ; r_test_gruen_3++; 864 }; 865 // 1 2 3 4 866 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 8] == 2 && spielfeld_r1 [zw4 + 16] == 2 && spielfeld_r1 [zw4 + 24] == 2) { 867 r_test_gruen_4++; 868 }; 869 zw6 ++; zw4 = zw4 + 1; 870 } 871 while (zw6 != 8); 872 873 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 874 zw7 ++; 875 } 876 while (zw7 != 4); 877 878 // -------------------- gruen Test waagerecht Rechner -------------------- 879 880 zw4 = 8; // Startfeld beim Testen 881 r_zw9 = zw4; // Zwischenspeicher 882 zw7 = 0; // Zaehlschleife 883 884 do { 885 zw6 = 0; // Zaehlschleife 886 do { 887 888 // 1 2 889 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 1] == 2 && spielfeld_r1 [zw4 + 2] == 0 && spielfeld_r1 [zw4 + 3] == 0) { 890 r_test_gruen_2++; 891 }; 892 // 2 3 893 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 2 && spielfeld_r1 [zw4 + 2] == 2 && spielfeld_r1 [zw4 + 3] == 0) { 894 r_test_gruen_2++; 895 }; 896 // 3 4 897 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 0 && spielfeld_r1 [zw4 + 2] == 2 && spielfeld_r1 [zw4 + 3] == 2) { 898 r_test_gruen_2++; 899 }; 900 // 1 2 3 901 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 1] == 2 && spielfeld_r1 [zw4 + 2] == 2 && spielfeld_r1 [zw4 + 3] == 0) { 902 r_test_gruen_3++; 903 }; 904 // 2 3 4 905 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 2 && spielfeld_r1 [zw4 + 2] == 2 && spielfeld_r1 [zw4 + 3] == 2) { 906 r_test_gruen_3++; 907 }; 908 // 1 2 3 4 909 if (spielfeld_r1 [zw4] == 2 && spielfeld_r1 [zw4 + 1] == 2 && spielfeld_r1 [zw4 + 2] == 2 && spielfeld_r1 [zw4 + 3] == 2) { 910 r_test_gruen_4++; 911 }; 912 zw6 ++; zw4 = zw4 + 8; 913 } 914 while (zw6 != 7); 915 r_zw9 = r_zw9 + 1; zw4 = r_zw9; // Offset 916 zw7 ++; 917 } 918 while (zw7 != 5); 919} 920 921void test_spielstand_rot () { 922 923 // -------------------- rot Test diagonal oben Spieler -------------------- 924 925 zw4 = 32; // Startfeld beim Testen 926 r_zw9 = zw4; // Zwischenspeicher 927 zw7 = 0; // Zaehlschleife 928 r_test_rot = 0; 929 930 do { 931 zw6 = 0; // Zaehlschleife 932 do { 933 934 // 1 2 935 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 - 7] == 1 && spielfeld_r1 [zw4 - 14] == 0 && spielfeld_r1 [zw4 - 21] == 0) { 936 if (r_test_rot < 2) { 937 r_test_rot = 2; 938 }; 939 }; 940 // 2 3 941 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 1 && spielfeld_r1 [zw4 - 14] == 1 && spielfeld_r1 [zw4 - 21] == 0) { 942 if (r_test_rot < 2) { 943 r_test_rot = 2; 944 }; 945 }; 946 // 3 4 947 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 0 && spielfeld_r1 [zw4 - 14] == 1 && spielfeld_r1 [zw4 - 21] == 1) { 948 if (r_test_rot < 2) { 949 r_test_rot = 2; 950 }; 951 }; 952 // 1 2 3 953 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 - 7] == 1 && spielfeld_r1 [zw4 - 14] == 1 && spielfeld_r1 [zw4 - 21] == 0) { 954 if (r_test_rot < 3) { 955 r_test_rot = 3; 956 }; 957 }; 958 // 2 3 4 959 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 - 7] == 1 && spielfeld_r1 [zw4 - 14] == 1 && spielfeld_r1 [zw4 - 21] == 1) { 960 if (r_test_rot < 3) { 961 r_test_rot = 3; 962 }; 963 }; 964 // 1 2 3 4 965 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 - 7] == 1 && spielfeld_r1 [zw4 - 14] == 1 && spielfeld_r1 [zw4 - 21] == 1) { 966 if (r_test_rot < 4) { 967 r_test_rot = 4; 968 }; 969 }; 970 zw6 ++; zw4 = zw4 + 1; 971 } 972 while (zw6 != 5); 973 974 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 975 zw7 ++; 976 } 977 978 while (zw7 != 4); 979 980 // -------------------- rot Test diagonal unten Spieler -------------------- 981 982 zw4 = 8; // Startfeld beim Testen 983 r_zw9 = zw4; // Zwischenspeicher 984 zw7 = 0; // Zaehlschleife 985 986 do { 987 zw6 = 0; // Zaehlschleife 988 do { 989 990 // 1 2 991 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 9] == 1 && spielfeld_r1 [zw4 + 18] == 0 && spielfeld_r1 [zw4 + 27] == 0) { 992 if (r_test_rot < 2) { 993 r_test_rot = 2; 994 }; 995 }; 996 // 2 3 997 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 1 && spielfeld_r1 [zw4 + 18] == 1 && spielfeld_r1 [zw4 + 27] == 0) { 998 if (r_test_rot < 2) { 999 r_test_rot = 2; 1000 }; 1001 }; 1002 // 3 4 1003 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 0 && spielfeld_r1 [zw4 + 18] == 1 && spielfeld_r1 [zw4 + 27] == 1) { 1004 if (r_test_rot < 2) { 1005 r_test_rot = 2; 1006 }; 1007 }; 1008 // 1 2 3 1009 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 9] == 1 && spielfeld_r1 [zw4 + 18] == 1 && spielfeld_r1 [zw4 + 27] == 0) { 1010 if (r_test_rot < 3) { 1011 r_test_rot = 3; 1012 }; 1013 }; 1014 // 2 3 4 1015 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 9] == 1 && spielfeld_r1 [zw4 + 18] == 1 && spielfeld_r1 [zw4 + 27] == 1) { 1016 if (r_test_rot < 3) { 1017 r_test_rot = 3; 1018 }; 1019 }; 1020 // 1 2 3 4 1021 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 9] == 1 && spielfeld_r1 [zw4 + 18] == 1 && spielfeld_r1 [zw4 + 27] == 1) { 1022 if (r_test_rot < 4) { 1023 r_test_rot = 4; 1024 }; 1025 }; 1026 zw6 ++; zw4 = zw4 + 1; 1027 } 1028 while (zw6 != 5); 1029 1030 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 1031 zw7 ++; 1032 } 1033 while (zw7 != 4); 1034 1035 // -------------------- rot Test senkrecht Spieler -------------------- 1036 zw4 = 8; // Startfeld beim Testen 1037 r_zw9 = zw4; // Zwischenspeicher 1038 zw7 = 0; // Zaehlschleife 1039 1040 do { 1041 zw6 = 0; // Zaehlschleife 1042 do { 1043 1044 // 1 2 1045 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 8] == 1 && spielfeld_r1 [zw4 + 16] == 0 && spielfeld_r1 [zw4 + 24] == 0) { 1046 if (r_test_rot < 2) { 1047 r_test_rot = 2; 1048 }; 1049 }; 1050 // 2 3 1051 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 1 && spielfeld_r1 [zw4 + 16] == 1 && spielfeld_r1 [zw4 + 24] == 0) { 1052 if (r_test_rot < 2) { 1053 r_test_rot = 2; 1054 }; 1055 }; 1056 // 3 4 1057 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 0 && spielfeld_r1 [zw4 + 16] == 1 && spielfeld_r1 [zw4 + 24] == 1) { 1058 if (r_test_rot < 2) { 1059 r_test_rot = 2; 1060 }; 1061 }; 1062 // 1 2 3 1063 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 8] == 1 && spielfeld_r1 [zw4 + 16] == 1 && spielfeld_r1 [zw4 + 24] == 0) { 1064 if (r_test_rot < 3) { 1065 r_test_rot = 3; 1066 }; 1067 }; 1068 // 2 3 4 1069 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 8] == 1 && spielfeld_r1 [zw4 + 16] == 1 && spielfeld_r1 [zw4 + 24] == 1) { 1070 if (r_test_rot < 3) { 1071 r_test_rot = 3; 1072 }; 1073 }; 1074 // 1 2 3 4 1075 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 8] == 1 && spielfeld_r1 [zw4 + 16] == 1 && spielfeld_r1 [zw4 + 24] == 1) { 1076 if (r_test_rot < 4) { 1077 r_test_rot = 4; 1078 }; 1079 }; 1080 1081 zw6 ++; zw4 = zw4 + 1; 1082 } 1083 while (zw6 != 8); 1084 1085 r_zw9 = r_zw9 + 8; zw4 = r_zw9; 1086 zw7 ++; 1087 } 1088 while (zw7 != 4); 1089 1090 // -------------------- rot Test waagerecht Spieler -------------------- 1091 1092 zw4 = 8; // Startfeld beim Testen 1093 r_zw9 = zw4; // Zwischenspeicher 1094 zw7 = 0; // Zaehlschleife 1095 1096 do { 1097 zw6 = 0; // Zaehlschleife 1098 do { 1099 1100 // 1 2 1101 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 1] == 1 && spielfeld_r1 [zw4 + 2] == 0 && spielfeld_r1 [zw4 + 3] == 0) { 1102 if (r_test_rot < 2) { 1103 r_test_rot = 2; 1104 }; 1105 }; 1106 // 2 3 1107 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 1 && spielfeld_r1 [zw4 + 2] == 1 && spielfeld_r1 [zw4 + 3] == 0) { 1108 if (r_test_rot < 2) { 1109 r_test_rot = 2; 1110 }; 1111 }; 1112 // 3 4 1113 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 0 && spielfeld_r1 [zw4 + 2] == 1 && spielfeld_r1 [zw4 + 3] == 1) { 1114 if (r_test_rot < 2) { 1115 r_test_rot = 2; 1116 }; 1117 }; 1118 // 1 2 3 1119 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 1] == 1 && spielfeld_r1 [zw4 + 2] == 1 && spielfeld_r1 [zw4 + 3] == 0) { 1120 if (r_test_rot < 3) { 1121 r_test_rot = 3; 1122 }; 1123 }; 1124 // 2 3 4 1125 if (spielfeld_r1 [zw4] == 0 && spielfeld_r1 [zw4 + 1] == 1 && spielfeld_r1 [zw4 + 2] == 1 && spielfeld_r1 [zw4 + 3] == 1) { 1126 if (r_test_rot < 3) { 1127 r_test_rot = 3; 1128 }; 1129 }; 1130 // 1 2 3 4 1131 if (spielfeld_r1 [zw4] == 1 && spielfeld_r1 [zw4 + 1] == 1 && spielfeld_r1 [zw4 + 2] == 1 && spielfeld_r1 [zw4 + 3] == 1) { 1132 if (r_test_rot < 4) { 1133 r_test_rot = 4; 1134 }; 1135 }; 1136 1137 zw6 ++; zw4 = zw4 + 8; 1138 } 1139 1140 while (zw6 != 7); 1141 1142 r_zw9 = r_zw9 + 1; zw4 = r_zw9; // Offset 1143 zw7 ++; 1144 } 1145 while (zw7 != 5); 1146 1147} 1148 1149// -------------------- Programme algemein -------------------- 1150 1151// -------------------- Test ob es einen Sieger gibt -------------------- 1152// Programm wird nach Absenken eines Steines aufgerufen 1153void test_spielende () { 1154 1155 // -------------------- Test diagonal oben -------------------- 1156 // 3 verschaltelte Zyklen 1157 1158 zw4 = 32; // Startfeld beim Testen 1159 sieger = 0; zw7 = 0; 1160 1161 do { 1162 zw6 = 0; 1163 1164 do { 1165 zw5 = 0; // Zaehlschleife 1166 test_rot = 0; test_gruen = 0; 1167 1168 // -------------------- Testen 4 Zellen diegonal oben -------------------- 1169 do { 1170 if ( spielfeld [zw4] == 1) { 1171 test_rot ++; 1172 }; 1173 if ( spielfeld [zw4] == 2) { 1174 test_gruen ++; 1175 }; 1176 1177 // -------------------- Merken der Position beim Sieg -------------------- 1178 if (sieger == 0) { 1179 if (zw5 == 0) { 1180 position_1 = zw4; 1181 }; 1182 if (zw5 == 1) { 1183 position_2 = zw4; 1184 }; 1185 if (zw5 == 2) { 1186 position_3 = zw4; 1187 }; 1188 if (zw5 == 3) { 1189 position_4 = zw4; 1190 }; 1191 }; 1192 1193 zw4 = zw4 - 7; zw5++; 1194 } 1195 while (zw5 != 4); 1196 1197 if (test_rot == 4) { 1198 sieger = 1; 1199 } else { 1200 test_rot = 0; 1201 1202 }; 1203 if (test_gruen == 4) { 1204 sieger = 2; 1205 } else { 1206 test_gruen = 0; 1207 1208 }; 1209 zw4 = zw4 + 36; zw6++; 1210 if (sieger != 0) { 1211 zw6 = 4; 1212 }; 1213 } 1214 while ( zw6 != 4); 1215 1216 zw4 = zw4 - 31; zw7++; 1217 if (sieger != 0) { 1218 zw7 = 5; 1219 }; 1220 } 1221 while (zw7 != 5); 1222 1223 // -------------------- Test diagonal unten -------------------- 1224 // 3 verschaltelte Zyklen 1225 1226 zw4 = 8; // Startfeld beim Testen 1227 zw7 = 0; 1228 1229 do { 1230 zw6 = 0; 1231 do { 1232 zw5 = 0; //Zaehlschleife 1233 test_rot = 0; test_gruen = 0; 1234 1235 do { 1236 if ( spielfeld [zw4] == 1) { 1237 test_rot ++; 1238 }; 1239 if ( spielfeld [zw4] == 2) { 1240 test_gruen ++; 1241 }; 1242 1243 // -------------------- Merken der Position beim Sieg -------------------- 1244 if (sieger == 0) { 1245 if (zw5 == 0) { 1246 position_1 = zw4; 1247 }; 1248 if (zw5 == 1) { 1249 position_2 = zw4; 1250 }; 1251 if (zw5 == 2) { 1252 position_3 = zw4; 1253 }; 1254 if (zw5 == 3) { 1255 position_4 = zw4; 1256 }; 1257 }; 1258 1259 zw4 = zw4 + 9; zw5++; 1260 } 1261 while (zw5 != 4); 1262 1263 if (test_rot == 4) { 1264 sieger = 1; 1265 } else { 1266 test_rot = 0; 1267 }; 1268 if (test_gruen == 4) { 1269 sieger = 2; 1270 } else { 1271 test_gruen = 0; 1272 }; 1273 zw4 = zw4 - 28; zw6++; 1274 if (sieger != 0) { 1275 zw6 = 4; 1276 }; 1277 } 1278 while ( zw6 != 4); 1279 1280 zw4 = zw4 - 31; zw7++; 1281 if (sieger != 0) { 1282 zw7 = 5; 1283 }; 1284 } 1285 while (zw7 != 5); 1286 1287 // -------------------- Test senkrecht -------------------- 1288 // 3 verschaltelte Zyklen 1289 1290 zw4 = 8; // Startfeld beim Testen 1291 zw7 = 0; 1292 do { 1293 zw6 = 0; 1294 1295 do { 1296 zw5 = 0; //Zaehlschleife 1297 test_rot = 0; test_gruen = 0; 1298 1299 do { 1300 if ( spielfeld [zw4] == 1) { 1301 test_rot ++; 1302 }; 1303 if ( spielfeld [zw4] == 2) { 1304 test_gruen ++; 1305 }; 1306 1307 // -------------------- Merken der Position beim Sieg -------------------- 1308 if (sieger == 0) { 1309 if (zw5 == 0) { 1310 position_1 = zw4; 1311 }; 1312 if (zw5 == 1) { 1313 position_2 = zw4; 1314 }; 1315 if (zw5 == 2) { 1316 position_3 = zw4; 1317 }; 1318 if (zw5 == 3) { 1319 position_4 = zw4; 1320 }; 1321 }; 1322 1323 zw4 = zw4 + 8; zw5++; 1324 } 1325 while (zw5 != 4); 1326 1327 if (test_rot == 4) { 1328 sieger = 1; 1329 } else { 1330 test_rot = 0; 1331 }; 1332 if (test_gruen == 4) { 1333 sieger = 2; 1334 } else { 1335 test_gruen = 0; 1336 }; 1337 zw4 = zw4 - 24; zw6++; 1338 if (sieger != 0) { 1339 zw6 = 4; 1340 }; 1341 } 1342 while ( zw6 != 4); 1343 1344 zw4 = zw4 - 31; zw7++; 1345 if (sieger != 0) { 1346 zw7 = 8; 1347 }; 1348 } 1349 while (zw7 != 8); 1350 1351 // -------------------- Test wagerecht -------------------- 1352 // 3 verschaltelte Zyklen 1353 zw4 = 8; // Startfeld beim Testen 1354 zw7 = 0; 1355 do { 1356 zw6 = 0; 1357 1358 do { 1359 zw5 = 0; 1360 test_rot = 0; test_gruen = 0; 1361 do { 1362 if ( spielfeld [zw4] == 1) { 1363 test_rot ++; 1364 }; 1365 if ( spielfeld [zw4] == 2) { 1366 test_gruen ++; 1367 }; 1368 1369 // -------------------- Merken der Position beim Sieg -------------------- 1370 if (sieger == 0) { 1371 if (zw5 == 0) { 1372 position_1 = zw4; 1373 }; 1374 if (zw5 == 1) { 1375 position_2 = zw4; 1376 }; 1377 if (zw5 == 2) { 1378 position_3 = zw4; 1379 }; 1380 if (zw5 == 3) { 1381 position_4 = zw4; 1382 }; 1383 }; 1384 1385 zw4++; zw5++; 1386 } 1387 while (zw5 != 4); 1388 1389 if (test_rot == 4) { 1390 sieger = 1; 1391 } else { 1392 test_rot = 0; 1393 }; 1394 if (test_gruen == 4) { 1395 sieger = 2; 1396 } else { 1397 test_gruen = 0; 1398 }; 1399 zw4 = zw4 + 4; zw6++; 1400 if (sieger != 0) { 1401 zw6 = 7; 1402 }; 1403 } 1404 while ( zw6 != 7); 1405 1406 zw4 = zw4 - 55; zw7++; 1407 if (sieger != 0) { 1408 zw7 = 5; 1409 }; 1410 } 1411 while (zw7 != 5); 1412 1413 // -------------------- Festlegen Siegerfarben -------------------- 1414 1415 if ( spiel_art == 1) { 1416 1417 //-------------------- Siegerfarben Spieler gegen Rechner -------------------- 1418 1419 if (sieger == 1) { 1420 farbe_1 = rot; 1421 farbe_2 = rot; 1422 ende (); // Ausgabe Siegerfarbe Rot 1423 }; 1424 if (sieger == 2) { 1425 farbe_1 = gruen; 1426 farbe_2 = gruen; 1427 ende (); // Ausgabe Siegerfarbe Gruen 1428 }; 1429 if (zw8 == 56 ) { 1430 farbe_1 = gruen; 1431 farbe_2 = rot; 1432 ende (); // Ausgabe Unentschieden 1433 }; 1434 1435 position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; 1436 test_rot = 0; test_gruen = 0; 1437 1438 } else { 1439 1440 //-------------------- Siegerfarben Spieler gegen Spieler -------------------- 1441 if (sieger == 1) { 1442 farbe_1 = rot; 1443 farbe_2 = rot; 1444 ende (); // Ausgabe Siegerfarbe Rot 1445 }; 1446 if (sieger == 2) { 1447 farbe_1 = gruen; 1448 farbe_2 = gruen; 1449 ende (); // Ausgabe Siegerfarbe Gruen 1450 }; 1451 if (zw8 == 56 ) { 1452 farbe_1 = gruen; 1453 farbe_2 = rot; 1454 ende (); // Ausgabe Unentschieden 1455 }; 1456 1457 position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; 1458 test_rot = 0; test_gruen = 0; 1459 1460 }; 1461} 1462 1463// -------------------- Ausgabe Siegerfarbe, Vorbereitung neuer Start -------------------- 1464 1465void ende () { 1466 1467 if (spiel_art == 1) { 1468 1469 // -------------------- Ausgabe Siegerfarbe Spieler gegen Rechner -------------------- 1470 1471 zw11 = 0; 1472 1473 if (zw8 != 56 ) { 1474 do { 1475 strip.setPixelColor (63 - position_1, 0, 0, 0); 1476 strip.setPixelColor (63 - position_2, 0, 0, 0); 1477 strip.setPixelColor (63 - position_3, 0, 0, 0); 1478 strip.setPixelColor (63 - position_4, 0, 0, 0); 1479 strip.show(); delay(200); 1480 strip.setPixelColor (63 - position_1, farbe_1); 1481 strip.setPixelColor (63 - position_2, farbe_1); 1482 strip.setPixelColor (63 - position_3, farbe_1); 1483 strip.setPixelColor (63 - position_4, farbe_1); 1484 strip.show(); delay(200); 1485 zw11++; 1486 1487 NewTone(TONE_PIN,3000); 1488 delay(500); 1489 noNewTone(TONE_PIN); 1490 } 1491 1492 while ( zw11 != 3); 1493 1494 } 1495 1496 zw9 = 0; 1497 do { 1498 strip.setPixelColor (63 - zw9, farbe_1); zw9++; 1499 strip.setPixelColor (63 - zw9, farbe_2); zw9++; 1500 } 1501 while (zw9 != 64); 1502 strip.show(); 1503 1504 delay(2000); 1505 1506 zw10 = 0; 1507 do { 1508 strip.setPixelColor (63 - zw10, 0, 0, 0); spielfeld [zw10] = 0; 1509 zw10++; 1510 } 1511 while ( zw10 != 64); 1512 strip.show(); 1513 1514 if (sieger == 2) { 1515 zw10 = 0; 1516 1517 do { 1518 strip.setPixelColor (63 - 2, 0, 5, 0); strip.setPixelColor (63 - 3, 0, 5, 0); strip.setPixelColor (63 - 4, 0, 5, 0); strip.setPixelColor (63 - 5, 0, 5, 0); 1519 strip.setPixelColor (63 - 9, 0, 5, 0); strip.setPixelColor (63 - 14, 0, 5, 0); strip.setPixelColor (63 - 16, 0, 5, 0); strip.setPixelColor (63 - 17, 0, 0, 5); 1520 strip.setPixelColor (63 - 18, 0, 0, 5); strip.setPixelColor (63 - 21, 0, 0, 5); strip.setPixelColor (63 - 22, 0, 0, 5); strip.setPixelColor (63 - 23, 0, 5, 0); 1521 strip.setPixelColor (63 - 24, 0, 5, 0); strip.setPixelColor (63 - 25, 0, 0, 5); strip.setPixelColor (63 - 26, 0, 0, 5); strip.setPixelColor (63 - 29, 0, 0, 5); 1522 strip.setPixelColor (63 - 30, 0, 0, 5); strip.setPixelColor (63 - 31, 0, 5, 0); strip.setPixelColor (63 - 32, 0, 5, 0); strip.setPixelColor (63 - 39, 0, 5, 0); 1523 strip.setPixelColor (63 - 40, 0, 5, 0); strip.setPixelColor (63 - 42, 5, 0, 0); strip.setPixelColor (63 - 45, 5, 0, 0); strip.setPixelColor (63 - 47, 0, 5, 0); 1524 strip.setPixelColor (63 - 49, 0, 5, 0); strip.setPixelColor (63 - 51, 5, 0, 0); strip.setPixelColor (63 - 52, 5, 0, 0); strip.setPixelColor (63 - 54, 0, 5, 0); 1525 strip.setPixelColor (63 - 58, 0, 5, 0); strip.setPixelColor (63 - 59, 0, 5, 0); strip.setPixelColor (63 - 60, 0, 5, 0); strip.setPixelColor (63 - 61, 0, 5, 0); 1526 strip.show(); delay(1000); 1527 1528 strip.setPixelColor (63 - 21, 0, 0, 0); strip.setPixelColor (63 - 30, 0, 0, 0); strip.setPixelColor (63 - 59, 5, 0, 0); strip.setPixelColor (63 - 60, 5, 0, 0); 1529 strip.show(); delay(1000); 1530 zw10++; 1531 } 1532 while (zw10 != 2); 1533 } 1534 else { 1535 strip.setPixelColor (63 - 2, 0, 5, 0); strip.setPixelColor (63 - 3, 0, 5, 0); strip.setPixelColor (63 - 4, 0, 5, 0); strip.setPixelColor (63 - 5, 0, 5, 0); 1536 strip.setPixelColor (63 - 9, 0, 5, 0); strip.setPixelColor (63 - 14, 0, 5, 0); strip.setPixelColor (63 - 16, 0, 5, 0); strip.setPixelColor (63 - 17, 0, 0, 5); 1537 strip.setPixelColor (63 - 18, 0, 0, 5); strip.setPixelColor (63 - 21, 0, 0, 5); strip.setPixelColor (63 - 22, 0, 0, 5); strip.setPixelColor (63 - 23, 0, 5, 0); 1538 strip.setPixelColor (63 - 24, 0, 5, 0); strip.setPixelColor (63 - 25, 0, 0, 5); strip.setPixelColor (63 - 26, 0, 0, 5); strip.setPixelColor (63 - 29, 0, 0, 5); 1539 strip.setPixelColor (63 - 30, 0, 0, 5); strip.setPixelColor (63 - 31, 0, 5, 0); strip.setPixelColor (63 - 32, 0, 5, 0); strip.setPixelColor (63 - 39, 0, 5, 0); 1540 strip.setPixelColor (63 - 40, 0, 5, 0); strip.setPixelColor (63 - 50, 5, 0, 0); strip.setPixelColor (63 - 53, 5, 0, 0); strip.setPixelColor (63 - 47, 0, 5, 0); 1541 strip.setPixelColor (63 - 49, 0, 5, 0); strip.setPixelColor (63 - 43, 5, 0, 0); strip.setPixelColor (63 - 44, 5, 0, 0); strip.setPixelColor (63 - 54, 0, 5, 0); 1542 strip.setPixelColor (63 - 58, 0, 5, 0); strip.setPixelColor (63 - 59, 0, 5, 0); strip.setPixelColor (63 - 60, 0, 5, 0); strip.setPixelColor (63 - 61, 0, 5, 0); 1543 strip.show(); delay(2000); 1544 1545 }; 1546 1547 // -------------------- Vorbereitung neuer Start Spieler gegen Rechner -------------------- 1548 1549 spielfeld [0] = 1; ausgabe_spielfeld (); 1550 zw1 = 0; zw2 = 0; zw3 = 0; zw4 = 0; zw5 = 0; zw6 = 0; zw7 = 0; zw8 = 0; zw9 = 0; zw10 = 0; 1551 position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; 1552 position_0 = 0; 1553 1554 // Wechsel Start-Spielfarbe 1555 farbe_1 = 0; farbe_2 = 0; sieger = 0; 1556 1557 ausgabe_spielfeld (); 1558 1559 } else { 1560 1561 // -------------------- Ausgabe Siegerfarbe Spieler gegen Spieler -------------------- 1562 1563 zw11 = 0; 1564 1565 if (zw8 != 56 ) { 1566 do { 1567 strip.setPixelColor (63 - position_1, 0, 0, 0); 1568 strip.setPixelColor (63 - position_2, 0, 0, 0); 1569 strip.setPixelColor (63 - position_3, 0, 0, 0); 1570 strip.setPixelColor (63 - position_4, 0, 0, 0); 1571 strip.show(); delay(200); 1572 strip.setPixelColor (63 - position_1, farbe_1); 1573 strip.setPixelColor (63 - position_2, farbe_1); 1574 strip.setPixelColor (63 - position_3, farbe_1); 1575 strip.setPixelColor (63 - position_4, farbe_1); 1576 strip.show(); delay(200); 1577 zw11++; 1578 1579 NewTone(TONE_PIN,3000); 1580 delay(500); 1581 noNewTone(TONE_PIN); 1582 } 1583 while ( zw11 != 3); 1584 } 1585 1586 zw9 = 0; 1587 do { 1588 strip.setPixelColor (63 - zw9, farbe_1); zw9++; 1589 strip.setPixelColor (63 - zw9, farbe_2); zw9++; 1590 } 1591 while (zw9 != 64); 1592 strip.show(); 1593 delay(2000); 1594 1595 // -------------------- Vorbereitung neuer Start Spieler gegen Spieler -------------------- 1596 1597 zw10 = 0; 1598 do { 1599 strip.setPixelColor (63 - zw10, 0, 0, 0); spielfeld [zw10] = 0; 1600 zw10++; 1601 } 1602 while ( zw10 != 64); 1603 strip.show(); 1604 1605 spielfeld [0] = 1; ausgabe_spielfeld (); 1606 zw1 = 0; zw2 = 0; zw3 = 0; zw4 = 0; zw5 = 0; zw6 = 0; zw7 = 0; zw8 = 0; zw9 = 0; zw10 = 0; 1607 position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; 1608 position_0 = 0; 1609 1610 // Wechsel Start-Spielfarbe 1611 farbe_1 = 0; farbe_2 = 0; sieger = 0; 1612 1613 if (status_start == 1) { 1614 farbe = gruen; status_spiel = 2; status_start = 2; 1615 spielfeld [0] = 2; 1616 } else { 1617 farbe = rot; 1618 spielfeld [0] = 1; status_spiel = 1; status_start = 1; 1619 }; 1620 1621 ausgabe_spielfeld (); 1622 }; 1623} 1624 1625// -------------------- Ein Schritt nach Links -------------------- 1626void links_0 () { 1627 if (position_0 != 0) { 1628 spielfeld [position_0] = 0; 1629 position_0--; 1630 spielfeld [ position_0 ] = status_spiel; 1631 1632 NewTone(TONE_PIN,1000); 1633 delay(100); 1634 noNewTone(TONE_PIN); 1635 1636 }; 1637} 1638 1639// -------------------- Ein Schritt nach Rechts -------------------- 1640void rechts_0 () { 1641 if (position_0 != 7) { 1642 spielfeld [position_0] = 0; 1643 position_0++; 1644 spielfeld [ position_0 ] = status_spiel; 1645 1646 NewTone(TONE_PIN,1000); 1647 delay(100); 1648 noNewTone(TONE_PIN); 1649 1650 }; 1651} 1652 1653// -------------------- Absenken des Spielsteines -------------------- 1654void runter_0 () { 1655 zw3 = 0; 1656 do { 1657 if (spielfeld [position_0 + 8] == 0 ) { 1658 spielfeld [position_0] = 0; position_0 = position_0 + 8; spielfeld [position_0] = status_spiel; 1659 zw3++; 1660 NewTone(TONE_PIN,1000); 1661 delay(100); 1662 noNewTone(TONE_PIN); 1663 1664 ausgabe_spielfeld (); delay(200); 1665 } 1666 else { 1667 zw3 = 7; 1668 } 1669 } 1670 while (zw3 != 7) ; 1671 richtung = 0; position_0 = 0; 1672 if (status_spiel == 1 ) { 1673 status_spiel = 2; 1674 spielfeld [position_0] = 2; 1675 } else { 1676 status_spiel = 1; 1677 spielfeld [position_0] = 1; 1678 }; 1679 ausgabe_spielfeld (); 1680} 1681 1682// -------------------- Ausgabe Spielfeld -------------------- 1683void ausgabe_spielfeld () { 1684 zw1 = 0; 1685 1686 do { 1687 zw2 = spielfeld [zw1]; 1688 if (zw2 == 0) { 1689 strip.setPixelColor (63 - zw1, 0, 0, 0); 1690 }; 1691 if (zw2 == 1) { 1692 strip.setPixelColor (63 - zw1, rot); 1693 }; 1694 if (zw2 == 2) { 1695 strip.setPixelColor (63 - zw1, gruen); 1696 }; 1697 zw1++; 1698 } 1699 while (zw1 != 64); 1700 strip.show(); 1701} 1702 1703 1704 1705// ++++++++++++++++++++ Beschreibung Testtabellen ++++++++++++++++++++ 1706// 1707// auswertung_vergleich 1708// Zeile 1 bis 3 1709// Spalten: 1 - 8 Ergebnisse nach Setzen, 9 Maximum, 10 laufende Zeilennummer 1710// 1711// Zeilen: 1712// Zeile 1 -> 2-Gruppe, Zeile 2 -> 3-Gruppe, Zeile 3 -> 4-Gruppe 1713// Zeile 4 = 1 -> setzen moeglich 1714// 1715// Zeile 5 -> hoechste Gruppe von gruen in der betreffenden Spalte 1716// Zeile 6 -> Uebertrag hoechste Gruppe aus auswertung_rot 1717// Zeile 7 -> Wertung aus Zeile 5 und 6 1718// 1719// Zeile 8 -> der höchste Wert in Zeile 7 wird mit einer Zufallzahl multipliziert"); 1720// Damit wird bei mehreren Maxima ein Wert zufaellig ausgewaehlt"); 1721// 1722// Beim ersten Zug wird die Auswertung nicht berueksichtigt"); 1723// 1724// Zeile [11] in auswertung _vergleich 1725// 1726// Spalte [0] = 1 -> Rechner gewinnt. (7) 1727// Spalte [1] = 1 -> Spieler kann gewinnen. (7) 1728// Spalte [2] = 1 -> auswahl_vergleich Zeile [6] (hoechste Wert aus auswertung_rot) alles 3. (8) 1729// Spalte [3] = 1 -> Spieler gewinnt auf jeden Fall. (9) 1730// Spalte [4] = 1 -> max_zug_1 (beste Zug) in allen Spalten gleich 0 (12) 1731// Spalte [5] = 1 -> auswertung_rot [8] alles 3. (13) 1732// Spalte [6] -> Anzahl der Verschiebungen, gewaelte Spalte war gesperrt.(16) 1733// 1734// auwertung_rot 1735// Zeile 1 - 8 1736// Eine Zeile entspricht den 8 Möglichkeiten von Rot bei einer Spalte von Gruen. 1737// Es wird immer die groeste moegliche Gruppe gespeichert. 1738// Zeile 9 -> Die Anzahl der Dreien in einer Spalte. 1739// Zeile 10 -> Die Anzahl der Vieren in einer Spalte.
Downloadable files
Schematic diagram
connect4
Schematic.jpg
Comments
Only logged in users can leave comments