Snake-Klon

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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

    GML-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "c:\display.h" //FINDET IHR IM ANHANG!
    4. int main()
    5. {
    6. int pos_x=1,pos_y=10; //Aktuelle Position des letzten Schlangen-Glieds
    7. int pos_x_a[100],pos_y_a[100]; //(Position der letzten 100 Schlangen-Glieder)
    8. int i=0,n=0; //Zählvariablen (i=Array-Zähler)
    9. char snake_dir; //Eingabe durch den Spieler ('W','A','S','D')
    10. do
    11. {
    12. if (i>=99) //Damit das Array nicht überfüllt wird (hat nur 100 Elemente)
    13. i=0;
    14. setcursortype(NOCURSOR);
    15. gotoXY(pos_x,pos_y); //Cursor springt zur neuen Position...
    16. printf("%c",2); //...und gibt einen Smiley aus (1 Glied der Schlange)
    17. snake_dir=getch(); //Eingabe der Richtung
    18. switch(snake_dir) //Auswertung der Eingabe
    19. {
    20. case 'w': if (pos_y>=1)
    21. pos_y--;
    22. break;
    23. case 'a': if (pos_x>=1)
    24. pos_x--;
    25. break;
    26. case 's': if (pos_y<=24)
    27. pos_y++;
    28. break;
    29. case 'd': if (pos_x<=79)
    30. pos_x++;
    31. break;
    32. }
    33. pos_x_a[i]=pos_x; //Die Position jedes Smileys wird in in einem Array gespeichert
    34. pos_y_a[i]=pos_y; // -"-
    35. for(n=0;n<i;n++) //Es wird geprüft, ob sich die Schlange selbst trifft
    36. {
    37. if ((pos_x_a[n]==pos_x) && (pos_y_a[n]==pos_y))
    38. {
    39. printf("%c",1);
    40. _sleep(1000);
    41. clrscr();
    42. gotoXY(80/2-4,24/2);
    43. textcolor(RED);
    44. printf("VERLOREN");
    45. textcolor(BLACK);
    46. return 0;
    47. }
    48. }
    49. i++;
    50. }
    51. while(1);
    52. return 0;
    Alles anzeigen

    display.h.zip

    EDIT: Falls es jemanden interessiert, ich hab das Probem gelöst, indem ich vor das

    GML-Quellcode

    1. snake_dir=getch();

    einfach die Abfrage

    GML-Quellcode

    1. if (kbhit())

    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 ()