Witam. Przerabiam właśnie książkę Alexa Allaina -Przewodnik dla początkujących. Jest tam takie zadanie praktyczne: "Napisz grę w kółko i krzyżyk, w której dwie osoby grają przeciw sobie. Jeśli to możliwe, użyj typu wyliczeniowego enum w celu przechowywania wartości pól planszy." Udało mi się napisać tę grę, ale niestety nie umiałem wykorzystać tego typu wyliczeniowego, i nie wiem tak naprawdę jak on by mi mógł tu pomóc, w książce było to słabo wyjaśnione. Mógłby mi ktoś podpowiedzieć, w jaki sposób mógłbym go wykorzystać w tej grze?
#include <iostream>
#include <Windows.h>
using namespace std;
char plansza[3][3] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };
char znak = 'X';
int xw = 0;
int ow = 0;
void Rysuj()
{
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
cout << plansza[i][j];
}
cout << endl;
}
}
void Gracz()
{
int a;
cin >> a;
switch (a)
{
case 1:
if (plansza[0][0] == '-')
{
plansza[0][0] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 2:
if (plansza[0][1] == '-')
{
plansza[0][1] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 3:
if (plansza[0][2] == '-')
{
plansza[0][2] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 4:
if (plansza[1][0] == '-')
{
plansza[1][0] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 5:
if (plansza[1][1] == '-')
{
plansza[1][1] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 6:
if (plansza[1][2] == '-')
{
plansza[1][2] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 7:
if (plansza[2][0] == '-')
{
plansza[2][0] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 8:
if (plansza[2][1] == '-')
{
plansza[2][1] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
case 9:
if (plansza[2][2] == '-')
{
plansza[2][2] = znak;
}
else
{
cout << "To pole jest zajete!\a";
Sleep(600);
Gracz();
}
break;
default:
cout << "Sprobuj jeszcze raz!\a" << endl;
Sleep(600);
Gracz();
}
system("cls");
}
void ZmianaGracza()
{
switch (znak)
{
case'X':
cout << "Kolej gracza O\n\n";
znak = 'O';
break;
case 'O':
cout << "Kolej gracza X\n\n";
znak = 'X';
break;
}
}
void SprawdzWygrana()
{
// gracz X
if (plansza[0][0] == 'X' && plansza[0][1] == 'X' && plansza[0][2] == 'X' ||
plansza[0][0] == 'X' && plansza[1][0] == 'X' && plansza[2][0] == 'X' ||
plansza[1][0] == 'X' && plansza[1][1] == 'X' && plansza[1][2] == 'X' ||
plansza[2][0] == 'X' && plansza[2][1] == 'X' && plansza[2][2] == 'X' ||
plansza[0][1] == 'X' && plansza[1][1] == 'X' && plansza[2][1] == 'X' ||
plansza[0][0] == 'X' && plansza[1][1] == 'X' && plansza[2][2] == 'X' ||
plansza[2][0] == 'X' && plansza[1][1] == 'X' && plansza[0][2] == 'X' ||
plansza[0][2] == 'X' && plansza[1][2] == 'X' && plansza[2][2] == 'X')
{
Rysuj();
cout << "\nwygral gracz X!" << endl;
xw++;
cout << "\nGracz X wygral " << xw << " razy" << endl;
string w;
cout << "\nAby kontynuowac gre wpisz dowolny znak, aby zakonczyc wpisz 0..." << endl;
cin >> w;
if (w == "0")
{
exit(0);
}
else
{
system("cls");
cout << "Kolej gracza O\n\n";
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
plansza[i][j] = '-', '-', '-', '-', '-', '-', '-', '-', '-';
}
}
}
}
//Gracz O
if (plansza[0][0] == 'O' && plansza[0][1] == 'O' && plansza[0][2] == 'O' ||
plansza[0][0] == 'O' && plansza[1][0] == 'O' && plansza[2][0] == 'O' ||
plansza[1][0] == 'O' && plansza[1][1] == 'O' && plansza[1][2] == 'O' ||
plansza[2][0] == 'O' && plansza[2][1] == 'O' && plansza[2][2] == 'O' ||
plansza[0][1] == 'O' && plansza[1][1] == 'O' && plansza[2][1] == 'O' ||
plansza[0][0] == 'O' && plansza[1][1] == 'O' && plansza[2][2] == 'O' ||
plansza[2][0] == 'O' && plansza[1][1] == 'O' && plansza[0][2] == 'O' ||
plansza[0][2] == 'O' && plansza[1][2] == 'O' && plansza[2][2] == 'O')
{
Rysuj();
cout << "\nwygral gracz O!" << endl;
ow++;
cout << "\nGracz O wygral " << ow << " razy" << endl;
string w;
cout << "\nAby kontynuowac gre wpisz dowolny znak, aby zakonczyc wpisz 0..." << endl;
cin >> w;
if (w == "0")
{
exit(0);
}
else
{
system("cls");
cout << "Kolej gracza X\n\n";
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
plansza[i][j] = '-', '-', '-', '-', '-', '-', '-', '-', '-';
}
}
}
}
//Remis
if (plansza[0][0] != '-' && plansza[0][1] != '-' && plansza[0][2] != '-' && plansza[1][0] != '-' && plansza[1][1] != '-' && plansza[1][2] != '-' &&
plansza[2][0] != '-' && plansza[2][1] != '-' && plansza[2][2] != '-')
{
Rysuj();
cout << "\nREMIS!!!" << endl;
string w;
cout << "\nAby kontynuowac gre wpisz dowolny znak, aby zakonczyc wpisz 0..." << endl;
cin >> w;
if (w == "0")
{
exit(0);
}
else
{
system("cls");
cout << "Kolej gracza X\n\n";
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
plansza[i][j] = '-', '-', '-', '-', '-', '-', '-', '-', '-';
}
}
}
}
}
int main()
{
cout << "Witaj w grze Kolko i Krzyzyk!\n";
cout << "Gracz X rozpoczyna!" << endl;
while (true)
{
Rysuj();
Gracz();
ZmianaGracza();
SprawdzWygrana();
}
return 0;
}