Problem: podczas każdej rundy po pierwszej, w ostatnim elemencie tablicy odpowiedzialnej za przechowywanie stanu planszy kółko-krzyżyk raz wpisuje się kolko, a raz krzyżyk (jednocześnie ze zmieniającym się polem wg. wyboru gracza).
Co mam w kodzie źle?
klasa.h
#ifndef KLASA_H_INCLUDED
#define KLASA_H_INCLUDED
#include <string>
#include <iostream>
enum RUCH {KOLKO=10, KRZYZYK=1, PUSTE=0};
enum GRACZE{GKOLKO, GKRZYZYK};
//class CGra;
class CGra
{
private:
RUCH Rplansza[9];
GRACZE aktualny;
public:
void pokaz_plansze();
void pokaz_tablice();
void czysc_plansze();
char zamien(int r);
void zmiana_gracza();
void wybor_pola();
void popros_o_ruch();
void losowanie_gracza();
};
class CGracz
{
private:
std::string nazwa;
public:
void podaj_nazwe();
void wyswietl_nazwe();
};
#endif // KLASA_H_INCLUDED
klasa.cpp
#include "klasa.h"
char CGra::zamien(int r)
{
if (Rplansza[r]==PUSTE)
return ' ';
if (Rplansza[r]==KRZYZYK)
return 'X';
if (Rplansza[r]==KOLKO)
return 'O';
else
return 'u';
};
void CGra::pokaz_plansze()
{
std::cout<<std::endl;
std::cout<<" "<<Rplansza[1]<<" | "<<Rplansza[2]<<" | "<<Rplansza[3]<<std::endl;
std::cout<<" "<<"--+---+--"<<std::endl;
std::cout<<" "<<Rplansza[4]<<" | "<<Rplansza[5]<<" | "<<Rplansza[6]<<std::endl;
std::cout<<" "<<"--+---+--"<<std::endl;
std::cout<<" "<<Rplansza[7]<<" | "<<Rplansza[8]<<" | "<<Rplansza[9]<<std::endl;
};
void CGra::pokaz_tablice()
{
std::cout<<std::endl;
std::cout<<" "<<zamien(1)<<" | "<<zamien(2)<<" | "<<zamien(3)<<std::endl;
std::cout<<" "<<"--+---+--"<<std::endl;
std::cout<<" "<<zamien(4)<<" | "<<zamien(5)<<" | "<<zamien(6)<<std::endl;
std::cout<<" "<<"--+---+--"<<std::endl;
std::cout<<" "<<zamien(7)<<" | "<<zamien(8)<<" | "<<zamien(9)<<std::endl;
};
void CGracz::podaj_nazwe()
{
std::cin>>nazwa;
};
void CGracz::wyswietl_nazwe()
{
std::cout<<nazwa;
};
void CGra::czysc_plansze()
{
for(int q=0; q<=9; q++)
Rplansza[q]=PUSTE;
}
void CGra::zmiana_gracza()
{
if (aktualny==GKRZYZYK)
aktualny=GKOLKO;
else
aktualny=GKRZYZYK;
std::cout<<"aktualny gracz: "<<aktualny<<std::endl;
};
void CGra::wybor_pola()
{
int numer=0;
std::cin>>numer;
if (aktualny==GKRZYZYK)
Rplansza[numer]=KRZYZYK;
if (aktualny==GKOLKO)
Rplansza[numer]=KOLKO;
std::cout<<"numer: "<<numer<<std::endl;
};
void CGra::losowanie_gracza()
{
aktualny=GKOLKO;
};
void CGra::popros_o_ruch()
{
std::cout<<aktualny<<": Podaj numer pola"<<std::endl;
};
main.cpp
#include "klasa.h"
#include <iostream>
int main()
{
std::cout<<"Kolko i krzyzyk v1"<<std::endl;
std::cout<<"Menu:"<<std::endl;
std::cout<<"1. Czlowiek vs czlowiek "<<std::endl;
std::cout<<"2. Czlowiek vs komputer"<<std::endl;
std::cout<<"3. Wyjscie"<<std::endl;
int start_odpowiedz;
std::cin>>start_odpowiedz;
switch(start_odpowiedz)
{
case 1:
{
CGra CPgra;
CGracz gracz1;
CGracz gracz2;
std::cout<<"Podaj nazwe dla gracza 1:"<<std::endl;
gracz1.podaj_nazwe();
std::cout<<"Podaj nazwe dla gracza 2:"<<std::endl;
gracz2.podaj_nazwe();
CPgra.czysc_plansze();
CPgra.pokaz_plansze();
CPgra.losowanie_gracza();
while(true)
{
CPgra.popros_o_ruch();
CPgra.wybor_pola();
CPgra.pokaz_plansze();
CPgra.pokaz_tablice();
CPgra.zmiana_gracza();
};
break;
}
case 2:
std::cout<<"Jeszcze nie obslugiwane."<<std::endl;
break;
case 3:
std::cout<<"Jeszcze nie obslugiwane."<<std::endl;
break;
}
}