Anfänger brauucht hilfe!
-
icarus2 schrieb:
welive schrieb:
++ bedeutet um eins erhöhen oder?
meinst du so
if(ping_wins<pong_wins){ pong_wins++; } else if(ping_wins>pong_wins){ ping_wins++; }Genau. Du musst aber aufpassen. ++a und a++ ist nicht das selbe oder zumindest nicht immer.
Öhm - nein eben nicht genau

Was soll das für einen Sinn ergeben?
Gemeint ist wohl:int ping_wins = 0, pong_wins = 0; //... while (....) { int randomnr = rand()%10+1; if (ping(randomnr)) { ++ping_wins; continue; } if (pong(randomnr)) ++pong_wins; //... }P.S.: hier hat immer ping Aufschlag - muss also noch geändert werden, aber ich will ja noch nicht alles verraten, sonst schimpft Otze wieder

-
inter2k3 hat Recht. Ich hatte deinen Post falsch gelesen und nur auf die ++ geachtet und den Rest nicht angeschaut ^^
-
Coden ist ja nett, aber am Anfang kommt eigentlich ein Pseudoablauf, zB so:
Start: runde: 0 (wegen aufschlagwechsel) win_PING: 0 win_PONG: 0 aufschlag_ping = WAHR Solange ( ((win_PING < 11) UND (win_PONG << 11)) ODER (ABSOLUT(win_PING-win_PONG) < 2) ) { ziehe "zahl" ping_gewinnt = pong_gewinnt = FALSCH ballwechsel = 0 Solange weder ping_gewinnt noch pong_gewinnt RICHTIG { incrementiere ballwechsel wenn aufschlag_ping { ping_gewinnt = ping("zahl"); wenn nicht ping_gewinnt { pong_gewinnt = pong("zahl"); } } sonst { // dasselbe nur umgekehrt :P } } win_PING += ping_gewinnt; // booleans sind 0 oder 1 ... 1 wenn wahr 0 wenn falsch win_PONG += pong_gewinnt; Ausgabe: Anzahl Ballwechsel, Punkt PING, Punkte PONG incrementiere runde wenn runde >= 5 und runde < 10 aufschlag_ping = FALSCH // pong ist dran sonst aufschlag_ping = nicht aufschlag_ping // wechsel den status da punktweise gewechselt wird }
-
ich danke euch! ich muss das jetzt erst mal alles nachvollziehen und verstehen

-
padreigh schrieb:
Coden ist ja nett, aber am Anfang kommt eigentlich ein Pseudoablauf, zB so:
Start: runde: 0 (wegen aufschlagwechsel) win_PING: 0 win_PONG: 0 aufschlag_ping = WAHR Solange ( ((win_PING < 11) UND (win_PONG << 11)) ODER (ABSOLUT(win_PING-win_PONG) < 2) ) { ziehe "zahl" ping_gewinnt = pong_gewinnt = FALSCH ballwechsel = 0 Solange weder ping_gewinnt noch pong_gewinnt RICHTIG { incrementiere ballwechsel wenn aufschlag_ping { ping_gewinnt = ping("zahl"); wenn nicht ping_gewinnt { pong_gewinnt = pong("zahl"); } } sonst { // dasselbe nur umgekehrt :P } } win_PING += ping_gewinnt; // booleans sind 0 oder 1 ... 1 wenn wahr 0 wenn falsch win_PONG += pong_gewinnt; Ausgabe: Anzahl Ballwechsel, Punkt PING, Punkte PONG incrementiere runde wenn runde >= 5 und runde < 10 aufschlag_ping = FALSCH // pong ist dran sonst aufschlag_ping = nicht aufschlag_ping // wechsel den status da punktweise gewechselt wird }
danke das hilf echt weiter TOP:)
-
welive schrieb:
padreigh schrieb:
Evolution am Werk :)[snipp]
....ist es nicht genau das was ich gemacht hab?
Im Prinzip schon. Nur brauchst du dafür 20 Zeilen Quelltext, einige Zwischenspeicher-Integers und hast den doppelten und ansonsten identischen Code mit einer(zwei) nie erreichbaren
returnAnweisung. Wenn du in meiner letzten Version die Zufallszahl von 1/10 auf 1/100 ändern möchtest brauchst du eine Zeile ändern:int ping(int a) { return pong(a); } int pong(int b) { // return ( rand()%10+1 == b); return ( rand()%100+1 == b); }Wenn du das selbe bei dir ändern willst sind es wesentlich mehr Zeilen, daher ist mein Code wartbarer
nicht das es darauf ankommt - ist eher was für die B-Note.Ebenfalls für die B-Note wäre eine Kapselung der Zufallszahlbestimmung:
inline int myRand() { return rand()%10+1; }dann benutzt du das überall wo du sonst
rand()%10+1;stehen hast - wenn du das Spiel dann einheitlich auf MersenneTwister umstellen willst um es fairer zu machen geht das wieder wartbarer als bei dir, du änderst einfach den{ /* ... */ }Teil dermyRand()Methode
-
padreigh schrieb:
welive schrieb:
padreigh schrieb:
Evolution am Werk :)[snipp]
....ist es nicht genau das was ich gemacht hab?
Im Prinzip schon. Nur brauchst du dafür 20 Zeilen Quelltext, einige Zwischenspeicher-Integers und hast den doppelten und ansonsten identischen Code mit einer(zwei) nie erreichbaren
returnAnweisung. Wenn du in meiner letzten Version die Zufallszahl von 1/10 auf 1/100 ändern möchtest brauchst du eine Zeile ändern:int ping(int a) { return pong(a); } int pong(int b) { // return ( rand()%10+1 == b); return ( rand()%100+1 == b); }Wenn du das selbe bei dir ändern willst sind es wesentlich mehr Zeilen, daher ist mein Code wartbarer
nicht das es darauf ankommt - ist eher was für die B-Note.ja hast recht
hehe sieht übersichtlicher aus
-
padreigh schrieb:
Coden ist ja nett, aber am Anfang kommt eigentlich ein Pseudoablauf, zB so:
Start: runde: 0 (wegen aufschlagwechsel) win_PING: 0 win_PONG: 0 aufschlag_ping = WAHR Solange ( ((win_PING < 11) UND (win_PONG << 11)) ODER (ABSOLUT(win_PING-win_PONG) < 2) ) { ziehe "zahl" ping_gewinnt = pong_gewinnt = FALSCH ballwechsel = 0 Solange weder ping_gewinnt noch pong_gewinnt RICHTIG { incrementiere ballwechsel wenn aufschlag_ping { ping_gewinnt = ping("zahl"); wenn nicht ping_gewinnt { pong_gewinnt = pong("zahl"); } } sonst { // dasselbe nur umgekehrt :P } } win_PING += ping_gewinnt; // booleans sind 0 oder 1 ... 1 wenn wahr 0 wenn falsch win_PONG += pong_gewinnt; Ausgabe: Anzahl Ballwechsel, Punkt PING, Punkte PONG incrementiere runde wenn runde >= 5 und runde < 10 aufschlag_ping = FALSCH // pong ist dran sonst aufschlag_ping = nicht aufschlag_ping // wechsel den status da punktweise gewechselt wird }Solange weder ping_gewinnt noch pong_gewinnt RICHTIG
müsste so aussehen?while(ping_gewinnt==true && pong_gewinnt==true){ //.... }beide müssen eigentlisch auf FALSCH gesetzt werden?
-
welive schrieb:
Solange weder ping_gewinnt noch pong_gewinnt RICHTIG
müsste so aussehen?while(ping_gewinnt==true && pong_gewinnt==true){ //.... }beide müssen eigentlisch auf FALSCH gesetzt werden?
In Worten ausgedrückt:
Solange weder ping noch pong gewonnen hat ... mach irgendwas.entspricht dann als Code:
bool ping_gewinnt = false, pong_gewinnt = false; //... while (!ping_gewinnt && !pong_gewinnt) { // irgendwas machen }Sobald einer gewonnen hat, hat die entsprechende Variable (ping_gewinnt oder pong_gewinnt) den Wert true.
Aus !ping_gewinnt bzw. !pong_gewinnt wird dann also false.
Da du eine Verknüpfung mit logischem UND (&&) hast, wird dann aus dem Gesamtausdruck ebenfalls false - da dieser nur wahr ist, wenn beide Teilausdrücke wahr sind.
Wenn der Gesamtausdruck false ist - dann wird die Schleife nicht weiter durchlaufen.
-
inter2k3 schrieb:
welive schrieb:
Solange weder ping_gewinnt noch pong_gewinnt RICHTIG
müsste so aussehen?while(ping_gewinnt==true && pong_gewinnt==true){ //.... }beide müssen eigentlisch auf FALSCH gesetzt werden?
In Worten ausgedrückt:
Solange weder ping noch pong gewonnen hat ... mach irgendwas.entspricht dann als Code:
bool ping_gewinnt = false, pong_gewinnt = false; //... while (!ping_gewinnt && !pong_gewinnt) { // irgendwas machen }Sobald einer gewonnen hat, hat die entsprechende Variable (ping_gewinnt oder pong_gewinnt) den Wert true.
Aus !ping_gewinnt bzw. !pong_gewinnt wird dann also false.
Da du eine Verknüpfung mit logischem UND (&&) hast, wird dann aus dem Gesamtausdruck ebenfalls false - da dieser nur wahr ist, wenn beide Teilausdrücke wahr sind.
Wenn der Gesamtausdruck false ist - dann wird die Schleife nicht weiter durchlaufen.danke

-
vielen danke für eure hilfe!!!
-
Ich habe jetzt keine Zeit umd as ganze zu testen aber trotzdem ein Tipp:
Achte darauf, dass du eine gute Einrückung im Code hast. Es ist sehr schwierig deinen Code zu lesen.
-
padreigh schrieb:
Coden ist ja nett, aber am Anfang kommt eigentlich ein Pseudoablauf, zB so:
Start: runde: 0 (wegen aufschlagwechsel) win_PING: 0 win_PONG: 0 aufschlag_ping = WAHR Solange ( ((win_PING < 11) UND (win_PONG << 11)) ODER (ABSOLUT(win_PING-win_PONG) < 2) ) { ziehe "zahl" ping_gewinnt = pong_gewinnt = FALSCH ballwechsel = 0 Solange weder ping_gewinnt noch pong_gewinnt RICHTIG { incrementiere ballwechsel wenn aufschlag_ping { ping_gewinnt = ping("zahl"); wenn nicht ping_gewinnt { pong_gewinnt = pong("zahl"); } } sonst { // dasselbe nur umgekehrt :P } } win_PING += ping_gewinnt; // booleans sind 0 oder 1 ... 1 wenn wahr 0 wenn falsch win_PONG += pong_gewinnt; Ausgabe: Anzahl Ballwechsel, Punkt PING, Punkte PONG incrementiere runde wenn runde >= 5 und runde < 10 aufschlag_ping = FALSCH // pong ist dran sonst aufschlag_ping = nicht aufschlag_ping // wechsel den status da punktweise gewechselt wird }wie kann ich hier den Endstand einbauen???
-
Indem man die Punkte mit cout ausgibt!? Was erwartest du für eine Antwort auf diese Frage?
If-Abfrage wer die Runde gewonnen hat und dessen Punktevariable inkrementieren.
-
hat sich erledigt
