Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » NimmSpiel funktioniert nicht, kann mir jemand helfen ???

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.01.2005, 22:08 Uhr
mimi1983



Es werden z.B. zwanzig Münzen auf den Tisch gelegt, und die beiden Spieler dürfen abwechselnd eine, zwei oder drei Münzen nehmen. Wer die letzte Münze nimmt, der hat gewonnen. Wir wollen dieses Spiel gegen den Rechner spielen.
Der Rechner soll auf dem Bildschirm jeweils anzeigen, wie viele Münzen er nimmt. Außerdem sollen für den Menschen nur gültige Züge möglich sein. Schreiben Sie dazu in die Funktion zugMensch eine Schleife, die so lange Eingaben erwartet, bis der Spieler einen gültigen Zug macht.



C++:
#include <iostream>

using namespace std;
#include <stdlib.h>


int zugRechner(int anzahlDerMuenzen)
{
   int wunschZug=anzahlDerMuenzen%4;
   if(wunschZug==0)
      wunschZug=1;
   cout<<"Der Computer nimmt "<<wunschZug<<" Muenze(n)"<<endl;
   return wunschZug;
};

int zugMensch(int anzahlDerMuenzen)
{
   int ergebnis=0;
   while(ergebnis<1 ¦¦ ergebnis>3)
   {
      cout<<"Spieler ("<<anzahlDerMuenzen<<"): ";
      cin>>ergebnis;
      if(ergebnis<1 ¦¦ ergebnis>3)
         cout<<"Sie duerfen nur zwischen 1 und 3 Muenzen nehmen!"<<endl;
      if(ergebnis>anzahlDerMuenzen)
      {
         cout<<"So viele Muenzen liegen nicht mehr auf dem Tisch!"<<endl; ergebnis=0;
      }
   };
   return ergebnis;
}

void main()
{
   int anzahlDerMuenzen;
  
   // Eingabe der Anfangs-Münzenanzahl
   cout<<"Mit wievielen Muenzen fangen wir an? ";
   cin>>anzahlDerMuenzen;
  
   // endlosschleife
   while(true)
   {
      anzahlDerMuenzen=anzahlDerMuenzen-zugRechner(anzahlDerMuenzen);
      if(anzahlDerMuenzen==0)
      {
         cout<<"Ich habe gewonnen!"<<endl;
         return;
      };
      anzahlDerMuenzen=anzahlDerMuenzen-zugMensch(anzahlDerMuenzen);
      if(anzahlDerMuenzen==0)
      {
         cout<<"Sie haben gewonnen!"<<endl;
         return;
      };
   };
};


Dieser Post wurde am 12.01.2005 um 22:11 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.01.2005, 22:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


und was ist jetzt deine frage?
Wie alt ist der Busfahrer?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.01.2005, 22:23 Uhr
mimi1983



MEINE FRAGE lautet warum funktioniert das prog. nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.01.2005, 22:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

MEINE FRAGE lautet warum funktioniert das prog. nicht


weil ein Fehler drin ist

hab ich schon befürchtet...
nächstest mal bitte ein wenig konkreter fragen was das problem ist und wo genau es hakt...


C++:
#include <iostream>
#include <ctime>
using namespace std;


int zugRechner(int anzahlDerMuenzen)
{
   int wunschZug;
   if(anzahlDerMuenzen<4)
       wunschZug=3;
   else
       wunschZug=1+rand()%3;
   cout<<"Der Computer nimmt "<<wunschZug<<" Muenze(n)"<<endl;
   return wunschZug;
}

int zugMensch(int anzahlDerMuenzen)
{
   int ergebnis=0;
   while(ergebnis<1 || ergebnis>3)
   {
      cout<<"Spieler ("<<anzahlDerMuenzen<<"): ";
      cin>>ergebnis;
      if(ergebnis<1 || ergebnis>3)
         cout<<"Sie duerfen nur zwischen 1 und 3 Muenzen nehmen!"<<endl;
      if(ergebnis>anzahlDerMuenzen)
      {
         cout<<"So viele Muenzen liegen nicht mehr auf dem Tisch!"<<endl; ergebnis=0;
      }
   }
   return ergebnis;
}

int main()
{
   int anzahlDerMuenzen;
   srand(time(0));
   // Eingabe der Anfangs-Münzenanzahl
   cout<<"Mit wievielen Muenzen fangen wir an? ";
   cin>>anzahlDerMuenzen;
  
   // endlosschleife
   while(true)
   {
      anzahlDerMuenzen=anzahlDerMuenzen-zugRechner(anzahlDerMuenzen);
      if(anzahlDerMuenzen==0)
      {
         cout<<"Ich habe gewonnen!"<<endl;
         return;
      };
      anzahlDerMuenzen=anzahlDerMuenzen-zugMensch(anzahlDerMuenzen);
      if(anzahlDerMuenzen==0)
      {
         cout<<"Sie haben gewonnen!"<<endl;
         return;
      }
   }
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.01.2005, 13:04 Uhr
Th



Hallo Windalf,

deine "zugRechner"-Funktion ist aber auch fehlerhaft:


C++:
int zugRechner(int anzahlDerMuenzen)
{
   int wunschZug;
   if(anzahlDerMuenzen<=4) // auch bei 4 Münzen!!!
       wunschZug=anzahlDerMuenzen-1;  // hier der korrekte Code
   else
       wunschZug=1+rand()%3;
   cout<<"Der Computer nimmt "<<wunschZug<<" Muenze(n)"<<endl;
   return wunschZug;
};



Für die optimale Computer-KI sollte die Funktion versuchen, nicht die Anzahl der Münzen auf <=4 zu bringen, da sonst der Spieler das Spiel beenden kann, sondern möglichst die Anzahl der Münzen auf 5 zu bringen, dann muß der Spieler nämlich einen Zug machen und die KI kann gewinnen...

Dieser Post wurde am 13.01.2005 um 13:09 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.01.2005, 19:50 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Th
jo ist mir wohl ein fehlerchen unterlaufen ... habs auch nicht getestet sondern nur direkt gepostet... da passiert sowas schon mal
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: