C++ Vector ASCII-Hintergrundbild

NephTis

Captain
Registriert
Apr. 2007
Beiträge
3.281
Code:
#include <conio.h>
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>

using namespace::std;

void initPic (void);
void placeCar (void);

vector <string> pic;
vector <string> pic_kopie;

void main (void)

{
	initPic();
	placeCar();

	getch();

}

void initPic (void)
{
	// Feld erstellen
	for (int i = 0; i <= 20; i++)
		{
		pic.push_back("____________________________________________");
		}
}

void placeCar (void)
{
	// Auto auf Standard platzieren
	pic[0][0] = '*';

	// Feld ausgeben
	for (int j = 0; j <= 20; j++)
		{	
		cout << endl;
		cout << pic[j];
		}
}
Hallo!

Es geht darum das ich per vector ein "Spielfeld" auf der Konsole ausgebe auf dem ein "Auto" (Hier der Stern, der auf Startplatz[0][0] steht) steht. Das klappt soweit auch --> Siehe Quellcode!

Nun will ich aber dass das Auto ('*'), sich nach jedem Funktionsaufrauf placeCar() im Bild um eine Stelle bewegt. z.B. geradeaus oder nach unten.

Habe überlegt das Fahrzeug entsprechend seiner aktuellen Position immer wieder in eine frische Kopie (Vector pic_kopie) des Hintergrundbildes zu zeichnen... Sonst müsste ich es ja immer wieder restaurieren, weil ich sonst irgendwann ganz viele Sterne auf der Konsole habe.

Jemand ne Idee? Vielleicht öffnet ihr kurz das Programm, dann wisst ihr was ich meine.
 
Mit \r und \b usw. wäre es sicherlich auch möglich.

\b geht ein Zeichen zurück
\r An den Anfang der Zeile oder eine Zeile zurück.

Du kannst theoretisch durch die Zeilen hüpfen wie du magst, ohne sie nochmal auszugeben. (d.h. an beliebiger Stelle i-was überschreiben/ändern.)

Ob hier sowas sinnvoll ist, andere Geschichte. Ich würde einfach die Konsole clearen und neu ausgeben, geht vermutlich schneller :P
 
Zuletzt bearbeitet:
Mach dir ein Array wo die "saubere" Karte drin ist und ein gleichgroßes Array welches Du zum Zeichnen benutzt. Dann kopierst du jedes mal die saubere Karte in den Zeichenbereich und setzt dort dein Auto/Sternchen.

Wenn die Kartengröße sich nicht ändert würde ich das ganze auch nicht mit std::* umsetzen sondern mit einem simplen char array und dann via memcpy() kopieren. Das ist allemal schneller als die Logik um in einem std::vector rumzuwursteln.

Und am besten auf dem Stack (also nicht mit new/malloc erstellt) wenn die Kartengröße sich niemals ändert.
 
Zurück
Oben