/** (c) 2012 Michał (Foxbond) Chraniuk */
#include <iostream>
#include <time.h>
#include <conio.h>
#include <math.h>
using namespace std;
int main () {
//sprawiamy, aby liczby były losowe
srand((int)time(NULL));
int poleGry[10][4];
int wyniki[10][2];
int kod[4];
int ruch = 0;
int _buf = 0;
bool wygrana = false;
bool cheats = false;
char powtorz;
cout << "Witaj w grze Mastermind\nKliknij dowolny klawisz, aby kontynuowac\n";
_getch();
system("cls");
//główna pętla
while (true){
system("cls");
//czyscimy pole gry i wyniki
for (short i=0;i<10;i++){
for (short ii=0;ii<4;ii++){
poleGry[i][ii] = 0;
}
wyniki[i][0] = 0;
wyniki[i][1] = 0;
}
//czyścimy inne
wygrana = false;
ruch = 0;
_buf = 0;
//generujemy kod
for (short i=0;i<4;i++){
kod[i] = (rand()%9)+1;
}
//pętla gry
while (true){
do {
system("cls");
//cheatz
if (cheats){
for (short i=0;i<4;i++){
cout << kod[i];
}
cout << "\n\n";
}
//wyświetlanie obecnych ruchów i ich wyników
for (short i=0;i<10;i++){
//nie rysujemy niewykonanych ruchów
if (i >= ruch){
break;
}
//odpowiedzi
for (short l=0;l<4;l++){
cout << poleGry[i][l];
}
cout << " ";
//znak prawidłowej odp
for (short w=0;w<wyniki[i][0];w++){
cout << "*";
}
//znak prawidłowej odp, ale na złym miejscu
for (short w=0;w<wyniki[i][1];w++){
cout << "o";
}
cout << "\n";
}
cin >> _buf;
//pobieramy odp, tylko jeśli ma dokładnie 4 cyfry (od 1 do 9)
}while (_buf < 1111 || _buf > 9999);
//przypisujemy wynik
for (short i=3;i>=0;i--){
poleGry[ruch][i] = _buf%10;
_buf = (int)_buf/10;
}
//sprawdzamy odpowiedz
for (short i=0;i<4;i++){
//jeśli jest na swoim miejscu
if (kod[i] == poleGry[ruch][i]){
wyniki[ruch][0]++;
continue;
}
for (short ii=0;ii<4;ii++){
//jeśli jest nie na swoim miejscu
if (kod[i] == poleGry[ruch][ii]){
wyniki[ruch][1]++;
break;
}
}
}
//wygrana
if (wyniki[ruch][0] == 4){
cout << "\nWygrales!";
break;
}
//przegral (koniec ruchow)
if (ruch == 9){
cout << "\nPrzegrales!";
break;
}
ruch++;
}
cout << "\nJeszcze raz? (t/n)\n";
cin >> powtorz;
//wychodzimy z pętli jeśli nie chce już grać
if (powtorz == 'n'){
break;
}
}
return 0;
}
> Back