• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ gra Pentago i kółko i krzyżyk 6x6

Object Storage Arubacloud
0 głosów
704 wizyt
pytanie zadane 30 listopada 2021 w C i C++ przez niezalogowany
otwarte ponownie 6 grudnia 2021

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;
}
 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 379 wizyt
+1 głos
6 odpowiedzi 2,446 wizyt
pytanie zadane 16 kwietnia 2018 w C i C++ przez macias17 Nowicjusz (190 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...