Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
04.02.12, 10:12
|
#1
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
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.
|
|
|
04.02.12, 10:33
|
#2
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
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?
|
|
|
04.02.12, 10:37
|
#3
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
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.
|
|
|
04.02.12, 10:38
|
#4
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Schreib erst alles in einen Buffer und gib diesen dann aus.
|
|
|
04.02.12, 10:39
|
#5
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
Was ist der Buffer ? Auch ein Char Array ?
Kommt ja dann aufs selbe raus oder nicht ?
|
|
|
04.02.12, 10:43
|
#6
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
gehts nicht einfach mit
for(unsigned int i = 0; i < 20; i++){
cout << mein_spielfeld[i] << endl;
}
??
|
|
|
04.02.12, 10:43
|
#7
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
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.
|
|
|
04.02.12, 10:48
|
#8
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
Und mit wird doch auch jedes Zeichen einzeln auf den bildschirm gezeichnet..oder ?
Mein Buffer ist doch dann auch ein char array oder nicht ?
|
|
|
04.02.12, 10:51
|
#9
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
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
|
|
|
04.02.12, 10:51
|
#10
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
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.
|
|
|
04.02.12, 10:56
|
#11
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
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.
|
|
|
04.02.12, 10:58
|
#12
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
Ja schon klar
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.
|
|
|
04.02.12, 11:01
|
#13
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
Warum bin ich vorher nicht auf die Idee mit dem String gekommen ?!
Ich probier mal obs geht  wenn nicht dann meld ich mich nochmal hier.
Danke für deine Hilfe
|
|
|
04.02.12, 11:01
|
#14
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
kannst es mal mit nem buffer probieren,
dann sparst du dir ja auch die for-schleife
|
|
|
04.02.12, 11:02
|
#15
|
*Make you smile*
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
|
Warum bin ich vorher nicht auf die Idee mit dem String gekommen ?!
Ich probier mal obs geht  wenn nicht dann meld ich mich nochmal hier.
Danke für deine Hilfe
|
|
|
04.02.12, 11:06
|
#16
|
Newbie
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
|
viel helfen konnt ich ja nicht :P
viel glück
|
|
|
04.02.12, 15:51
|
#17
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
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.
|
|
|
12.02.12, 18:26
|
#18
|
Newbie
Registriert seit: Mar 2009
Beiträge: 82
Bedankt: 45
|
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?
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
().
|