myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C++ großen Array schnell ausgeben

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 04.02.12, 10:12   #1
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard 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.
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:33   #2
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

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?
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:37   #3
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:38   #4
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

Schreib erst alles in einen Buffer und gib diesen dann aus.
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:39   #5
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

Was ist der Buffer ? Auch ein Char Array ?
Kommt ja dann aufs selbe raus oder nicht ?
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:43   #6
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

gehts nicht einfach mit


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

??
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:43   #7
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:48   #8
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

Und mit wird doch auch jedes Zeichen einzeln auf den bildschirm gezeichnet..oder ?
Mein Buffer ist doch dann auch ein char array oder nicht ?
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:51   #9
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

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
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:51   #10
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:56   #11
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 10:58   #12
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 11:01   #13
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 11:01   #14
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

kannst es mal mit nem buffer probieren,
dann sparst du dir ja auch die for-schleife
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 11:02   #15
noob1
*Make you smile*
 
Benutzerbild von noob1
 
Registriert seit: Jul 2009
Beiträge: 215
Bedankt: 86
noob1 ist noch neu hier! | 0 Respekt Punkte
Standard

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
noob1 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 11:06   #16
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

viel helfen konnt ich ja nicht :P

viel glück
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 04.02.12, 15:51   #17
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 12.02.12, 18:26   #18
dustail
Newbie
 
Benutzerbild von dustail
 
Registriert seit: Mar 2009
Beiträge: 82
Bedankt: 45
dustail gewöhnt sich langsam dran | 35 Respekt Punkte
Standard

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?
dustail ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.


Sitemap

().