Zacznę od tego, że jestem bardzo początkująca i średnio radzę sobie z programowaniem. Mam za zadanie jako projekt stworzyć grę konsolową Pentago oraz kółko i krzyżyk na tablicy 6x6. Zaczęłam to "tworzyć", jednak nie poradzę sobie sama, a trochę goni mnie czas.
Chcę wykorzystać do tego tablicę[6][6]. Gra ma również zawierać możliwość wprowadzenia nazw graczy co zrobiłam za pomocą stringa.
Określiłam warunki wygranej i remisu wykorzystując funkcję bool, jednak nie wiem czy zrobiłam to prawidłowo.
Udało mi się stworzyć planszę (nie jest ona według wymagać, ponieważ mam tutaj również problem ze stworzeniem podziału między ćwiartkami planszy).
Największy problem mam przy określeniu funkcji, która ma odpowiadać za ruch gracza. Powinno to wyglądać, że jeden z graczy wybiera daną ćwiartkę tablicy wykorzystując klawisz q, w, a, s, a następnie numer pola przez numer tak jak cyfry na numlocku. Nie wiem w jaki sposób określić sposób ruchu gracza. Próbowałam określić to na switchu określając case w zależności od wybranej literki ćwiartki, mimo to nadal mam problem z przedstawianiem w jaki sposób miało by to się odnosić do tablicy.
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órna) 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]
Ćwiartki odpowiadałby takim miejscom w tablicy. Tylko w jaki sposób napisać to jako ruch, w którym wybierałoby się ćwiartkę, a następnie numer? Najbliżej kojarzy mi się to z określaniem współrzędnych, jednak na to w mojej głowie również jest pustka.
Tutaj to co udało mi się to tej pory wypocić:
#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
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
}*/
void wypelnijTablice(char t[][6]) // wypełnienie tablicy numuerkami jak na numlocku przy poszczególnych ćwiartkach czy to ma sens
{
}
//funckja zwaraca true jeśli wygrana
bool wygranaKiK() //warunki wygarnaej w kółko i krzyżyk 6x6
{
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]) || (t[0][1] == t[1][i] == t[2][i] == t[3][i] == t[4][i] == t[5][i]) ||
(t[0][0] == t[1][1] == t[2][2] == t[3][3] == t[4][4] == t[5][5]) || (t[0][5] == t[1][4] == t[2][3] == t[3][2] == t[4][1] == t[5][0]));
//to wtedy wygrana ale jak to określić :( chyba, że spróbować z bool
//wygrana przez kolumny
//to wtedy wygrana ale jak to określić :( co zwrócić, dobra gubię się z else czy bez
//wygraba po skosie
//to coś zwrócić???
//prościej byłoby z pętlą tylko trzeba by ją napisać heh
}
}
int 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
{
int r; //określa
char c; // zmienna określająca stronę (ćwiartkę) planszy
cout << "Podaj numer ćwiartki: q - lewa górna, w - prawa górna, a - lewa dolna, s - prawa dolna oraz numer pola: " << endl;
do
{
switch (c)
{
case 'q':
//cos tam coś tam znaczy warunek
break;
case 'w':
//warunek
break;
case 'a':
//warunel
break;
case 's':
//warunek
break;
default:
cout << "Niepoprawna opcja!" << endl << endl;
break;
}
} while ();
}
void graKiK()
{
//składa się z planszy, warunku wygrania i remisu, ruchu. takie no podsumowanie
}
/*void pauza()
{
}
*/
void Gracz() // dodanie nazwy graczy, string czy na tablicy, może wrzucić do to main jak ma być danie nazw przed grą
{
string Gracz1;
string Gracz2;
cout << "Podaj nazwe pierwszego gracza: " << endl;
getline(cin, Gracz1);
cout << "Nawza pierwszego gracza: " << Gracz1 << endl;
cout << "Podaj nazwe drugiego gracza: " << endl;
getline(cin, Gracz2);
cout << "Nawza drugiego gracza: " << Gracz2 << endl;
}
int main()
{
char odp;
//tu się walnie powitanie
Gracz();
cout << "Wybierz opcje: " << endl;
cout << "k: Gra w kolko i krzyzyk na planszy 6x6" << endl;
cout << "p:Gra w Pentago" << endl;
cout << "o: Predefiniowana plansza do Pentago" << endl;
cout << "h: Opis Pentago" << endl;
cout << "z: Wyjscie z programu" << endl;
cin >> odp;
//zmienna do menu
//tu się pyknie menu na switch
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 << "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 << " 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 << " 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 << "Niepoprawna opcja!" << endl << endl;
break;
}
return 0;
}