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

Gra kolko i krzyzyk w konsoli

0 głosów
87 wizyt
pytanie zadane 3 grudnia 2018 w C i C++ przez Michał_Warmuz Mądrala (5,570 p.)

Czesc robie cwiczenie polegajace na napisaniu gry kolko i krzyzyk w konsoli i mam problem chodzi o to ze jezli uzytkownik 1 poda np 1 a potem 9 gra sie zawiesza nie wiem czemu ? help :( 

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string Pole[9] =" ";
    bool remis = true;
    int ruch;

    for(int i=0; i<9; i++) {

        if(i%2 == 0) {
            cout << "Ruch gracza 1: "<<endl;
            cin >> ruch;

            switch (ruch) {

                case 1: Pole[0] = "X"; break;
                case 2: Pole[1] = "X"; break;
                case 3: Pole[2] = "X"; break;
                case 4: Pole[3] = "X"; break;
                case 5: Pole[4] = "X"; break;
                case 6: Pole[5] = "X"; break;
                case 7: Pole[6] = "X"; break;
                case 8: Pole[7] = "X"; break;
                case 9: Pole[8] = "X"; break;
                default : cout << "ZLE POLE"<<endl;
            }

        }
        else {
            cout << "Ruch gracza 2: "<<endl;
            cin >> ruch;

            switch (ruch) {

                case 1: Pole[0] = "O"; break;
                case 2: Pole[1] = "O"; break;
                case 3: Pole[2] = "O"; break;
                case 4: Pole[3] = "O"; break;
                case 5: Pole[4] = "O"; break;
                case 6: Pole[5] = "O"; break;
                case 7: Pole[6] = "O"; break;
                case 8: Pole[7] = "O"; break;
                case 9: Pole[8] = "O"; break;
                default : cout << "ZLE POLE"<<endl;
            }
        }

        cout << " --------"<<endl;
        cout << Pole[0] << " | " << Pole[1] << " | " << Pole[2] << endl;
        cout << " --------"<<endl;
        cout << Pole[3] << " | " << Pole[4] << " | " << Pole[5] << endl;
        cout << " --------"<<endl;
        cout << Pole[6] << " | " << Pole[7] << " | " << Pole[8] << endl;
        cout << " --------"<<endl;


        for(int j=0; j<9; j++) {
            if(Pole[j] == "X" && Pole[j+1] == "X" && Pole[j+2] == "X") {cout << "Wygrywa Player1"; remis = false;return 0;}
            if(Pole[j] == "O" && Pole[j+1] == "O" && Pole[j+2] == "O") {cout << "Wygrywa Player2";remis = false;return 0;}
        }
    }

    if(remis == true) cout << "Remis";

    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 3 grudnia 2018 przez niezalogowany
wybrane 4 grudnia 2018 przez Michał_Warmuz
 
Najlepsza
Wydaje mi się że polę lepiej zadeklarować jako tablicę znaków. W końcu będzie ona stałego rozmiaru. Poza tym znaki do tablic chyba się przypisuje przez ' '

Musisz też zmodyfikować sprawdzanie czy jest już wygrany wyłoniony bo sprawdzasz czy są 3 takie same znaki pod rząd, czyli 3, 4, 5 oznacza wygraną, a chyba nie o to chodzi. Poza tym musisz uwzględnić po ukosie jeszcze.

U mnie po przerobieniu stringa na tablicę znaków działa poprawnie. Podejrzewam że znak 9 w stringu był zarezerwowany dla NULL i dlatego się krzaczył.
0 głosów
odpowiedź 3 grudnia 2018 przez PanRik Gaduła (4,630 p.)
for(int j=0; j<9; j++) {
            if(Pole[j] == "X" && Pole[j+1] == "X" && Pole[j+2] == "X") {cout << "Wygrywa Player1"; remis = false;return 0;}
            if(Pole[j] == "O" && Pole[j+1] == "O" && Pole[j+2] == "O") {cout << "Wygrywa Player2";remis = false;return 0;}
        }

1. Wychodzisz tutaj po za tablice, tablica od 0 do 8 , a Ty sprawdzasz Pole[7+2], Pole[8+2] ...
 

2. Nie masz sprawdzanie, czy np. Gracz1 w swoim ruchu nie dał np. :
2.1 Zajętego już pola przez siebie.
2.2 Zajętego już pola przez drugiego gracza.

Podobne pytania

0 głosów
1 odpowiedź 763 wizyt
pytanie zadane 12 lutego 2018 w JavaScript, jQuery, AJAX przez Adam Polak Początkujący (370 p.)
0 głosów
1 odpowiedź 32 wizyt
pytanie zadane 9 czerwca w Java przez Adam Polak Początkujący (370 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

64,866 zapytań

111,327 odpowiedzi

234,208 komentarzy

46,729 pasjonatów

Przeglądających: 136
Pasjonatów: 0 Gości: 136

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...