Einzelnes Zeichen auf Konsole löschen
-
Funktioniert:
So meinst du ?
if (eingabe == key_down) { py = py + 1; cursor_pos( px , py); cout<<" "; cout<< figur; }Funktioniert aber auch nicht.
-
konsole schrieb:
Funktioniert:
...
Funktioniert aber auch nicht.
Ähm, ok...

Nee, ich meine natürlich so:
if (eingabe == key_down) { cursor_pos( px , py); //Cursor an die alte Stelle setzen (da hast du zuletzt geschrieben) cout<<" "; //Leerzeichen schreiben, also Figur an der alten Position löschen py = py + 1; //JETZT neue Position festlegen cursor_pos( px , py); //Cursor an die neue Position setzen cout<< figur; //Figur an der neuen Position schreiben }
-
Man könnte auch noch eine kleine Zusatzfunktion einführen, die ein Zeichen an eine bestimmte Stelle malt
void writeChar( int x, int y, char c ) { cursor_pos( x, y ); std::cout << c; }Und dann eben:
if ( eingabe == kes_down ) { // Alte Position löschen writeChar( px, py, ' ' ); // Position updaten ++py; // Männchen malen writeChar( px, py, figur ); }
-
Badestrand schrieb:
Man könnte auch noch eine kleine Zusatzfunktion einführen,
Man könnte an dem Code noch eine ganze Menge machen...

-
matze hat einen guten Ansatz. Wenn man nur gerade runter geht, dann funktioniert es. Drückt man vorher links oder rechts, hakt es noch ein bisschen.
-
FreakY<3Cpp schrieb:
matze hat einen guten Ansatz. Wenn man nur gerade runter geht, dann funktioniert es. Drückt man vorher links oder rechts, hakt es noch ein bisschen.
Ich habe eigentlich gar keinen Ansatz.
Ich habe nur den einen case-Zweig so umgebastelt, wie es einfach logisch ist. Ob das komplette Programm funzt, weiß ich nicht. Mit links und rechts hab ich mich nicht beschäftigt (das sollte er dann aber selbst locker hinkriegen)...
-
_matze schrieb:
Man könnte an dem Code noch eine ganze Menge machen...

Hehe, da haste Recht

Drückt man vorher links oder rechts, hakt es noch ein bisschen.
Noch ne kleine Funktion:void updatePosition( int dx, int dy ) { // Alte Position löschen writeChar( px, py, ' ' ); // Position updaten px += dx; py += dy; // Männchen malen writeChar( px, py, figur ); } if ( eingabe == key_down ) updatePosition( 0, +1 ); // x-Position bleibt, y-Richtung plus eins. else if ( eingabe == ... ) ...edit: Um's ganz deutlich zu machen, ginge natürlich auch
updatePosition( +-0, +1 );
-
Ich hab das jetzt so gemacht:
Damit bin ich für den Anfang erst mal zu frienden.
while(1) { eingabe = getch(); cout<<" "; if (eingabe == key_left) { px = px - 1; cursor_pos( px , py); cout<<figur; cursor_pos( px , py); } if (eingabe == key_right) { px = px + 1; cursor_pos( px , py); cout<<figur; cursor_pos( px , py); } if (eingabe == key_down) { py = py + 1; cursor_pos( px , py); cout<<figur; cursor_pos( px , py); } if (eingabe == key_up) { py = py - 1; cursor_pos( px , py); cout<<figur; cursor_pos( px , py); } }Hat wer zufällig ein paar Tipps zu Kollisons abfragen?
Wenn die Figur z.b. gegen die Wand läuft soll sie einfach stehen bleiben.
Meine level bau funktion^^
Die Funktion baut einfach einen Kasten^^ ( Dein der ist nich so krum und schief wie bei meiner "Zeichnung" )
"Zeichnung"
oben ____________
seiten_w | seite_w_a |
seiten_w |seiten_wa |
boden _____________int level_bauen (char wand, int oben , int seiten_w , int seiten_w_a , int boden) { for (int i = 0 ; i < oben ; i++ ) { cout <<wand ; } cout << endl ; for (int i = 0 ; i < seiten_w ; i++ ) { cout << wand << setw( seiten_w_a ) <<wand<<endl; } for (int i=0 ; i< boden ; i++) { cout << wand ; } return 0; }
-
Das jeweils zweite cursor_pos kannst du dir sparen und es stattdessen einmal vor das Schreiben des Leerzeichens setzen.
-
ok funktioniert ty