Mastermind

Das folgende Beispiel auf dieser Unterseite ist ein Mastermind-Programm:

Die Regeln für dieses Mastermind: Es gibt sechs Farben. Vier davon versteckt der erste Mitspieler. Ich spiele hier immer mit vier verschiedenen Farben, also niemals rot rot oder so. Der zweite Mitspieler muss den Code knacken, sprich erraten. Auf jeden "Code" reagiert der erste Mitspieler (hier der Computer) damit, dass er schwarze und weiße Stifte steckt. Dabei bedeutet jeder schwarze Stift, dass jeweils Farbe und Position stimmen; und jeder weiße Stift bedeutet, dass nur die Farbe stimmt.

//mind.cpp Stand: 9. 1. 2016
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int RATEREIHE=4;
const int MAX=6;
int geheim[MAX]={1,2,3,4,5,6};

int main()
{
   int geraten[RATEREIHE];
   cout << "Mastermind   4 von 6:           Die 9 beendet das Spiel." << endl;
   cout << "Blau=1, gelb=2, gruen=3, rot=4, braun=5, orange=6." << endl;
   cout << "---------------------------------------------------------" << endl;
   cout << "Bitte je 4 Ziffern in einer Zeile eingeben:" << endl;
   cout << "Dein 1. Tipp, bitte: 1 Leertaste 2 Leertaste 5 Leertaste 6." << endl;
   cout << endl;
   system("pause");
   srand(time(NULL));
   //Mischen:
   for (int k=0; k<MAX; k++)
   {
        int zufall = rand()%MAX;
     int temp = geheim[k];
        geheim[k] = geheim[zufall];
        geheim[zufall] = temp;
   }

   //Tipps:
   for (int z=1;; z++)
   {
        int schwarz=0;
        cout << " Dein " << z << ". Tipp, bitte: ";
        for (int y=0; y<RATEREIHE; y++)
        { cin >> geraten[y];
        if (geraten[0]==9)
        {
        for (int v=0; v<RATEREIHE; v++) cout << geheim[v];
        cout << endl;
        system("pause");
        exit(0);
        }
   
        if (geraten[y]==geheim[y])
       schwarz++;
    
   }//for y
   cout << "                               " << schwarz << " Schwarze";
   if (schwarz==1) cout << "r";
   if (schwarz==4)
     {
         cout << endl << "Du hast es geschafft ..." << endl;
         system("pause");
        exit(0);
     }
   int weiss=0;
   for (int x=0; x<3; x++)
    { if (geraten[x]==geheim[x+1]) weiss++;
     if (geraten[x+1]==geheim[x] ) weiss++;
 }//for x
 
   for (int w=0; w<2; w++)
    {
    if (geraten[w]==geheim[w+2]) weiss++;
    if (geraten[w+2]==geheim[w]) weiss++;
    }//for w
   if (geraten[0]==geheim[3]) weiss++;
   if (geraten[3]==geheim[0]) weiss++;
   cout << ", " << weiss << " Weisse";
   if (weiss==1) cout << "r";
   cout << endl;
   }//for z 
}//main


Eine kleine Veränderung ist hier geschehen. Ich habe das Mastermind zu einem Spiel "4 aus 5" gemacht. Das heißt: Es sind insgesamt fünf Farben statt sechs.

//mind5.cpp
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int ratereihe=4;
const int MAX=5;
int geheim[MAX]={1,2,3,4,5};

