int Game(int port, const char *ApplicationPath) { // Variabeln definieren char Name[20]; // Array für Spielername int Zeichen; // Variable zur Verarbeitung der eingelesenen Zeichen int key; // Variable zum einlesen der Zeichen von der Tastatur int dir = 0; // Variable zum speichern der Richtung int dir_old = 0; // Variable zum speichern der letzten Richtung int score; // Variable für den Score int winner; // Variable für Rückgabewert der Highscorefunktion // Wird 1 wenn Highscore geknackt wurde, sonst 0 int i = 0; // Bildschirm löschen ClearWindow(); // Spielernamen einlesen SelectFont("Arial MS", 15, FONT_NORMAL); DrawTextXY (50, 50, COL_GREEN, "Bitte Namen eingeben:"); while((key = GetKeyPress()) != W_KEY_RETURN ){ Zeichen = key; // Anzahl der Zeichen begrenzen, Leertaste unterdrücken if ((Zeichen >= ' ')&&(i < 19) && (Zeichen != 0x20) ){ Name[i] = Zeichen; Name[i+1] = '\0'; i++; } // Möglichkeit Zeichen zu löschen if( Zeichen == '\b'){ if(i>0){ i--; Name[i]='\0'; DrawFilledRectangle(270, 25, 300, 40, COL_BLACK, 1); } } // Bisherige Eingabe anzeigen DrawTextXY (270, 50, COL_RED, Name); } DrawTextXY (50, 80, COL_GREEN, "Now playing! [ESC] to escape"); if (InitSerialPort(port, Bd9600, P_NONE, 8, 1) == 0) // COM1 { printf("\nPort opened: COM%d", port); do { if(IsKeyPressReady()) // Wenn Taste gedrückt { key = GetKeyPress(); switch(key) { case W_KEY_CURSOR_UP: if(dir_old != 'd') { dir = 'u'; } break; case W_KEY_CURSOR_DOWN: if(dir_old != 'u') { dir = 'd'; } break; case W_KEY_CURSOR_LEFT: if(dir_old != 'r') { dir = 'l'; } break; case W_KEY_CURSOR_RIGHT: if(dir_old != 'l') { dir = 'r'; } break; case W_KEY_ESCAPE: case W_KEY_CLOSE_WINDOW: ShutdownSerialPort(); return 0; break; default: key = NO_VALID_KEY; break; } // Nur wenn Key gültig ist und der Wert geändert hat ein Zeichen ans Carmekit senden if(dir != dir_old) { SendByteToSerialPort(dir); // Alter Wert speichern dir_old = dir; } } score = GetByteFromSerialPort(); } while (score == -1); ShutdownSerialPort(); winner=highscore(Name , score , ApplicationPath); SelectFont("Arial MS", 20, FONT_ITALIC); if(winner == 1) { DrawTextXY (220, 200, COL_GREEN, "Du hast den High Score geknackt!"); } else { DrawTextXY (220, 200, COL_GREEN, "Game over."); } SelectFont("Arial MS", 15, FONT_NORMAL); DrawTextXY (220, 230, COL_GREEN, "Press any key to continue."); while(!IsKeyPressReady()) ; } return 0; }
void MenuVar(int i) { switch(i){ case 1: //Hauptmenu SelectFont("LCD", 30, FONT_BOLD); DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK, 2) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Hauptmenu"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(550,130,COL_GREEN,"1: Level-Modus"); DrawEmptyRectangle(150, 160,1000,50, COL_GREEN, 2) ; DrawTextXY(550,200,COL_GREEN,"2: Einzelspiel"); DrawEmptyRectangle(150, 230,1000,50, COL_GREEN, 2) ; DrawTextXY(550,270,COL_GREEN,"3: Highscore"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(400,480,COL_GREEN,"0: zurueck zum hauptmenu"); break; case 2: //Levelmodus SelectFont("LCD", 30, FONT_BOLD); DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK, 1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Levelmodus"); DrawEmptyRectangle(150, 90,1000,50, COL_GREEN, 1) ; DrawTextXY(350,130,COL_GREEN,"1: Ein Spieler (gegen Computer)"); DrawEmptyRectangle(150, 160,1000,50, COL_GREEN, 1) ; DrawTextXY(535,200,COL_GREEN,"2: Zwei Spieler"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 1) ; DrawTextXY(400,480,COL_GREEN,"0: zurueck zum hauptmenu"); break; case 3: //Einzelspiel SelectFont("LCD", 30, FONT_BOLD); DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK, 1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Einzelspiel"); DrawEmptyRectangle(150, 90,1000,50, COL_GREEN, 1) ; DrawTextXY(350,130,COL_GREEN,"1: Ein Spieler (gegen Computer)"); DrawEmptyRectangle(150, 160,1000,50, COL_GREEN, 1) ; DrawTextXY(535,200,COL_GREEN,"2: Zwei Spieler"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 1) ; DrawTextXY(400,480,COL_GREEN,"0: zurueck zum hauptmenu"); break; case 4: //Schwierigkeit SelectFont("LCD", 30, FONT_BOLD); DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK, 1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Schwierigkeit"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 1) ; DrawTextXY(450,130,COL_GREEN,"1: Schwierigkeitsgrad 1"); DrawEmptyRectangle(150, 160,1000,50, COL_GREEN, 1) ; DrawTextXY(450,200,COL_GREEN,"2: Schwierigkeitsgrad 2"); DrawEmptyRectangle(150, 230,1000,50, COL_GREEN, 1) ; DrawTextXY(450,270,COL_GREEN,"3: Schwierigkeitsgrad 3"); DrawEmptyRectangle(150, 300,1000,50, COL_GREEN, 1) ; DrawTextXY(450,340,COL_GREEN,"4: Schwierigkeitsgrad 4"); DrawEmptyRectangle(150, 370,1000,50, COL_GREEN, 1) ; DrawTextXY(450,410,COL_GREEN,"5: Schwierigkeitsgrad 5"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 1) ; DrawTextXY(400,480,COL_GREEN,"0: zurueck zum hauptmenu"); break; case 5: //Highscore SelectFont("LCD", 30, FONT_BOLD); DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK, 1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Highscore"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 1) ; DrawTextXY(400,130,COL_GREEN,"1: Alle Eintraege loeschen"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 1) ; DrawTextXY(400,480,COL_GREEN,"0: zurueck zum hauptmenu"); break; } }
int Edit(SpielerName *Spieler) { // Buffervariablen definieren char spielername1[15]; //lokaler string name1 char spielername2[15]; // Lokaler string name2 char spielerbuffer[15]; // Name buffer fuer loeschfunktion int key; int i=0; //Countervariable // Buffervariablen "leeren" strncpy(spielername1," ",15); strncpy(spielername2," ",15); // Grundbild zeichen DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; // Hintergrund DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; // Umrandung DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); DrawTextXY(550,200,COL_GREEN,spielername1); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,480,COL_GREEN,"0: Beenden"); // Spieler 1 // Durchlauf 14 mal, bis das array voll ist for(i=0;i<14;i++) { key=GetKeyPress(); // Tastendruck auslesen if((key>=32) && (key<=128)) // Nur Gross- und Kleinbuchstaben beruecksichtigen { // Hintergrundbild aktualisieren DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); spielername1[i]=key; // Zeichenzuweisung DrawTextXY(550,200,COL_GREEN,spielername1); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,480,COL_GREEN,"0: Beenden"); } if (key==8) // 8 entspricht backspace { DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; strncpy(spielerbuffer,spielername1,15); // aktueller Name zwischenspeichern strncpy(spielername1," ",15); // Spielername reseten strncpy(spielername1,spielerbuffer,i-1); // Name zurückschreiben mit länge -1 strncpy(spielerbuffer," ",15); // Buffer löschen DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,200,COL_GREEN,spielername1); // Name erneut schreiben DrawTextXY(550,480,COL_GREEN,"0: Beenden"); i=i-2; // Counter auf Start reseten } if (key== 13)// wenn Enter gedrückt wird (Enter = ASCII 13) { i=14; // Counter auf "voll" setzten, Schlaufe wird verlassen } if (key== '0') // Abbruch { return 0; } } // Spieler 2 i=0; //Zähler reseten //Hintergrund zeichen DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); DrawEmptyRectangle(150,250,1000,50, COL_GREEN, 2) ; DrawTextXY(350,290,COL_GREEN,"Name von Spieler 2 eingeben"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,480,COL_GREEN,"0: Beenden"); spielername2[i]=key; // Zeichenzuweisung DrawTextXY(550,200,COL_GREEN,spielername1); DrawTextXY(550,360,COL_GREEN,spielername2); // durchlaufen bis array voll for(i=0;i<14;i++) { key=GetKeyPress(); // Tastendruck auslesen if((key>=32) && (key<=128)) // Nur Gross- und Kleinbuchstaben beruecksichtigen { //Hintergrund aktualisieren DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); DrawEmptyRectangle(150,250,1000,50, COL_GREEN, 2) ; DrawTextXY(350,290,COL_GREEN,"Name von Spieler 2 eingeben"); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,480,COL_GREEN,"0: Beenden"); spielername2[i]=key; // Zeichenzuweisung DrawTextXY(550,200,COL_GREEN,spielername1); DrawTextXY(550,360,COL_GREEN,spielername2); } if (key==8) // 8 entspricht backspace { DrawFilledRectangle(0, 0, 1300, 750, COL_BLACK,1) ; strncpy(spielerbuffer,spielername2,15); // aktueller Name zwischenspeichern strncpy(spielername2," ",15); // Spielername reseten strncpy(spielername2,spielerbuffer,i-1); // Name zurückschreiben mit länge -1 strncpy(spielerbuffer," ",15); // Buffer löschen DrawEmptyRectangle(0, 0, 1300, 750, COL_GREEN, 4) ; DrawTextXY(550,51,COL_GREEN,"Level-Modus"); DrawEmptyRectangle(150,90,1000,50, COL_GREEN, 2) ; DrawTextXY(350,130,COL_GREEN,"Name von Spieler 1 eingeben"); DrawEmptyRectangle(150,250,1000,50, COL_GREEN, 2) ; DrawTextXY(350,290,COL_GREEN,"Name von Spieler 2 eingeben"); DrawTextXY(550,200,COL_GREEN,spielername1); DrawTextXY(550,360,COL_GREEN,spielername2); DrawEmptyRectangle(150, 440,1000,50, COL_GREEN, 2) ; DrawTextXY(550,480,COL_GREEN,"0: Beenden"); i=i-2; // Counter reseten } if (key== 13) // Wenn Enter, counter auf "voll", schlaufe wird verlassen { i=14; } if (key== '0') // Abbruch { return 0; } } // Übertrag aus buffer auf Counter übertragen strncpy(Spieler->Spieler1,spielername1,15); strncpy(Spieler->Spieler2,spielername2,15); return 1; }