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

poprawnosc sprawdzenia wygranej w grze K&K

Object Storage Arubacloud
+1 głos
162 wizyt
pytanie zadane 7 czerwca 2021 w C i C++ przez grzegozzz Nowicjusz (130 p.)

Cześć. Tworze grę w kółko i krzyżyk nxn. Mam problem ze sprawdzeniem wygranej, początkowo myślałem ze program działa poprawnie jednak wpisanie 5 tych samych znaków w obojętnie jakim miejscu na planszy, komputer odbiera jako wygrana, jestem poczatkujący, dlatego każda podpowiedz jest dobra proszę o pomoc. dziękuje.  

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
using namespace std;

void menu_glowne(int wybor_menu){
    system("cls");
        cout << "############################################" << endl;
        cout << "#         +---------------------+          #" << endl;
        cout << "#         |   KOLKO & KRZYZYK   |          #" << endl;
        cout << "#         +---------------------+          #" << endl;
        cout << "#                                          #" << endl;
    if(wybor_menu == 1){
        cout << "#            >>[ NOWA GRA ]<<              #" << endl;
    }else{
        cout << "#                NOWA GRA                  #" << endl;
    }
        cout << "#                                          #" << endl;
    if(wybor_menu == 2){
        cout << "#           >>[ ZASADY GRY ]<<             #" << endl;
    }else{
        cout << "#               ZASADY GRY                 #" << endl;
    }
        cout << "#                                          #" << endl;
    if(wybor_menu == 3){
        cout << "#            >>[ AUTORZY ]<<               #" << endl;
    }else{
        cout << "#                AUTORZY                   #" << endl;
    }
        cout << "#                                          #" << endl;
        cout << "############################################" << endl;
        cout << "#     w/s - gora/dol // z - zatwierdz      #" << endl;
        cout << "#           q - wyjscie z gry              #" << endl;
        cout << "############################################" << endl;
}
void pokaz_plansze(string **plansza, int row, int col){
    system("cls");
    for(int a = -2 ; a<col*3; a++){
        cout << "#";
    }
        cout << "\n KOLKO & KRZYZYK\n";

    for(int a = -1 ; a<col*3; a++){
        cout << "#";
    }
        cout << "#\n#";

    for (int i=0; i<row; i++){
        for(int j=0 ; j<col; j++){
            cout << "[" <<plansza[i][j] <<"]" ;
    }
            cout<<"#\n#";
    }
    for(int a = -1; a<col*3; a++){
        cout << "#";
    }
}

void wygrywa(int wygralo_kolko){
    if(wygralo_kolko){
        cout << "\nWygralo kolko! Gratulacje!";
    }else{
        cout << "\nWygral krzyzyk! Gratulacje!";
    }
}

int sprawdz_wygrana(string **plansza, int x, int y){

    int rzad = 0;
    int czy_ktos_wygral = 0;

    for (int a=0; a<x; a++){ // Wiersze (0 - x)
        for (int b=0; b<y; b++){ // Kolumny  (od 0 do y)
            for(int p=-5; p<=5; p++){ // Wiersze (-5 do 5)
                for(int q=-5; q<=5; q++){ // Kolumny (od -5 do 5)
                    if(a+p>=0 && b+q>=0 && a+p<y && b+q<x){
                        if(plansza[a][b] == plansza[a+p][b+q] && plansza[a][b] != " "){
                            rzad += 1;
                            if(rzad >= 5){
                                pokaz_plansze(plansza, x, y);
                                czy_ktos_wygral = 1;
                            }
                        }
                    }

                }

            }
            rzad = 0;

        }

        rzad = 0;
    }

    return czy_ktos_wygral;
}

