Ich habe mich daran versucht, eine Art Snake-Klon in C zu programmieren, (in der Konsole), allerdings scheitere ich an der grundsätzlichen Sache, dass ich nicht wirklich weiß, wie ich das mit der Eingabe des Spielers hinkrieg. Derzeit verwende ich
dir_taste=getch();
was zwar ganz gut funktioniert, aber den Nachteil hat, dass das Spiel nicht weitergeht, bevor der Benutzer nicht eine Taste drückt. Das Programm wartet in dieser Zeit. Da das Spiel aber auf Zeitdruck aufgebaut sein soll, macht aber diese Art der Eingabe das Spielprinzip zunichte.
Welche Funktion könnte ich stattdessen verwenden?
Hier der aktuelle Code (hoffe es ist ausreichend kommentiert)
Spoiler anzeigen
Alles anzeigen
display.h.zip
EDIT: Falls es jemanden interessiert, ich hab das Probem gelöst, indem ich vor das
einfach die Abfrage
gesetzt hab. Das prüft, ob eine Taste gedrückt ist. Wenn ja, wird die Taste dann in snake_dir gespeichert und kann dann ausgewertet.
dir_taste=getch();
was zwar ganz gut funktioniert, aber den Nachteil hat, dass das Spiel nicht weitergeht, bevor der Benutzer nicht eine Taste drückt. Das Programm wartet in dieser Zeit. Da das Spiel aber auf Zeitdruck aufgebaut sein soll, macht aber diese Art der Eingabe das Spielprinzip zunichte.
Welche Funktion könnte ich stattdessen verwenden?
Hier der aktuelle Code (hoffe es ist ausreichend kommentiert)
GML-Quellcode
- #include <stdio.h>
- #include <stdlib.h>
- #include "c:\display.h" //FINDET IHR IM ANHANG!
- int main()
- {
- int pos_x=1,pos_y=10; //Aktuelle Position des letzten Schlangen-Glieds
- int pos_x_a[100],pos_y_a[100]; //(Position der letzten 100 Schlangen-Glieder)
- int i=0,n=0; //Zählvariablen (i=Array-Zähler)
- char snake_dir; //Eingabe durch den Spieler ('W','A','S','D')
- do
- {
- if (i>=99) //Damit das Array nicht überfüllt wird (hat nur 100 Elemente)
- i=0;
- setcursortype(NOCURSOR);
- gotoXY(pos_x,pos_y); //Cursor springt zur neuen Position...
- printf("%c",2); //...und gibt einen Smiley aus (1 Glied der Schlange)
- snake_dir=getch(); //Eingabe der Richtung
- switch(snake_dir) //Auswertung der Eingabe
- {
- case 'w': if (pos_y>=1)
- pos_y--;
- break;
- case 'a': if (pos_x>=1)
- pos_x--;
- break;
- case 's': if (pos_y<=24)
- pos_y++;
- break;
- case 'd': if (pos_x<=79)
- pos_x++;
- break;
- }
- pos_x_a[i]=pos_x; //Die Position jedes Smileys wird in in einem Array gespeichert
- pos_y_a[i]=pos_y; // -"-
- for(n=0;n<i;n++) //Es wird geprüft, ob sich die Schlange selbst trifft
- {
- if ((pos_x_a[n]==pos_x) && (pos_y_a[n]==pos_y))
- {
- printf("%c",1);
- _sleep(1000);
- clrscr();
- gotoXY(80/2-4,24/2);
- textcolor(RED);
- printf("VERLOREN");
- textcolor(BLACK);
- return 0;
- }
- }
- i++;
- }
- while(1);
- return 0;
display.h.zip
EDIT: Falls es jemanden interessiert, ich hab das Probem gelöst, indem ich vor das
einfach die Abfrage
gesetzt hab. Das prüft, ob eine Taste gedrückt ist. Wenn ja, wird die Taste dann in snake_dir gespeichert und kann dann ausgewertet.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Toshiro ()