IltisvdT Geschrieben 29. November 2010 Geschrieben 29. November 2010 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 Zitieren
Brabax Geschrieben 29. November 2010 Geschrieben 29. November 2010 Ich habe grade keine Ahnung und keine Lust mich reinzulesen, aber ich habe einen Tipp: Sprechende Variablennamen helfen Helfern dir zu helfen lG Zitieren
Klotzkopp Geschrieben 30. November 2010 Geschrieben 30. November 2010 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] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.