Knobelspiel c++
-
hi,
falls ich im falschen forum gepostet habe...bitte verschieben

Ich hab folgendes problem:
Ich muss ein Knobelspiel schreiben, bin aber ein absoluter c++ Anfänger...
Hier die Aufgabe:
--------------------------------------------------
Zwei Spieler (wir denken uns unabhängig voneinander) je eine positive Ganzzahl aus.
Nenn beide Spieler die gleiche zahl so endet das Spiel unentschieden. Ist die summe der beider Zahlen ungrade, so gewinnt der Spieler mit der größeren Zahl. Ist die summe der beider Zahlen grade, so gewinnt der Spieler mit der kleineren Zahl.Vergleich mit modulo % operator
(Das spiel soll so lange gespielt werden bis ein Spieler 5 mal gewonnen hat…)
-------------------------------------------------
Leider hab ich nicht wirklich Ahnung wie ich das jetzt umgesetzt bekomme...
mein Ansatz sieht so aus:
Möglichkeit1:(gerade)
m=(p1+p2)%(p1+p2)if rest=0 (p1>p2)=p1+1
Möglichkeit2:(gerade)
m=(p1+p2)%(p1+p2)if rest=0 (p1<p2)=p2+1
Möglichkeit3:(ungerade)
m=(p1+p2)%(p1+p2)if rest=1 (p1>p2)=p2+1
Möglichkeit4:(ungerade)
m=(p1+p2)%(p1+p2)if rest=1 (p1<p2)=p1+1
Möglichkeit5:(gleich)
if p1=p2= unentschieden

ich hoffe ihr könnt mir weiterhelfen!

danke schon mal im vorraus!
gruß
michael
-
Zwei Spieler (wir denken uns unabhängig voneinander) je eine positive Ganzzahl aus.
Nenn beide Spieler die gleiche zahl so endet das Spiel unentschieden. Ist die summe der beider Zahlen ungrade, so gewinnt der Spieler mit der größeren Zahl. Ist die summe der beider Zahlen grade, so gewinnt der Spieler mit der kleineren Zahl.if(n1 == n2) { //spiel endet } else if((n1+n2)%2 != 0) { if(n1>n2) //spieler 1 gewinnt else //spieler 2 gewinnt } else { if(n1>n2) //spieler 2 gewinnt else //spieler 1 gewinnt }oder auch
if(n1 == n2) { //spiel endet } else { if((bool)((n1+n2)%2) == (bool)((int)((n2/n1)+0.5))) { //spieler 2 gewonnen } else { //spieler 1 gewonnen }
-
yeah danke!!!
werd das direkt heute oder spätestens morgen mal austesten!

-
michael83 schrieb:
yeah danke!!!
werd das direkt heute oder spätestens morgen mal austesten!

ah sry es muss heissen
if(n1 == n2) { //spiel endet } else { if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) { //spieler 2 gewonnen } else { //spieler 1 gewonnen }man muss ja nicht runden, sondern abrunden
-
pixartist schrieb:
man muss ja nicht runden, sondern abrunden
Was jetzt, runden oder nicht? :p
Edit: Damit werden natürlich nur zwei der vier Fälle abgedeckt...
-
Grossmeister schrieb:
pixartist schrieb:
man muss ja nicht runden, sondern abrunden
Was jetzt, runden oder nicht? :p
Edit: Damit werden natürlich nur zwei der vier Fälle abgedeckt...
((bool)((n1+n2)%2) == (bool)((int)(n2/n1)))
zahl gerdade:
(bool)((n1+n2)%2) = false
->(bool)((int)(n2/n1))) n2 > n1 = true, n2 < n1 = false
zahl ungerdade:
(bool)((n1+n2)%2) = true
->(bool)((int)(n2/n1))) n2 > n1 = true, n2 < n1 = false-> es deckt alle 4 fälle ab
-
Habs auch gerade gemerkt... mea culpa

-
Aber fuer was soll man da runden? Da ist wohl wer unnoetig clever...
if( ( n1%n2 == 0 ) == n1 < n2 ) ) f'`8k
Gruß, TGGC (making great games since 1992)
-
TGGC schrieb:
Aber fuer was soll man da runden? Da ist wohl wer unnoetig clever...
if( ( n1%n2 == 0 ) == n1 < n2 ) ) f'`8k
Gruß, TGGC (making great games since 1992)
oO stimmt so gehts natürlich leichter xD
aber meinst du nicht
n1+n2%2 == 0 ?
wieso gibt mir denn n1%n2 == 0 zurück ob die summe der zahlen gerade ist? das ist doch eher ob n2 durch n1 teilbar ist ... oder irre ich mich jetzt ?
-
-
hi,
habs geschafft das Spiel zum laufen zu bringen...nochmal vielen dank an pixartist!
#include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int main() { int n1; int n2; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 1 -> Bitte geben sie eine Zahl ein:\n "; cin>>n1; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 2 -> Bitte geben sie eine Zahl ein:\n "; cin>>n2; if(n1 == n2) { //spiel endet cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Unentschieden\n "; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; return 0; } else { if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) { //spieler 2 gewonnen cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 2 -> Sie haben gewonnen!\n "; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; } else { //spieler 1 gewonnen cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 1 -> Sie haben gewonnen!\n "; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; } } system("PAUSE"); return 0; }Das is der code für "eine" Runde...
Nun möchte ich das ganze aber auf 5 Runden spielen.
Ich hab mal versucht ein Zählersystem einzubauen das mir den Punktestand ausgiebt.
nur leider will das nicht so wie ich will...

