myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   C++ großen Array schnell ausgeben (https://mygully.com/showthread.php?t=2563716)

noob1 04.02.12 10:12

C++ großen Array schnell ausgeben
 
Hey Leute,

Hab angefangen Snake zu Programmieren.
Das Spielfeld hab ich als 20x60 Array initialisiert.

Mein Problem ist jetzt nur das wenn ich es komplett ausgebe ( Nur Leerzeichen außer die Ränder) das es dann 'flackert'.
Also meine Schlange bewegt sich und bei jedem erneuten Bildaufbau flackert der Rand den man sieht.

Die Darstellung dauert einfach zu lange >.<

Ich geb den ganzen Array zeichen für zeichen ( als chars ) mit ner for-schleife aus.
Aber es dauert 'zu lange' und dadurch sieht man ein leichtes flackern.

Hat jemand eine Idee wie man es noch machen könnte ?

EDIT: Das ganze stell ich in einem DOS Fenster dar.

Madddin_89 04.02.12 10:33

Wie gibst du denn die Zeichen in der Konsole aus??
über cout oder printf() oder?

Du könntest doch einfach dein Array Zeilenweise ausgeben...
oder lässt das deine Implementation nicht zu?

noob1 04.02.12 10:37

ich geb sie mit cout aus

ja wie geht das zeilenweise ?
Doch sollte gehen, ich arbeite einfach mit einem 2D Array und mit 2 Koordinaten für die Schlange.

Your_Conscience 04.02.12 10:38

Schreib erst alles in einen Buffer und gib diesen dann aus.

noob1 04.02.12 10:39

Was ist der Buffer ? Auch ein Char Array ?
Kommt ja dann aufs selbe raus oder nicht ?

Madddin_89 04.02.12 10:43

gehts nicht einfach mit


for(unsigned int i = 0; i < 20; i++){
cout << mein_spielfeld[i] << endl;
}

??

noob1 04.02.12 10:43

Würde auch gehen, wäre dann nur ne riesengroße Rechnerrei um die Bewegung der Schlange zu bestimmen. Mit dem 2D Array kann ich ja sagen das wenn man z.B w drückt der in der höhe eins nach oben geht aber in der breite bleibt also feld [h+1][b] und mit dem eindimensionalen müsst ich ja erstmal zählen wieviel zeichen der dann zurück müsste um eins rauf zu kommen.

noob1 04.02.12 10:48

Und mit wird doch auch jedes Zeichen einzeln auf den bildschirm gezeichnet..oder ?
Mein Buffer ist doch dann auch ein char array oder nicht ?

Madddin_89 04.02.12 10:51

nene war blöd von mir

Deklaration

char mein_spielfeld[20][60];

+ die for-schleife


das cout müsste dann eigenltich die 60 zeichen komplett auf einmal ausgeben

noob1 04.02.12 10:51

ja ich geb die 20x60 zeichen in ner for-schleife mit nem cout einzeln aus.

Es steht ja dadurch dann komplett da, nur dauerts denk ich zu lange da der bildschirm immer flackert beim erneuten bildaufbau.

Madddin_89 04.02.12 10:56

ich hab gelernt, dass sprünge im programm sehr langsam sind
und eine for-schleife nichts anderes ist
und wenn du jedes zeichen einzeln ausgibst

hast du 20*60 sprünge + 20*60 couts usw.

noob1 04.02.12 10:58

Ja schon klar :p

Das Problem ist ja das es anscheinend nicht anders geht.
Bin am überlegen ob ich diesen großen Array nicht einfach in einen String schreibe als eine art Buffer und diesen ausgeb. Der kann ja komplett ausgegeben werden.

noob1 04.02.12 11:01

Warum bin ich vorher nicht auf die Idee mit dem String gekommen ?! :D
Ich probier mal obs geht ;) wenn nicht dann meld ich mich nochmal hier.

Danke für deine Hilfe :)

Madddin_89 04.02.12 11:01

kannst es mal mit nem buffer probieren,
dann sparst du dir ja auch die for-schleife

noob1 04.02.12 11:02

Warum bin ich vorher nicht auf die Idee mit dem String gekommen ?! :D
Ich probier mal obs geht ;) wenn nicht dann meld ich mich nochmal hier.

Danke für deine Hilfe :)

Madddin_89 04.02.12 11:06

viel helfen konnt ich ja nicht :P

viel glück

Your_Conscience 04.02.12 15:51

Ich habe doch schon am Anfang gesagt gehabt, dass du einen Buffer nehmem sollst.
Zitat:

Zitat von noob1
Was ist der Buffer ? Auch ein Char Array ?

Ja, da kannst du einen Char-Array nehmen,
Zitat:

Zitat von noob1
Kommt ja dann aufs selbe raus oder nicht ?

Nein, da du erst alles in den Buffer schreibst und dann nur ein einziges mal ausgibst. Das Problem bei dir liegt nicht an deiner Schleife, sondern dass du so oft etwas ausgibst.

dustail 12.02.12 18:26

Zitat:

char *buffer;
int size = (spielfeldgroesse);
buffer = new char[size];
for( int i = 0; i < size; i++ )
buffer[i] = spielfeld[i];
cout << buffer;
Vielleicht ein Lösungsansatz mit buffer?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.