Veröffentlicht 29. November 201014 j Hallo hallo, ich möchte ein Programm schreiben, dass ein Spielfeld printet, dann soll man sagen in welche Richtung man will und dann soll der einen dahinbewegen bis man an einem ziel ist. Das ganze Ding sieht so aus: #include <stdio.h> // Aktuelle Position der Spielfigur short spielfigur_x = 1; short spielfigur_y = 4; // Definition des Spielfelds short spielfeld[10][10] = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,1,0,0,0,1,0,1,0,1}, {1,0,0,0,1,1,0,0,0,1}, {1,1,1,0,1,1,1,1,1,1}, {1,1,1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1,0,1}, {1,0,1,0,0,0,0,1,0,1}, {1,0,0,0,1,1,1,1,2,1}, {1,1,1,1,1,1,1,1,1,1} }; int m,n,b,x,y,e; char eingabe; void ausgabe() { for(m=0;m<10;m++) { for(n=0;n<10;n++) { b=spielfeld[m][n]; if(m==y && n==x) printf("X"); else switch( { case 0: { printf(" "); break; } case 1: { printf("#"); break; } case 2: { printf("O"); break; } } } printf("\n"); } } int tastatur() { printf("In welche Richtung moechten sie gehen?"); scanf("%c",&eingabe); switch(eingabe) { case 'w': { y=y-1; break; } case 's': { y=y+1; break; } case 'a': { x=x-1; break; } case 'd': { x=x+1; break; } case 'q': { printf("3"); x=8; y=8; return(0); break; } } switch(spielfeld[y][x]) { case 0: { printf("1\n"); break; } case 1: { printf("0\n"); switch(eingabe) { case'w': { y=y+1; break; } case's': { y=y-1; break; } case'a': { x=x+1; break; } case'd': { x=x-1; break; } } break; } } } int main(int argc, char **argv ) { x=1; y=4; while((x!=8) || (y!=8)) { ausgabe(); tastatur(); printf("\nx=%d y=%d",x,y); printf("\n\n\n\n\n"); } } [/code]Das Problem ist nun folgendes: Er printet das Feld, macht die Abfrage, dann gibt man was ein und er ändert auch die Position usw richtig. Das einzige Problem ist, dass er die while-Schleife in der main-Funktion nochmal durchgeht, aber keine Abfrage macht und dann nochmal durchgeht und dann die Abfrage funktioniert. Er macht also einen Durchlauf zu viel. ich hoffe ihr versteht, was ich meine. Vielen Dank schonmal
29. November 201014 j Ich habe grade keine Ahnung und keine Lust mich reinzulesen, aber ich habe einen Tipp: Sprechende Variablennamen helfen Helfern dir zu helfen lG
30. November 201014 j Das einzige Problem ist, dass er die while-Schleife in der main-Funktion nochmal durchgeht, aber keine Abfrage macht und dann nochmal durchgeht und dann die Abfrage funktioniert. Er macht also einen Durchlauf zu viel.Das ist ein grundsätzliches Problem bei der Verwendung von scanf mit %c. Beim nächsten Durchlauf ist nämlich noch das Zeichen für die Eingabetaste im Puffer, und das liefert scanf dir dann. Du solltest nach der Eingabe alle Zeichen bis zum Zeilenwechsel auslesen und ignorieren, also statt scanf: eingabe = getchar(); // Ein Zeichen einlesen while(getchar() != '\n'); // Nachfolgende Zeichen bis inklusive Zeilenwechsel ignorieren[/code]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.