Creative Commons License Foxbond's Repo

/** (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