int main()
{
   int geraten[ratereihe];
   cout << "Mastermind   4 von 5:  1 bis 5:  Die 9 beendet das Spiel." << endl;
   cout << "---------------------------------------------------------" << endl;
   cout << "Bitte so eingeben: 1 Leertaste 2 Leertaste 4 Leertaste 5." << endl;
   cout << endl;
   system("pause");
   srand(time(NULL));
   //Mischen:
   for (int k=0; k<MAX; k++)
   {
        int zufall = rand()%MAX;
     int temp = geheim[k];
        geheim[k] = geheim[zufall];
        geheim[zufall] = temp;
   }

   //Tipps:
   for (int z=1; ; z++)
   {
        int schwarz=0;
        cout << " Dein " << z << ". Tipp, bitte: ";
        for (int y=0; y<ratereihe; y++)
        { cin >> geraten[y];
        if (geraten[0]==9)
        {
        for (int v=0; v<ratereihe; v++) cout << geheim[v];
        cout << endl;
        system("pause");
        exit(0);
        }
   
        if (geraten[y]==geheim[y])
       schwarz++;
    
   }//for y
   cout << "                               " << schwarz << " Schwarze";
   if (schwarz==1) cout << "r";
   if (schwarz==4) { cout << endl; system("pause");  exit(0); }
   int weiss=0;
   for (int x=0; x<3; x++)
    { if (geraten[x]==geheim[x+1]) weiss++;
     if (geraten[x+1]==geheim[x] ) weiss++;
 }//for x
 
   for (int w=0; w<2; w++)
    {
    if (geraten[w]==geheim[w+2]) weiss++;
    if (geraten[w+2]==geheim[w]) weiss++;
    }//for w
   if (geraten[0]==geheim[3]) weiss++;
   if (geraten[3]==geheim[0]) weiss++;
   cout << ", " << weiss << " Weisse";
   if (weiss==1) cout << "r";
   cout << endl;
   }//for z     
}//main


Dieses zweite Beispiel ist ein Bibelquiz. Du kannst natürlich mehr als drei Bibelstellen programmieren.

//biblenew.cpp ist auf Dev-C++ von jetzt (2014) umgeschrieben.

//Es mischt auch!

 

#include <iostream> //std::cout, cout

#include <cstdlib> //rand, srand...

#include <ctime> //srand(time(NULL))

#include <conio.h> //getche(), getch()

using namespace std;

const int MAX=3; //int

 

int rmerk[MAX];//Ein Vektor, 3 Elemente

 

struct bezeich

{

string einwort;

string stelle;

char posneg;

};

bezeich b[MAX];//Ein Vektor mit Strukturen, 3 Elemente

 

//Funktion anmelden und definieren:

void wait()

{

for (char a=0; a<4; a++)

for (long L=0; L<30000; L++) {}

}

 

int main()

{

cout << "Bible";

cout <<endl<< "------------";

char ein;

//Zufall initialisieren:

srand(time(NULL));

b[0].einwort="Wenn jemand nicht im Wort..";

b[0].stelle = "Jak.1,3";

b[0].posneg = '-';

b[1].einwort = "Das Wort ist wie zweischneidig";

b[1].stelle="Hebr.4,12";

b[1].posneg = '+';

b[2].einwort = "So sehr hat Gott die Welt geliebt";

b[2].stelle="Joh.3,16";

b[2].posneg = '+';

 

//Mischen:

for (int i=0; i<MAX; i++)

{

int k=rand() % MAX;

bezeich temp = b[i]; //Struktur b[i] speichern

b[i] = b[k]; //Tausch

b[k] = temp;

}//for zum Mischen

 

//Entscheidung abfragen:

for (int j=0; j<MAX; j++)

{

do {

cout <<endl<< "Tippen Sie PLUS oder MINUS!";

cout <<endl<< "Wie wuerden Sie entscheiden? > " << b[j].einwort << " " << b[j].stelle;

wait();

ein = getche();

wait();

if (ein==b[j].posneg)

  { cout << " Richtig!"; rmerk[j] = true; }

else

  { cout << " Falsch."; rmerk[j] = false; }

//

} while ( ein !='+' && ein !='-' );

}//for

wait();

//Zaehle die richtigen:

int zus=0;

for (int L=0; L<MAX; L++)

{

zus += rmerk[L];

}//for

if (zus >2) cout <<endl<< "Exzellent!!!!!";

else cout <<endl<< " Wertung eher nicht so gut. Taste bitte!";

getch();

return 0;

} //main()

 


Hier geht es weiter >>