Ping Pong und Threads ;S
-
eek schrieb:

:???:
-
Niemand wird sich so viel Code durchgucken, besonders bei so einer eher vagen Problembeschreibung. Versuche, deinen Code auf das wesentliche zu beschränken (hier zum Beispiel den Teil, der für die Darstellung sorgt, da damit ja etwas nicht stimmt). Lies dir auch mal diesen Thread durch:
Du brauchst Hilfe?
-
So nun nochmal etwas Stukturierter:
Ich möchte mein Pingpong feld und die Ballbewegungen(Konstant bspw. o------>|)
paralell zu einer Nutzereingabe laufenlassen in dem 2 Schläger(|) über die Pfeiltasten gesteuert werden, das Problem ist :
Die Bewegung wird gestartet drück ich dann nach oben oder nach unten escheinen ganz schnell 3 Shlägerpaare und verschwinden sofort wieder:Hauptspielfeld und Bewegungsfunktion-Aufrufe sowie Thread aufruf:
int spielfeld() { char spielfeld [21][51]= { (" "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" "), (" "), // zusätzlich eingefügte 21. Zeile...=> spielfeld[20][spalten] }; _beginthread(spielerbewegung,0,NULL); while(1) { bewegung1(spielfeld); bewegung2(spielfeld); bewegung3(spielfeld); bewegung4(spielfeld); bewegung5(spielfeld); bewegung6(spielfeld); bewegung7(spielfeld); bewegung8(spielfeld); } _endthread(); return 0; }Beispiel für Bewegung
void bewegung1(char spielfeld[21][51]) { int y = 1; spielfeld[1][47]='|'; spielfeld[2][47]='|'; for(int x=0;x<=43;x++) { spielfeld[1][3+x]='o'; if (x != 0) spielfeld[1][2+x]=' '; if (x == 22 && x == 23) spielfeld[1][25]='|'; spielfeldausgabe(spielfeld); } }Spielfeldausgabe
void spielfeldausgabe(char spielfeld[21][51]) { for(int x=0; x<=20;x++) { for(int y=0;y<=50;y++) { cout<<spielfeld[x][y]; } cout<<endl; } system("cls"); }Hier jetzt der Thread mit der Spielerbewegung(inkl Feld und ausagbe)
void spielerbewegung(void *ptr) { char schlaegerfeld [21][3]= { (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" ") }; int y=1; while(1==1) { int spieler=getch(); schlaegerfeld [y][2]=' '; schlaegerfeld [y+1][2]=' '; if (spieler == 80) { y++; if (y > 17) y = 17; } if (spieler == 72) { y--; if (y < 1) y = 1; } schlaegerfeld [y][2]='|'; schlaegerfeld [y+1][2]='|'; for(int x=0; x<=20;x++) { for(int y=0;y<=2;y++) { cout<<schlaegerfeld[x][y]; } cout<<endl; } system("cls"); } }
-
Sorry, aber um es mal deutlich zu sagen (bzw. zu schreiben -): dein gesamtes Programm ist völliger Murks!
Du kannst nicht einfach 2 Threads parallel laufen lassen und in jedem davon beliebig auf der Konsole Ausgaben tätigen (ist doch klar, daß dann alles durcheinander kommt!).
Du wirst dein (bzw. euer -) Programm noch mal neu strukturieren müssen.
Wirf zuersteinmal den 2. Thread (_beginthread(spielerbewegung,0,NULL);) raus.
Auch wenn ich noch nicht so ganz die Logik der einzelnen bewegungX-Funktionen verstehe, du mußt die Tastaturabfrage in diese Hauptschleife integrieren...
-
Th69 schrieb:
Sorry, aber um es mal deutlich zu sagen (bzw. zu schreiben -): dein gesamtes Programm ist völliger Murks!
Du kannst nicht einfach 2 Threads parallel laufen lassen und in jedem davon beliebig auf der Konsole Ausgaben tätigen (ist doch klar, daß dann alles durcheinander kommt!).
Du wirst dein (bzw. euer -) Programm noch mal neu strukturieren müssen.
Wirf zuersteinmal den 2. Thread (_beginthread(spielerbewegung,0,NULL);) raus.
Auch wenn ich noch nicht so ganz die Logik der einzelnen bewegungX-Funktionen verstehe, du mußt die Tastaturabfrage in diese Hauptschleife integrieren...Wieso ist denn alles mist?
Habe diese art von struktrieren in der Schule gelernt momentan ist das Ansi C mit C++ elementen,
Das Programm funktioniert und es kommt nicht durcheinander, das Problem ist nur das die Schläger immer gelöscht werden das problem hab ich mit cin und cout nicht muss wohl an getch() liegen
-
Ubrigends manipuliert der Spielerbewegungsthread nicht das Normale Array und die Bewegeungen(Ball+GegenSpieler). Da die Felder die mit der Spielerbewegung manipuliert werden von keiner andreren Funktion genutzt werden sie sind Leer " "
-
Th69 schrieb:
Sorry, aber um es mal deutlich zu sagen (bzw. zu schreiben -): dein gesamtes Programm ist völliger Murks!

Tut mir Leid, aber dieser Meinung muss ich mich anschließen. Das einzige, worum ich dich beneidige bei dem Code, dass du überhaupt noch die Übersicht behalten hast.
Man weiß nicht wie weit ihr in der Schule seid, aber das geht aufjedenfall besser. Ein Fortschritt wäre z.B. schonmal die Arrays abzuschaffen und zu ersetzen und dann sollte man am Ende noch über Klassen nachdenken.
Verdammte Editfunktion...:
Wo liegt z.B. der Sinn folgendes Codes?int main() { spiel(); bildhalten(); } int spiel() { start(); return (0); } void bildhalten() { getch(); }Wie wärs z.B. mal mit
int main() { start(); getch(); }Wenn du schon mit sowas kommst, mag ich mir garnet so richtig den Rest angucken.
-
FreakY<3Cpp schrieb:
Th69 schrieb:
Sorry, aber um es mal deutlich zu sagen (bzw. zu schreiben -): dein gesamtes Programm ist völliger Murks!

Tut mir Leid, aber dieser Meinung muss ich mich anschließen. Das einzige, worum ich dich beneidige bei dem Code, dass du überhaupt noch die Übersicht behalten hast.
Man weiß nicht wie weit ihr in der Schule seid, aber das geht aufjedenfall besser. Ein Fortschritt wäre z.B. schonmal die Arrays abzuschaffen und zu ersetzen und dann sollte man am Ende noch über Klassen nachdenken.
Verdammte Editfunktion...:
Wo liegt z.B. der Sinn folgendes Codes?int main() { spiel(); bildhalten(); } int spiel() { start(); return (0); } void bildhalten() { getch(); }Wie wärs z.B. mal mit
int main() { start(); getch(); }Wenn du schon mit sowas kommst, mag ich mir garnet so richtig den Rest angucken.
Klassen kommen dann in Klasse 12:
Zu deiner Frage: Ich finde das auch doof Lehrer möchte eine Fast leere Main in der die Funktion Spiel gestartet wird und alles soll in Funktionen aufgeteilt werden :S
getch(); wird bei uns verwendet um den Bildschirm offen zuhalten.Zu meinem Problem hab den Fehler gefunden:
#include <conio.h> #include <iostream> using namespace std; int main() { char schlaegerfeld [21][3]= { (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" ") }; int y=1; while(1==1) { int spieler=getch(); schlaegerfeld [y][2]=' '; schlaegerfeld [y+1][2]=' '; if (spieler == 80) { y++; if (y > 17) { y = 17; } } if (spieler == 72) { y--; if (y < 1) { y = 1; } } schlaegerfeld [y][2]='|'; schlaegerfeld [y+1][2]='|'; for(int x=0; x<=20;x++) { for(int y=0;y<=2;y++) { cout<<schlaegerfeld[x][y]; } cout<<endl; } system("cls"); } }Hier Muss eine Alternative zu getch(); her, da das bild sich immer bei getch löscht.
-
Quatsch, dass liegt am system("cls").
-
So bräuchte jetzt noch jemanden der mir Helfen kann, da die beiden Borstenschweine über mir nur meckern,
hier nochmal der code#include <conio.h> #include <iostream> #include <windows.h> #include <process.h> #include "logo.h" #include <dos.h> using namespace std; void bildhalten(); int spiel(); int start(); int spielfeld(); void spielfeldausgabe(char spiel[20][51]); void bewegung1(char spielfeld[21][51]); void bewegung2(char spielfeld[21][51]); void bewegung3(char spielfeld[21][51]); void bewegung4(char spielfeld[21][51]); void bewegung5(char spielfeld[21][51]); void bewegung6(char spielfeld[21][51]); void bewegung7(char spielfeld[21][51]); void bewegung8(char spielfeld[21][51]); void spielerbewegung(void *ptr); int score(); void abschluss(); int main() { spiel(); bildhalten(); } int spiel() { start(); return (0); } int start() { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4); //replace the 0 with a number for the color you want cout<<" "<<endl<<logo<<endl; int wahl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); //replace the 0 with a number for the color you want cout<<" "<<endl<<endl<<endl<<"Spielstart = 1 Highscore = 2 Spiel beenden = 3 "; cin>>wahl; switch(wahl) { case 1: system("cls"); spielfeld(); break; case 2: system("cls"); score(); break; case 3: system("cls"); abschluss(); break; } return (0); } int spielfeld() { char spielfeld [21][51]= { (" "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" "), // zusätzlich eingefügte 21. Zeile...=> spielfeld[20][spalten] }; _beginthread(spielerbewegung,0,NULL); while(1) { bewegung1(spielfeld); bewegung2(spielfeld); bewegung3(spielfeld); bewegung4(spielfeld); bewegung5(spielfeld); bewegung6(spielfeld); bewegung7(spielfeld); bewegung8(spielfeld); } _endthread(); return 0; } void bildhalten() { getch(); } void bewegung1(char spielfeld[21][51]) { int y = 1; spielfeld[1][47]='|'; spielfeld[2][47]='|'; for(int x=0;x<=43;x++) { spielfeld[1][3+x]='o'; if (x != 0) spielfeld[1][2+x]=' '; if (x == 22 && x == 23) spielfeld[1][25]='|'; spielfeldausgabe(spielfeld); } } void bewegung2(char spielfeld[21][51]) { for (int x=0;x<=43;x++) { if(x==0) { spielfeld[2][47]='|'; spielfeld[1][46]=' '; } if(x<=5) { spielfeld[2][45-x]='o'; spielfeld[2][46-x]=' '; spielfeld[2][47]='|'; if(x==5) { spielfeld[2][40]=' '; } } if (x>5 && x<=10) { spielfeld[3][46-x]='o'; spielfeld[3][47-x]=' '; if(x==10) { spielfeld[3][36]=' '; } } if(x>10 && x<=15) { spielfeld[4][46-x]='o'; spielfeld[4][47-x]=' '; if(x==15) { spielfeld[4][31]=' '; } } if(x>15 && x<=20) { spielfeld[5][46-x]='o'; spielfeld[5][47-x]=' '; if(x==20) { spielfeld[5][26]=' '; } } if(x>20 && x<=25) { spielfeld[6][46-x]='o'; spielfeld[6][47-x]=' '; spielfeld[6][25]='|'; if(x==25) { spielfeld[6][21]=' '; } } if(x>25 && x<=30) { spielfeld[7][46-x]='o'; spielfeld[7][47-x]=' '; if(x==30) { spielfeld[7][16]=' '; } } if(x>30 && x<=35) { spielfeld[8][46-x]='o'; spielfeld[8][47-x]=' '; if(x==35) { spielfeld[8][11]=' '; } } if(x>35 && x<=43) { spielfeld[9][46-x]='o'; spielfeld[9][47-x]=' '; if(x==43) { spielfeld[9][3]=' '; } } spielfeldausgabe(spielfeld); } } void bewegung3(char spielfeld[21][51]) { for(int x=0;x<=43;x++) { if(x<=15) { spielfeld[0+x][47]= ' '; spielfeld[1+x][47]= ' '; spielfeld[1+x][47]= '|'; spielfeld[2+x][47]= '|'; } if(x<=5) { spielfeld[10][3+x]='o'; spielfeld[10][2+x]=' '; if(x==5) { spielfeld[10][8]=' '; } } if(x>5 && x<=10) { spielfeld[11][3+x]='o'; spielfeld[11][2+x]=' '; if(x==10) { spielfeld[11][13]=' '; } } if(x>10 && x<=15) { spielfeld[12][3+x]='o'; spielfeld[12][2+x]=' '; if(x==15) { spielfeld[12][18]=' '; } } if(x>15 && x<=20) { spielfeld[13][3+x]='o'; spielfeld[13][2+x]=' '; if(x==20) { spielfeld[13][23]=' '; } } if(x>20 && x<=25) { spielfeld[14][3+x]='o'; spielfeld[14][2+x]=' '; spielfeld[14][25]='|'; if(x==25) { spielfeld[14][28]=' '; } } if(x>25 && x<=30) { spielfeld[15][3+x]='o'; spielfeld[15][2+x]=' '; if(x==30) { spielfeld[15][33]=' '; } } if(x>30 && x<=35) { spielfeld[16][3+x]='o'; spielfeld[16][2+x]=' '; if(x==35) { spielfeld[16][38]=' '; } } if(x>35 && x<=43) { spielfeld[17][3+x]='o'; spielfeld[17][2+x]=' '; } spielfeldausgabe(spielfeld); } } void bewegung4(char spielfeld[21][51]) { for(int x=0;x<=43;x++) { spielfeld[17][46-x]='o'; spielfeld[17][47-x]=' '; spielfeld[17][47]='|'; spielfeld[17][25]='|'; if(x==43) { spielfeld[17][3]=' '; } spielfeldausgabe(spielfeld); } } void bewegung5(char spielfeld[21][51]) { for(int x=0;x<=0;x++) { spielfeld[17][4]='o'; spielfeld[17][4]=' '; spielfeld[18][5]='o'; spielfeld[18][5]=' '; spielfeld[17][6]='o'; spielfeld[17][6]=' '; spielfeldausgabe(spielfeld); for(int x=0;x<=7;x++) { spielfeld[16][7+x]='o'; spielfeld[16][6+x]=' '; spielfeldausgabe(spielfeld); } spielfeld[16][14]=' '; spielfeld[15][15]='o'; spielfeld[14][16]='o'; spielfeld[15][15]=' '; spielfeld[14][16]=' '; for(int x=0;x<=7;x++) { spielfeld[13][17+x]='o'; spielfeld[13][16+x]=' '; spielfeld[17][47]=' '; spielfeld[16][47]=' '; spielfeld[15-x-3][47]='|'; spielfeld[16-x-3][47]='|'; spielfeld[17-x-3][47]=' '; spielfeldausgabe(spielfeld); } spielfeld[13][24]=' '; spielfeld[12][26]='o'; spielfeld[11][27]='o'; spielfeld[12][26]=' '; spielfeld[11][27]=' '; for(int x=0;x<=7;x++) { spielfeld[10][28+x]='o'; spielfeld[10][27+x]=' '; spielfeldausgabe(spielfeld); } spielfeld[10][35]=' '; spielfeld[9][36]='o'; spielfeld[8][37]='o'; spielfeld[9][36]=' '; spielfeld[8][37]=' '; for(int x=0;x<=3;x++) { spielfeld[7][38+x]='o'; spielfeld[7][37+x]=' '; spielfeldausgabe(spielfeld); } spielfeld[7][41]=' '; spielfeld[6][42]='o'; spielfeld[5][43]='o'; spielfeld[5][44]='o'; spielfeld[6][42]=' '; spielfeld[5][43]=' '; spielfeld[5][44]=' '; spielfeld[5][45]='o'; spielfeld[5][45]=' '; spielfeld[5][46]='o'; spielfeldausgabe(spielfeld); } } void bewegung6(char spielfeld[21][51]) { // spielfeld[5][47]='|'; spielfeld[6][47]='|'; // stand nach bewegung5 for(int x=0;x<=43;x++) { /* spielfeld[5][25]='|'; // in Mitte wurde '|' nicht zu 'o' spielfeld[5][46-x]='o'; // 'o' bis zu [5][46] (auf [5][47] ist erst der PC-'|') if (x != 0 && x != 22) spielfeld[5][47-x]=' '; // sonst bei x = 0 ggf. PC-'|' zu ' ' und bei x = 22 Mitte-'|' nicht zu ' ' */ spielfeld[5][46-x]='o'; // 'o' bis zu [5][46] (auf [5][47] ist erst der PC-'|') if (x != 0) spielfeld[5][47-x]=' '; // sonst bei x = 0 ggf. PC-'|' zu ' ' spielfeld[5][25]='|'; // 'o' und ' ' in Mitte immer überschrieben spielfeldausgabe(spielfeld); } } void bewegung7(char spielfeld[21][51]) { for(int x=0;x<=43;x++) { if(x<=8) { spielfeld[5][3+x]='o'; spielfeld[5][2+x]=' '; } spielfeld[5][11]=' '; if(x>8 && x<=16) { spielfeld[6][3+x]='o'; spielfeld[6][2+x]=' '; } spielfeld[6][19]=' '; if(x>16 && x<=24) { spielfeld[7][3+x]='o'; spielfeld[7][2+x]=' '; spielfeld[7][25]='|'; } spielfeld[7][27]=' '; if(x>24 && x<=32) { spielfeld[5][47]=' '; spielfeld[6][47]=' '; spielfeld[9][47]='|'; spielfeld[10][47]='|'; spielfeld[8][3+x]='o'; spielfeld[8][2+x]=' '; } spielfeld[8][35]=' '; if(x>32 && x<=43) { spielfeld[9][3+x]='o'; spielfeld[9][2+x]=' '; } spielfeldausgabe(spielfeld); } } void bewegung8(char spielfeld[21][51]) { // spielfeld[9][47]='|'; spielfeld[10][47]='|'; // Stand nach bewegung7 for (int x=0;x<=43;x++) // erst for (int x=0;x<=47;x++), aber unten max. bis if (x == 43) ... { if(x<=6) { spielfeld[9][46-x]='o'; if (x != 0) spielfeld[9][47-x]=' '; } if(x>6 && x<=12) { if (x == 7) { spielfeld[9][40]=' '; spielfeld[8][47]='|'; spielfeld[10][47]=' '; } spielfeld[8][46-x]='o'; spielfeld[8][47-x]=' '; } if(x>12 && x<=18) { if (x == 13) { spielfeld[8][34]=' '; spielfeld[7][47]='|'; spielfeld[9][47]=' '; } spielfeld[7][46-x]='o'; spielfeld[7][47-x]=' '; } if(x>18 && x<=20) { if (x == 19) { spielfeld[7][28]=' '; spielfeld[6][47]='|'; spielfeld[8][47]=' '; } spielfeld[6][46-x]='o'; spielfeld[6][47-x]=' '; } if (x == 21) { spielfeld[6][26]=' '; } if(x>22&& x<=30) { if (x == 27) { spielfeld[5][20]=' '; spielfeld[5][47]='|'; spielfeld[7][47]=' '; } spielfeld[5][46-x]='o'; spielfeld[5][47-x]=' '; } if(x>30&& x<=36) { if (x == 31) { spielfeld[5][16]=' '; spielfeld[4][47]='|'; spielfeld[6][47]=' '; } spielfeld[4][46-x]='o'; spielfeld[4][47-x]=' '; } if(x>36 && x<=41) { if (x == 37) { spielfeld[4][10]=' '; spielfeld[3][47]='|'; spielfeld[5][47]=' '; } spielfeld[3][46-x]='o'; spielfeld[3][47-x]=' '; } if(x==42) // x>41 && x<=42 -> x = 42 { spielfeld[3][5]=' '; // für x = 41 aus obiger if spielfeld[2][46-x]='o'; spielfeld[2][47-x]=' '; spielfeld[2][47]='|'; spielfeld[4][47]=' '; } if(x==43) // x>42 && x<=43 -> x = 43 { spielfeld[2][4]=' '; spielfeld[1][46-x]='o'; spielfeld[1][47]='|'; spielfeld[3][47]=' '; } spielfeldausgabe(spielfeld); } } void spielerbewegung(void *ptr) { char schlaegerfeld [21][3]= { (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" "), (" ") }; int y=1; { while(1==1) { schlaegerfeld [y][2]=' '; schlaegerfeld [y+1][2]=' '; if (GetAsyncKeyState(VK_DOWN) !=0) { y++; if (y > 17) { y = 17; } } if (GetAsyncKeyState(VK_UP) !=0) { y--; if (y < 1) { y = 1; } } schlaegerfeld [y][2]='|'; schlaegerfeld [y+1][2]='|'; for(int x=0; x<=20;x++) { for(int y=0;y<=2;y++) { cout<<schlaegerfeld[x][y]; } cout<<endl; } system("cls"); } } } void spielfeldausgabe(char spielfeld[21][51]) { for(int x=0; x<=20;x++) { for(int y=0;y<=50;y++) { cout<<spielfeld[x][y]; } cout<<endl; } system("cls"); } int score() { cout<<"asdf"; return (0); } void abschluss() { cout <<"Danke f"<<(char (129))<<"rs Spielen!!!"<<endl; cout<<char (169)<<" Jan Ackermann, Marwan Khalid, Bardia Eghtesadinia"<<endl; }
-
Du hilfst deiner Sache nicht gerade, indem du die gegebene Hilfe ignorierst und ständig weitere 700-Zeiler postest. Du vergraulst so alle potentiellen Helfer. Die meisten dürften spätestens jetzt nie wieder in diesen Thread gucken.
Niemanden interessiert dein gesamter Quellcode! Niemand liest und versteht 700 Zeilen Code (noch dazu schlechten!)!
-
Die "Borstenschweine" meckern aber nicht ohne Grund. Dein Programm ist noch immer schlecht strukturiert.
Das dein Lehrer eine möglichst kleine Hauptfunktion haben willst... Empfinde ich als okay. Schließlich sollte man seine Funktionen im allgemeinen klein halten und möglichst gut und vorallem sinnvoll auslagern.
Was bei deinem Quellcode auffällt. Du hast sehr viel doppelten/ähnlichen Quellcode. Das ist meistens ein Zeichen dafür, dass man eine Funktion dafür nutzen sollte, um nicht jedes Mal alles neu schreiben zu müssen. Auch würde man sicher mit Schleifen einiges an Code kürzen können.
Dann viel Spaß! Deine Hausaufgaben macht hier keiner. Man ist gerne bereit zu helfen, aber so wie du dich hier anstellst, ist das alles andere als motivierend für die Helfer.
-
Kann das nit mal einer löschö?
-
also kollege
threads sind cool und nützlich, die machen programme schnell und parrelel nutzbar und haben viele vorteile
ganz klaraber was meinst du warum multicore prozessoren noch nicht vollausgelasten werden mit den meisten programmen(und spielen), weil es sau schwer ist threads bzw verschiedene prozesse die ineinandergreifen zu schreiben
zitat von cevat yerli von crytek: die programmierung für multicore ist nicht ganz einfach (gamestar von 2004 irgendwo)
und ganz ehrlich in der schule lernt man nur ein klein bisschen das grundgerüst dazu maximalzum thema:
ich würde ein spiel so in etwa aufbauen (und habe es auch schon wiederholt angewandt)main() { initGame(); gameMainRoutine(); endGame(); } initGame() { // initialisieren, sachen setzen usw } gameMainRoutine() { while(aktiv) { KeyboardMouseAbfrage(); berechnungDesSpiels(); // spielerposition, ball position.... // aktiv irgendwie im verloren fall auf false setzen paint(); Sleep(500); // damit das spiel nicht unzumutbar schnell ist // besser aber man baut eine frame berechnung mit bremse ein, //da findest du aber woanders infos zu } } endGame() { // endpunktzahl anzeigen usw... // aufräumarbeiten }so das grundschema, feinhaiten kann man überall rumfrickeln
aber für sowas simples wie pong, snake, tetris oder einfache jump&runs braucht man noch keine threads
dafür ist ein computer shcnell genughab mich letztens an ein snake gesetzt, auf einem spielfeld mit 800x600 pixeln und 40x20 rastern hat es unter einer halben millisekunde (!!! weniger als 500 µs!!!) gedauert eben diese 800 einzelnen bilder zu zeichnen, und alles vom spiel her zu berechnen (war nichts optimiert und in java geschrieben)
also wieso sollten hier threads schon nötig sein