jeg skal lave et snake spil, problemer er at den lagger når man trykker på en tast, jeg vil spørge om der er en bedre måde at lave det på: mit fehlscript: while(loop) { sleep(100); if (!kbhit()) { cout << "#"; } else { int input = getch(); if (input == 75) { .... } }
problemet med mit slamkode er at den lagger når man trykker på en tast, så spillet kommer til at kørere mærkligt.
det spørgsmål du linker til ændre kun position når man trykker på en knap, i et snake baseret script, skal den selv bevæge sig hver antal ms, og når man trykker på en task ændre den en værdi der fortæller script hvilken vej den skal bevæge sig hver antal ms. Problemet med mit script er at den lagger sykt når man trykker på en task.
Jeg forstår ikke hvad "lagger sykt" betyder. I spørgsmålet som jeg linker til kunne man tilføje to variabler dx og dy. Disse kunne sættes til værdierne 1 og 0 initielt, for hver runde i loopen kunne man så lægge dx til pos.x og dy til pos.y. Når der blev trykket på f.ex venstre tast kunne man sætte dx til -1 og dy til 0, ved tryk på ned kunne dx sættes til 0 og dy til 1 etc.
når scriptet kører ændre den selv koordinaterne til #'en hver 100 ms i en bestemt retning. Når man så trykker på en tast, ændre scriptet retningen, så #'en bevæger sig i en ny retning. Problemet er at når man trykker på en tast, går der en 3 loops der tager mindst 200ms. Jeg skal finde en anden metode at kører scriptet på, så det ikke lagger når man trykker på en knap og scriptet skal ændre retning på #'en.
1: Du bør nok flytte snak'en for hver gennemløb af loopen. 2: Du bør nok slette noget af halen for hver gennemløb, ellers bliver slangen hurtigt for lang. 3: Når man trykker på en piletast returnerer getch() først et 0 og derefter 75 etc.
F.ex: while(loop) { sleep(100); gotoxy(x, y) cout << " "; // slet halen if (direction == 1) { x += 1; } // osv. gotoxy(x, y) cout << "#";
if (kbhit()) { int input = getch(); if(input == 0) { input = getch(); if (input == 75) { direction = 1; } if (input == 77) { direction = 2; } // osv. } } }
Dette vil give en slange med et hoved men uden hale. Du kan herefter lave et array så du kan huske hvor slangen er så du kan slette enden af halen.
der er ingen fejl i koden, problemet er at den er meget langsom. alt det andet pjat med selve snake-spillet har jeg kodet, problemet er at scriptet går lidt i stå når man trykker på en tast. Mit virker ikke hvis jeg smider en if(input == 0) ind. men det virkede fint før.
Hviken kode er der ikke fejl i? Hvilken kompiler bruger du? Prøv at lave følgende lille program og se hvad der sker når du trykker på piletasterne, prøv også at trykke på H (dvs shift h):
#include <stdio.h> #include <conio.h>
int main(void) { int x; while((x = getch()) != 'q') { printf("Key %d\n", x); } return 0; }
det var da lidt kedeligt. Men mange tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.