void graj_pvp(){
    // System gry pvp
    system("cls");
    int row, colm, kolumna, wiersz;
    cout << "Za chwile rozpoczniesz gre, wybierz rozmiar planszy: " << endl;
    cout << "Podaj liczbe wierszy: ";
    cin >> row;
    cout << "Podaj liczbe kolumn: ";
    cin >> colm;

    string** plansza = new string*[row];

    for(int i=0; i<row; i++)
        plansza[i] = new string[colm];

    for(int i=0; i<row; i++)
        for(int j=0; j<colm; j++)
            plansza[i][j] = " ";

    pokaz_plansze(plansza, row, colm);

    bool kolej_kolka = true;
    int czy_ktos_wygral = 0;
    while(1==1){
        pokaz_plansze(plansza, row, colm);
        if(kolej_kolka){
            cout << "\nKolej kolka !\n";
        }else{
            cout << "\nKolej krzyzyka!\n";
        }
            cout << "\nWprowadz numer kolumny: ";
            cin >> kolumna;

    while(1==1){

        if(kolumna >= 1 && colm < kolumna ){
            cout << "Podales zly zakres liczbowy! Podaj numer kolumny jeszcze raz:\n";
            cin >> kolumna;
        }else{
            break;}}

            cout << "Podaj numer wiersza: ";
            cin >> wiersz;

    while(1==1){
        if(wiersz >= 1 && row < wiersz ){
            cout << "Podales zly zakres liczbowy! Podaj numer wiersza jeszcze raz:\n";
            cin >> wiersz;
        }else{
            break;}}

        if(plansza[wiersz-1][kolumna-1] == " "){
            // Miejsce puste!
            if(kolej_kolka){
                plansza[wiersz-1][kolumna-1] = "O";
            }else{
                plansza[wiersz-1][kolumna-1] = "X";
            }
            czy_ktos_wygral = sprawdz_wygrana(plansza, row, colm);
            if(czy_ktos_wygral){
                wygrywa(kolej_kolka);
                system("pause");
                break;
            }else{
                kolej_kolka = !kolej_kolka;
            }
    } else{
            cout << "To miejsce jest zajete!";
            Sleep(2000);
        }
    }


}

void zasady(){

    system("cls");

    cout << " ##########################################################" << endl;
    cout << " #                 +-------------------+                  #" << endl;
    cout << " #                 |    ZASADY GRY     |                  #" << endl;
    cout << " #                 +-------------------+                  #" << endl;
    cout << " ##########################################################" << endl;
    cout << " #          dowolny klawisz = powrot do menu              #" << endl;
    cout << " ##########################################################" << endl;

    system("pause >nul");

}


void autorzy(){

    system("cls");
    cout << " ############################################" << endl;
    cout << " #          +--------------------+          #" << endl;
    cout << " #          |      AUTORZY       |          #" << endl;
    cout << " #          +--------------------+          #" << endl;
    cout << " ############################################" << endl;
    cout << " #     dowolny klawisz = powrot do menu     #" << endl;
    cout << " ############################################" << endl;

    system("pause >nul");


}


int main()
{

    int wybor = 1;

    string literka;
     while(1==1){

    while(1==1){
        menu_glowne(wybor);
        literka = getch();
        if(literka == "w"){
            if(wybor > 1){
                wybor -= 1;
            }
        }
        if(literka == "s"){
            if(wybor < 3){
                wybor += 1;
            }
        }
        if(literka == "z"){
            break;}

        if(literka == "q"){
            return 0;}
        }



    if(wybor == 1){
        graj_pvp();
    }
    else if(wybor == 2){
        zasady();
    }else if(wybor == 3){
        autorzy();
    }else{}

     }
    return 0;

    }

 

komentarz 8 czerwca 2021 przez TOM_CPP Pasjonat (22,640 p.)

Masz wyciek pamięci. Nie usuwasz dynamicznej tablicy, którą tworzysz przy pomocy operatora new. Pomyśl o użyciu std::vector jako tablicy dwuwymiarowej, a zamiast stringa użyj typu enum do zdefiniowania jej zawartości.

enum class FIELD { NIL , NOUGHT , CROSS };

vector<vector<FIELD>> board( row, vector<FIELD>(column) );

 

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2021 przez overcq Pasjonat (21,710 p.)

Możesz spróbować sprawdzać kolejno wszystkie przypadki wygranej, rozpoczynając od poziomo:

bool sprawdz_wygrana(string **plansza, int height, int width)
{
    int i;
    string a = " ";
    for( unsigned y = 0; y != height; y++ )
        for( unsigned x = 0; x != width; x++ )
            if( plansza[y][x] != a )
            {   i = 1;
                a = plansza[y][x];
            }else if( a != " "
            && ++i == 5
            )
                return true;
    // ...
    return false;
}

 

Podobne pytania

0 głosów
1 odpowiedź 489 wizyt
0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 25 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,610 p.)
0 głosów
1 odpowiedź 204 wizyt
pytanie zadane 19 grudnia 2018 w C i C++ przez Patryk_04 Nowicjusz (230 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...