Witam z góry przepraszam za dług kod. Nie wiem czy ktoś będzie chciał mi pomóc, ale nie widzę już sam innego wyjścia :(
Piszę projekt semestralny gry w Scrablle na zaliczenie z PO. Jeżeli ktoś może mi pomóc choć w jednym z problemow to będę dozgonnie wdzięczny :(
Czasem przy kompilowaniu występuje błąd i Visual chce debugować a czasem nie. Czym to jest spowodowane?
Nie wiem gdzie umieścić i jak stworzyć metodę zliczającą punkty.
Nie działa mi system zmiany tury, nie wiem dlaczego. Może ma ktoś lepszy pomysł?
Nie wiem jak wymusić na użytkowniku zaczęcie gry od środkowego pola a potem dokładanie liter do już istniejących słów.
Jeżeli ktoś jeszcze widzi jakieś błędy lub ma jakieś sugestie, to będę bardzo wdzięczny.
Z góry dziękuję za pomoc.
Gracz.h
#pragma once
#include "Plansza.h"
class Rozgrywka
{
int tura;
public:
int punkty;
int set_tura(int t);
int get_tura();
int nastepna();
Rozgrywka();
virtual ~Rozgrywka(void);
};
class Gracz: public Rozgrywka
{
Litera * reka[7];
Litera * pierwsza_litera;
int indeks;
public:
Gracz();
Gracz(int id);
virtual ~Gracz(void);
friend class Gra;
void litery_gracza();
Plansza Gracz::wstaw(Plansza B3);
};
Plansza.h
#pragma once
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <list>
using namespace std;
class Litera
{
char znak;
int pkt;
public:
Litera(char z1, int pkt1);
Litera();
~Litera(void){};
friend ostream & operator<<(ostream & wy, const Litera & L1);
friend class Gra;
Litera * nast;
};
class Plansza;
class Pole
{
Litera * letter;
int p_slowna;
int p_literowa;
public:
Pole(void);
~Pole(void){};
int set_wartosc(int nowa_slowna, int nowa_literowa);
friend ostream & operator<<(ostream & wy, const Pole & P1);
friend class Plansza;
bool wstaw_litere(Litera * L3);
};
class Plansza
{
Pole board[15][15];
public:
Plansza(void);
~Plansza(void);
friend ostream & operator<<(ostream & wy, const Plansza & B1);
bool umiesc(Litera * L2, int x, int y);
void legenda();
};
Gra.h
#pragma once
#include "Plansza.h"
#include "Gracz.h"
#include <iostream>
#include <list>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
class Gra
{
Litera * glowa;
Litera * wsk;
public:
Gra(void);
virtual ~Gra(void);
void dostepne_litery();
Gracz Gra::rozdaj_litery(Gracz player);
};
Gracz.cpp
#include "Gracz.h"
Rozgrywka::Rozgrywka(void)
{
}
Rozgrywka::~Rozgrywka(void)
{
}
int Rozgrywka::set_tura(int t)
{
return t=tura;
}
int Rozgrywka::get_tura()
{
return tura;
}
int Rozgrywka::nastepna()
{
return ++tura;
}
Gracz::Gracz(void)
{
}
Gracz::Gracz(int id)
{
indeks=id;
}
void Gracz::litery_gracza()
{
cout << "Litery: Gracza " ;
cout << indeks << endl;
for(int p=0; p<7; p++)
{
if(reka[p]!=NULL)
cout << p+1 << ". " << *(reka[p]) << endl;
else
cout << p+1 << ". []" << endl;
}
}
int Rozgrywka::policzpkt(Plansza B4, int x, int y)
{
B4.board[1][1].
}
Plansza Gracz::wstaw(Plansza B3)
{
int index, xx, yy;
cout << "Wybierz litere ktora chcesz wstawic (wpisz jej nr) :" ;
cin >> index;
while(reka[(index-1)]==NULL)
{
cout << "Ta litera zostala juz wstawiona" << endl;
cout << "Wybierz inna litere ktora chcesz wstawic (wpisz jej nr) :" ;
cin >> index;
cout << endl;
}
while(isalpha(index)==true || index<1 || index>7)
{
cout << "Numer liczby musi byc liczba calkowita z przedzialu 1-7" << endl;
cout << "Wybierz litere ktora chcesz wstawic (wpisz jej nr) :" ;
cin >> index;
cout << endl;
}
index-=1;
cout << "Wybierz wiersz w ktorym chcesz wstawic litere :" ;
cin >> yy;
while(isalpha(yy)==true || yy<1 || yy>15)
{
cout << "Wiersz musi byc liczba calkowita z przedzialu 1-15" << endl;
cout << "Wybierz wiersz w ktorym chcesz wstawic litere :" ;
cin >> yy;
cout << endl;
}
yy-=1;
cout << "Wybierz kolumne w ktorej chcesz wstawic litere :" ;
cin >> xx;
while(isalpha(xx)==true || xx<1 || xx>15)
{
cout << "Kolumna musi byc liczba calkowita z przedzialu 1-15" << endl;
cout << "Wybierz kolumne w ktorej chcesz wstawic litere :" ;
cin >> xx;
cout << endl;
}
xx-=1;
B3.umiesc(reka[index], xx, yy);
reka[index]=NULL;
system("cls");
return B3;
}
Gracz::~Gracz(void)
{
}
Plansza.cpp
#include "Plansza.h"
Plansza::Plansza(void)
{
for(int i=0; i<15; i++)
{
for(int j=0; j<15; j++)
{
board[i][j].letter=NULL;
}
}
board[0][0].p_slowna=3;
board[7][0].p_slowna=3;
board[14][0].p_slowna=3;
board[0][7].p_slowna=3;
board[7][7].p_slowna=3;
board[14][7].p_slowna=3;
board[0][14].p_slowna=3;
board[7][14].p_slowna=3;
board[14][14].p_slowna=3;
for(int i=1; i<5; i++)
board[i][i].p_slowna=2;
for(int j=13; j>9; j--)
board[j][j].p_slowna=2;
for(int i=1, j=13; i<5 , j>9; i++, j--)
{
board[i][j].p_slowna=2;
}
for(int i=1, j=13; i<5 , j>9; i++, j--)
{
board[j][i].p_slowna=2;
}
board[5][1].p_literowa=3;
board[5][5].p_literowa=3;
board[5][9].p_literowa=3;
board[5][13].p_literowa=3;
board[9][1].p_literowa=3;
board[9][5].p_literowa=3;
board[9][9].p_literowa=3;
board[9][13].p_literowa=3;
board[1][5].p_literowa=3;
board[1][9].p_literowa=3;
board[13][5].p_literowa=3;
board[13][9].p_literowa=3;
board[6][6].p_literowa=2;
board[6][8].p_literowa=2;
board[8][6].p_literowa=2;
board[8][8].p_literowa=2;
board[12][6].p_literowa=2;
board[11][7].p_literowa=2;
board[12][8].p_literowa=2;
board[14][3].p_literowa=2;
board[14][11].p_literowa=2;
board[11][0].p_literowa=2;
board[11][14].p_literowa=2;
board[8][2].p_literowa=2;
board[7][3].p_literowa=2;
board[6][2].p_literowa=2;
board[8][12].p_literowa=2;
board[7][11].p_literowa=2;
board[6][12].p_literowa=2;
board[2][6].p_literowa=2;
board[3][7].p_literowa=2;
board[2][8].p_literowa=2;
board[3][0].p_literowa=2;
board[3][14].p_literowa=2;
board[0][3].p_literowa=2;
board[0][11].p_literowa=2;
}
Plansza::~Plansza(void)
{
}
int Pole::set_wartosc(int nowa_slowna, int nowa_literowa)
{
p_slowna=nowa_slowna;
p_literowa=nowa_literowa;
return 0;
}
Pole::Pole()
{
p_slowna=1;
p_literowa=1;
letter=NULL;
}
ostream & operator<<(ostream & wy, const Plansza & B1)
{
for(int i=0; i<15; i++)
{
if(i==0)
{
for(int j=0; j<15; j++)
{
if(j>9)
wy << " " << (j+1) << " ";
else
wy << " " << (j+1) << " ";
}
cout << endl;
}
for(int j=0; j<15; j++)
{
wy << "----";
}
cout << endl;
for(int j=0; j<15; j++)
{
wy << "| " << B1.board[i][j] << " ";
}
wy << " |" << i+1 << endl;
if(i==14)
{
for(int j=0; j<15; j++)
{
if(j>9)
wy << " " << (j+1) << " ";
else
wy << " " << (j+1) << " ";
}
}
}
return wy;
}
ostream & operator<<(ostream & wy, const Pole & P1)
{
if(P1.letter!=NULL)
{
wy << *(P1.letter);
}
else if(P1.letter==NULL && P1.p_slowna==3)
{
wy << "#";
}
else if(P1.letter==NULL && P1.p_slowna==2)
{
wy << "$";
}
else if(P1.letter==NULL && P1.p_literowa==3)
{
wy << "+";
}
else if(P1.letter==NULL && P1.p_literowa==2)
{
wy << "=";
}
else
wy << " ";
return wy;
}
ostream & operator<<(ostream & wy, const Litera & L1)
{
wy << L1.znak;
return wy;
}
bool Plansza::umiesc(Litera * L2, int x, int y)
{
return board[y][x].wstaw_litere(L2);
}
void Plansza::legenda()
{
cout << "Legenda:" << endl << "# - 3x premia slowna" << endl << "$ - 2x premia slowna" << endl << "+ - 3x premia literowa" << endl << "= - 2x premia literowa" << endl << "% - pole startowe" << endl;
}
bool Pole::wstaw_litere(Litera * L3)
{
letter=L3;
return true;
}
Litera::Litera()
{
}
Litera::Litera(char z1, int pkt1)
{
znak=z1;
pkt=pkt1;
}
Gra.cpp
#include "Gra.h"
Gra::Gra(void)
{
fstream plik;
plik.open( "pula.txt", ios::in | ios::out );
if( plik.good() == true )
cout << "Uzyskano dostep do pliku!" << endl;
else
cout << "Dostep do pliku zostal zabroniony!" << endl;
glowa=wsk=new Litera;
glowa=NULL;
wsk=NULL;
while(!plik.eof())
{
if(glowa==NULL)
{
glowa=wsk=new Litera;
}
else
{
wsk->nast=new Litera;
wsk=wsk->nast;
}
plik >> wsk->znak;
plik >> wsk->pkt;
wsk->nast=NULL;
}
/*
// Blanki
for(int i=0; i<2; i++)
pula.push_back(Litera('*',0));
// Litery za 1 pkt
for(int i=0; i<9; i++)
pula.push_back(Litera('A',1));
for(int i=0; i<7; i++)
pula.push_back(Litera('E',1));
for(int i=0; i<8; i++)
pula.push_back(Litera('I',1));
for(int i=0; i<5; i++)
pula.push_back(Litera('N',1));
for(int i=0; i<6; i++)
pula.push_back(Litera('O',1));
for(int i=0; i<4; i++)
pula.push_back(Litera('R',1));
for(int i=0; i<4; i++)
pula.push_back(Litera('S',1));
for(int i=0; i<4; i++)
pula.push_back(Litera('W',1));
for(int i=0; i<5; i++)
pula.push_back(Litera('Z',1));
// Litery za 2 pkt
for(int i=0; i<3; i++)
pula.push_back(Litera('C',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('D',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('K',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('L',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('M',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('P',2));
for(int i=0; i<3; i++)
pula.push_back(Litera('T',2));
for(int i=0; i<4; i++)
pula.push_back(Litera('Y',2));
// Litery za 3 pkt
for(int i=0; i<2; i++)
pula.push_back(Litera('B',3));
for(int i=0; i<2; i++)
pula.push_back(Litera('G',3));
for(int i=0; i<2; i++)
pula.push_back(Litera('H',3));
for(int i=0; i<2; i++)
pula.push_back(Litera('J',3));
for(int i=0; i<2; i++)
pula.push_back(Litera('Ł',3));
for(int i=0; i<2; i++)
pula.push_back(Litera('U',3));
// Litery za 5 i wiecej pkt
pula.push_back(Litera('Ą',5));
pula.push_back(Litera('Ę',5));
pula.push_back(Litera('F',5));
pula.push_back(Litera('Ó',5));
pula.push_back(Litera('Ś',5));
pula.push_back(Litera('Ż',5));
pula.push_back(Litera('Ć',6));
pula.push_back(Litera('Ń',7));
pula.push_back(Litera('Ź',9));
*/
}
void Gra::dostepne_litery()
{
wsk=glowa;
int z=0;
while(wsk!=NULL)
{
cout << wsk->znak << ", " ;
if(z<9)
z++;
else
{
z=0;
cout << endl;
}
wsk=wsk->nast;
}
cout << endl;
/*int i=0;
for( list<Litera>::iterator iter=pula.begin(); iter != pula.end(); iter++ )
{
if(i<10){}
else
{
i=0;
cout << endl;
}
cout << *iter << ", " ;
i++;
}
cout << endl;*/
}
Gracz Gra::rozdaj_litery(Gracz player)
{
//cout << "Otrzymane litery ";
srand( time( NULL ) );
wsk=glowa;
for(int i=0; i<7; i++ )
{
for(int j=1; j<((rand()%100)+1); j++)
wsk=wsk->nast;
player.reka[i]=wsk;
wsk=wsk->nast;
wsk->nast=wsk->nast->nast;
//cout << *(player.reka[i]) << ", ";
}
cout << endl;
return player;
/*{
list<Litera>::iterator iter=pula.begin();
for(int j=0; j<((rand()%100)+1); j++)
{
//cout << "Wylosowano " << j << " litere." << endl;
iter++;
}
cout << *iter << ", " ;
Litera * wsk = new Litera;
wsk=&(*iter);
//player.pierwsza_litera=&(*iter);
//player.reka[i]=&(*iter);
pula.erase(iter);
}*/
}
Gra::~Gra(void)
{
}
int main()
{
Gra game;
Gracz player1(1);
player1.set_tura(1);
Gracz player2(2);
player2.set_tura(1);
Plansza nowa_plansza;
cout << nowa_plansza << endl;
nowa_plansza.legenda();
//Litera *literka=new Litera('D',3);
//nowa_plansza.umiesc(literka,5,4);
game.dostepne_litery();
cout << "Gdy wszystko prawidlowo wcisknij ENTER" << endl;
system("PAUSE");
system("cls");
cout << nowa_plansza << endl;
player1=game.rozdaj_litery(player1);
player2=game.rozdaj_litery(player2);
char dalej='T';
while(dalej!='K' || dalej!='k')
{
if(player1.get_tura()==player2.get_tura())
{
while(dalej=='T' || dalej=='t')
{
player1.litery_gracza();
nowa_plansza=player1.wstaw(nowa_plansza);
cout << nowa_plansza << endl;
nowa_plansza.legenda();
cout << "Chcesz wstawic kolejna litere ? Wpisz T. Koniec - dowolny inny znak." << endl;
cout << "Wyjdz z gry - wpisz K" << endl;
cin >> dalej;
}
player1.nastepna();
}
else
{
system("cls");
cout << nowa_plansza << endl;
dalej='T';
while(dalej=='T' || dalej=='t')
{
player2.litery_gracza();
nowa_plansza=player2.wstaw(nowa_plansza);
cout << nowa_plansza << endl;
nowa_plansza.legenda();
cout << "Chcesz wstawic kolejna litere ? Wpisz T. Koniec - dowolny inny znak." << endl;
cin >> dalej;
}
player2.nastepna();
}
}
/*
game.dostepne_litery();
cout << endl;
player1.litery_gracza();
game.dostepne_litery();
player2=game.rozdaj_litery(player2);
game.dostepne_litery();
cout << endl;
player2.litery_gracza();
*/
system("PAUSE");
return 0;
}