#include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int main() { int n1; int n2; int gewonnen_n1; int gewonnen_n2; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 1 -> Bitte geben sie eine Zahl ein: "; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cin>>n1; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 2 -> Bitte geben sie eine Zahl ein:"; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cin>>n2; if(n1 == n2) { //spiel endet cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Unentschieden->Spieler 1 %d, Spieler 2 %d" gewonnen_n1, gewonnen_n2; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; gewonnen_n1 = 0; gewonnen_n2 = 0; return 0; } else { if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) { //spieler 2 gewonnen cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 2 -> Sie haben gewonnen! "gewonnen_n1, gewonnen_n2; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; gewonnen_n1 = 0; gewonnen_n2++; } else { //spieler 1 gewonnen cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; cout<<"Spieler 1 -> Sie haben gewonnen! "gewonnen_n1, gewonnen_n2; cout<<"++++++++++++++++++++++++++++++++++++++++++++\n"; gewonnen_n1++; gewonnen_n2 = 0; } if(gewonnen_n1==1) { cout<<"\n Spieler 1 hat das Spiel gewonnen!!!.\n -Game Over-"; } else(gewonnen_n2==1) { cout<<"\nSpieler 2 hat das Spiel gewonnen!!!\n -Game Over-"; } } system("PAUSE"); return 0; }Wäre echt super wenn mir da jemand weiterhelfen könnte.

-
Na dann bete doch schon mal, das dich niemand fragt, wie if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) genau funktioniert. Das traue ich einem C++ Anfaenger naemlich nicht unbedingt zu. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Pack den ganzen Block der Eingabe und Auswertung in eine Schleife:
int gewonnen1=0,gewonnen2=0; while(gewonnen1<5&&gewonnen2<5) { ... if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) { ... ++gewonnen2; } else { ... ++gewonnen1; } } cout<<"Gesamtsieg für Spieler "<<(gewonnen1==5)?1:2<<endl;
-
TGGC schrieb:
Na dann bete doch schon mal, das dich niemand fragt, wie if((bool)((n1+n2)%2) == (bool)((int)(n2/n1))) genau funktioniert. Das traue ich einem C++ Anfaenger naemlich nicht unbedingt zu. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
jau nimm mal lieber tggc's code
( n1+n2%2 == 0 ) == n1 < n2 )ist schöner, schneller und vorallem leicher zu lesen
