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 ? 😮



  • Ja, Tippfehler meinerseits. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • 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

    Autocogito

    Gruß, 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

    Autocogito

    Gruß, 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 😉


Anmelden zum Antworten