Na projekt mam za zadanie napisać grę konsolową kółko i krzyżyk 6x6 oraz Pentago. Mam jednak pewne problemy, a zaczynam mieć coraz mniej czasu.
Miałoby to się odbywać za pomocą tablicy [6][6].
Stworzyłam funkcję rysującą planszę, jednak nie jestem pewna w jaki sposób stworzyć pętle, aby widoczne było oddzielenie pomiędzy ćwiartkami.
Największy problem mam jednak z ruchem gracza. Miałby się on odbywać przez określenie symbolu ćwiartki q - lewa górna, w - prawa górna, a - lewa dolna, s - prawa dolna oraz numeru pola, który odpowiadałby ułożeniu na NumLocku. Wpadłam na może niezbyt dobry pomysł aby określić ćwiartki przez pętle for w zależności od wiersza i kolumny tablicy. Jednak nadal mam problem z przetworzeniem tego na ruch gracza wraz z wyświetleniem w danym polu X lub O.
Nie jestem również pewna czy prawidłowo określiłam funkcję bool, które powinny zawracać true w razie spełnienia warunków wygranej. Jest bardzo pewna, że jest to zrobione nieprawidłowo.
Dodatkowo zrobiłam menu na switch. Mam jednak problem aby zrobić pętle do while (ponieważ switch opiera się na znakach i nie jestem pewna w jaki sposób określić wykonywanie switcha w pętli).
I ćwiartka t[0][0], t[0][1], t[0][2] II ćwiartka t[0][3], t[0][4], t[0][5]
q (lewa góna) t[1][0], t[1][1], t[1][2] w(prawa górna) t[1][3], t[1][4], t[1][5]
t[2][0], t[2][1], t[2][2] t[2][3], t[2][4], t[2][5]
III ćwiartka t[3][0], t[3][1], t[3][2] IV ćwiartka t[3][3], t[3][4], t[3][5]
a(lewa dolna) t[4][0], t[4][1], t[4][2] s(prawa dolna) t[4][3], t[4][4], t[4][5]
t[5][0], t[5][1], t[5][2] t[5][3], t[5][4], t[5][5]
#include <iostream>
#include <string>
using namespace std;
char t[6][6]; //tablica 6x6
const int kolumny = 6; //stała określająca liczbę kolumn
const int wiersze = 6; // stała określająca liczbę wierszy
string g1;
string g2;
void rysujLinie(int kolumny)
{
cout << " ";
for (int i = 0; i < kolumny; i++)
{
cout << " ---";
}
cout << endl;
}
void rysujNumery(int kolumny)
{
cout << " ";
for (int i = 0; i < kolumny; i++)
{
cout << " " << i + 1 << " ";
}
cout << endl;
}
void Plansza(int wiersze, int kolumny) //funkcja rysuje planszę, ale w sumie musiałbym jakoś przerobić, żeby widoczne było oddzieleni ćwirtek + wymaganie dodtkowe box drawings :(
{
rysujNumery(kolumny);
rysujLinie(kolumny);
for (int i = 0; i < wiersze; i++)
{
cout << " " << int(1 + i);
for (int j = 0; j < kolumny; j++)
{
cout << " | ";
}
cout << " | " << int(1 + i) << endl;
rysujLinie(kolumny);
}
rysujNumery(kolumny);
}
/* for (int i = 0; i < 6; i++) // pętla odpowiedzialna za ilość wierszy
{
for (int n = 0; n < 6; n++) //pętla odpowiedzialna za ilość kolumn
{
if (i % 2 == 0) cout << "-"; //rysujemy kreski poziome do planszy
else if (n % 2 == 0 || i % 2 == 0 && i % 2 == 0) cout << "|"; //Rysujemy kreski pionowe do planszy
else cout << " ";
}
cout << endl; ale to wychodzi plansza na jednowymiarową bardziej
}*/
bool wygranaKiK() //warunki wygarnaej w kółko i krzyżyk 6x6, funkcja zwarca true jeśli wygrana
{
for (int i = 0; i < 6; i++)
{
//wygrana przez rzędy
return ((t[i][0] == t[i][1] == t[i][2] == t[i][3] == t[i][4] == t[i][5])|| //to wtedy wygrana ale jak to określić :( chyba, że spróbować z bool
//wygrana przez kolumny
(t[0][1] == t[1][i] == t[2][i] == t[3][i] == t[4][i] == t[5][i])|| //to wtedy wygrana ale jak to określić :( co zwrócić, dobra gubię się z else czy bez
//wygraba po skosie
(t[0][0] == t[1][1] == t[2][2] == t[3][3] == t[4][4] == t[5][5])|| //to coś zwrócić???
(t[0][5] == t[1][4] == t[2][3] == t[3][2] == t[4][1] == t[5][0]));
//prościej byłoby z pętlą tylko trzeba by ją napisać heh
}
}
bool remis() //kiedy zapełniona tablica bez znaków w liini, które umożliwiają wygraną
{
for (int i = 0; i < 6; i++)
for (int j = 0; j < 6; j++)
if (t[i][j] == ' ')
return false;
return true;
}
void ruch(char t[][6]) //wybranie ćwiartki, a następnie pola w ćwiaertce
{
char q = t[6][6];
char w = t[6][6];
char a = t[6][6];
char s = t[6][6];
char odp;
cout << "Podaj numer ćwiartki: q - lewa górna, w - prawa górna, a - lewa dolna, s - prawa dolna oraz numer pola: " << endl;
cin >> odp;
for (int i = 0; i < 3; i++) //podział na ćwiartki
{
for (int j = 0; j < 3; j++)
{
t[i][j] = q; //Icwiartka;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; 3 < j < 6; j++)
{
t[i][j] = w; //IIcwiartka;
}
}
for (int i = 0; 3 < i < 6; i++)
{
for (int j = 0; j < 3; j++)
{
t[i][j] = a;//IIIcwiartka;
}
}
for (int i = 0; 3 < i < 6; i++)
{
for (int j = 0; 3 < j < 6; j++)
{
t[i][j] = s; //IVcwiartka;
}
}
}
void graKiK()
{
cout << "\t\t\tWitaj w grze w kółko i krzyżyk" << endl;
cout << "\t\t\Gracz: " << g1 << "X to twoj zeton" << endl;
cout << "\t\t\Gracz: " << g2 << "O to twoj zeton" << endl;
//składa się z planszy, warunku wygrania i remisu, ruchu. takie no podsumowanie
}
int main()
{
cout << "\t\t\Witaj w grze w kolko i krzyzyk lub Pentago" << endl;
cout << "\t\t\Zacznijmy od nadania nazwgraczy " << endl;
cout << "\t\t\Podaj nazwe pierwszego gracza: " << endl;
getline(cin, g1);
cout << "\t\t\Nawza pierwszego gracza: " << g1 << endl;
cout << "\t\t\Podaj nazwe drugiego gracza: " << endl;
getline(cin, g2);
cout << "\t\t\Nawza drugiego gracza: " << g2 << endl;
char odp;
//tu się walnie powitanie
cout << "\t\t\Wybierz opcje: " << endl;
cout << "\t\t\k: Gra w kolko i krzyzyk na planszy 6x6" << endl;
cout << "\t\t\p:Gra w Pentago" << endl;
cout << "\t\t\o: Predefiniowana plansza do Pentago" << endl;
cout << "\t\t\h: Opis Pentago" << endl;
cout << "\t\t\z: Wyjscie z programu" << endl;
cin >> odp;
switch (odp)
{
case 'k'://odowłanie do fukncji kik
break;
case 'p': //odwołanie do fukcji Pentago
break;
case 'o': //odwłoanie do fukcknji odpowidającej za predefiniowaną planszę
break;
case 'h':
cout << "\t\t\Pentago jest gra dwuosobowa na planszy. Plansza sklada się z 4 ruchomych czesci, ktore mozna obracac. Każda część zawiera 9 miejsc na żetony" << endl;
cout << "\t\t\ Gracze po kolei oddaja ruch skladajacy sie z 2 czesci: dolozenia swojego zetonu na niezajete pole planszy, obrot jednej z czesci planszy o 90 stopni w dowolnym kierunku. " << endl;
cout << " \t\t\ Nie mozna zrezygnowac z adnej czesci ruchu. Wygrywa osoba, ktorej 5 zetonow, po pelnym ruchu, sa ulozone w rzedzie / kolumnie / po skosach(podobnie do gry kolko krzyzyk)." << endl;
break;
case 'z':
break;
default:
cout << "\t\t\Niepoprawna opcja!" << endl << endl; // do porprawy
break;
}
return 0;
}