Ping Pong, Paralelle Bewegung?
-
Hallo ich habe versucht ein Ping Pong zu Programmieren, der Bewegungsablauf ist dabei immer gleich und in 8 Bewegungen aufgeteilt.
Momentan bewegt sich der Ball und der Gegenspieler, habe jetzt noch die Funktion
void spielerbewegung(char spielfeld[21][51],int &y);
Programmiert damit der Benutzer:
|
| =>Schläger
Selbst steuern kann, nun möchte ich aber beides Parallel ausgeben lassen die Bewegungen und Spielerbewegung, wenn ich die Spielerbewegung in die Schleifen einbaue, bleibt der Ball stehen bis die Schläger bewegung ausgeführt wurde, das ist nicht gut. Hat jemand eine idee wie man das Fliesend realisieren könnte`?#include <conio.h> #include <iostream> #include <windows.h> #include "logo.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(char spielfeld[21][51],int &y); 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]= { (" "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" | "), (" "), (" "), }; int y=1; while(1) { bewegung1(spielfeld); bewegung2(spielfeld); bewegung3(spielfeld); bewegung4(spielfeld); bewegung5(spielfeld); bewegung6(spielfeld); bewegung7(spielfeld); bewegung8(spielfeld); } return 0; } void bildhalten() { getch(); } void bewegung1(char spielfeld[21][51]) { spielfeld[1][47]='|'; spielfeld[2][47]='|'; for(int y=0;y<=43;y++) { spielfeld[1][3+y]='o'; if (y != 0) spielfeld[1][2+y]=' '; spielfeld[1][25]='|'; spielfeldausgabe(spielfeld); } } void bewegung2(char spielfeld[21][51]) { int y=1; 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(char spielfeld[21][51], int &y) { int spieler=getch(); spielfeld[y][2]=' '; spielfeld[y+1][2]=' '; if (spieler == 80) { y++; if (y > 17) y = 17; } if (spieler == 72) { y--; if (y < 1) y = 1; } spielfeld[y][2]='|'; spielfeld[y+1][2]='|'; spielfeldausgabe(spielfeld); } void spielfeldausgabe(char spielfeld[21][51]) { system("cls"); for(int x=0; x<=20;x++) { for(int y=0;y<=50;y++) { cout<<spielfeld[x][y]; } cout<<endl; } } 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; }
-
JHuice schrieb:
int spielfeld()
{
...
int y=1;
while(1)
{bewegung1(spielfeld);
bewegung2(spielfeld);bewegung3(spielfeld);
bewegung4(spielfeld);bewegung5(spielfeld);
bewegung6(spielfeld);bewegung7(spielfeld);
bewegung8(spielfeld);
spielfeldausgabe(spielfeld);
}
return 0;
}
[/cpp]du musst den auruf der funktion spielfeldausgabe aus den bewegungs funktionen entfernen und erst am ende wenn du alle Elemente verschoben hast das bild neu zeichnen.
spart auch gleichzeitig 8 mal weniger Speicherzugriffe was deine anwendung schneller macht
gruss mosta
-
lustig, dann seh ich den Ball nichtmehr wandern
-
Auch wenn es jetzt etwas arrogant, fies und herablassend klingt und absolut unpassend ist.
Warum machst du das ganze nicht mit Flash? Flash ist für kleine Spiele prima geeignet. Sicher ist es spassig mit c da herumzufrickeln aber irgendwann wird es ziemlich grausam.
-
das sollte ein Projekt werden für den Informatik Kurs pflicht ist ansi C
-
Hallo.
Du versuchst hier in einer Konsole eine Spiel umgebung zu erstellen. Das ist unpraktikabel weil du nicht rihctig auf die Eingaben reagieren kannst, bzw. sie erst zu spät anzeigst. Ein Stichwort wäre Thread. Dann kannst du die Darstellung und die Steuerung trennen. Das ist vielleicht etwas besser. Ansonsten wenn es grafisch anspruchsvoller sein soll, ist 3D - Grafik ein gutes Stichwort. Das ist aber sehr aufwendig und erwartet eine Menge Einarbeitungszeit.
-
und wie könnte so ein thread aussehen?
-
Mit _beginthreadex kannst du einen neuen thread starten (mehr infos in der msdn)
beachte jedoch dass das kein ansi-c ist und daher nicht hierher gehört.
Du kannst doch eine eingabe auswerten und dann dass komplette Bild nochmal neu zeichnen, natürlich dann mit den veränderungen die die eingabe erfordert.