#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include <windows.h>
#include <stdio.h>
#include <string>
/* DARIUSZ KRUK 82708 All rights reserved.
*/
using namespace std; /*PRZESTRZEN STD*/
/*---------------------------------Wzkaznik do TABLIC STATYCZNYCH DO PRZECHOWYWANIA STANU I TYPU PLANSZY*/
static int *tabstan; /* Wzkaźnik do stanu planszy*/
static int *tabtyp; /* Wzkaźnik do typu pola*/
static int rozmiar; /*Podstawowy bok planszy*/
static int wymiar; /*Plansza wymnozona juz*/
/*-----------------------------KLASA ZATRZYMUJACA DZIALANIE PROGRAMU NA MOMENT (PAUSE)*/
class Koniec
{
private:
void pause();
public:
void wysw_pause();
};
void Koniec::pause() /*funckja pause jako private*/
{
system("pause");
}
void Koniec::wysw_pause() /*funkcja umozliwiajaca wyswietlanie prywatnej funkcji*/
{
pause();
}
/*---------------------------KLASA CZYSZCZACA EKRAN ( OPIS TAKI SAM JAK W KLASIE KONIEC)*/
class Czyszczenie
{
private:
void czyszcz();
public:
void getczyszcz();
};
void Czyszczenie::czyszcz()
{
system("cls");
}
void Czyszczenie::getczyszcz()
{
czyszcz();
}
/*KLASA ZASADY*/
class zasady
{
protected:
virtual void wysw_zasady(); /*Funkcja protected dla klasy po niej dziedziczacej*/
public:
virtual void zasady0(); /*wyswietla zasady gry*/
};
void zasady::wysw_zasady()
{
printf("Prosze o stosowanie sie do wymienionych zasad gry i informacji. Powodzenia!");
printf("\n");
}
void zasady::zasady0()
{
wysw_zasady();
}
//*KLASA ŻEGNAJACA UŻYTKOWNIKA opis funkcji tak jak wyżej*/
class zakonczenie
{
private:
void kon();
public:
void wyp_kon();
};
void zakonczenie::kon()
{
cout<<"Dziekuje za skorzystanie z aplikacji. Mam nadzieje ze sie podobala"<<endl;
}
void zakonczenie::wyp_kon()
{
kon();
}
/*-KLASA DZIEDZICZACA PO BAZOWEJ ZASADY ZAWIERA W SOBIE METODY KLASY BAZOWEJ PLUS SWOJE*/
class zasady_dal:public zasady
{
public:
void zasady0(); /*WYSWIETLA ZASADY*/
};
void zasady_dal::zasady0()
{
cout<<"Zasady gry sa proste:\n"<<endl;
cout<<"Rozmiar planszy podaje uzytkownik. Plansza jest N x N"<<endl;
cout<<"Przejscie planszy polega zapelnieniu planszy 0 lub 1"<<endl;
cout<<"Plansza zawiera [bonusy] ktore zmieniaja inaczej sasiadow"<<endl;
cout<<"\n";
}
/*MENU1 INTERFEJS GRACZA FUNKCJA VOID*/
int menu1()
{
int wybor;
cout<<"Wybierz opcje:\n 1-NOWA GRA\n 2-WCZYTAJ GRE\n 3-Zakoncz"<<endl;
cout<<"Twoj wybor:"<<endl;
cin>>wybor;
return wybor;
}
/*MENU2 INTERFEJS GRACZA FUNKCJA VOID*/
int menu2()
{
int wybor;
cout<<"Wybierz opcje:\n1-Podaj wspolrzedne\n2-Zapisz i Zakoncz"<<endl;
cout<<"Twoj wybor:";
cin>>wybor;
return wybor;
}
/*USTAWIA PLANSZE DO ROZGRYWKI*/
void ustaw_plansze(int *tabstan,int *tabtyp, int wymiar)
{
int j=0;
for(int i=0;i<wymiar;i++)
{
tabstan[i]=rand()%2;
tabtyp[j]=rand()%4+1;
j++;
}
}
/*WYSWIETLA PLANSZE*/
void wysw_plansze(int *tabstan,int *tabtyp, int rozmiar)
{
for(int i=0;i<rozmiar;i++)
{
cout<<"\t";
for(int j=0;j<rozmiar;j++)
{
cout<<tabstan[(i*rozmiar)+j];
}
cout<<"\n";
}
cout<<"\n";
for(int i=0;i<rozmiar;i++)
{
cout<<"\t";
for(int j=0;j<rozmiar;j++)
{
cout<<tabtyp[(i*rozmiar)+j];
}
cout<<"\n";
}
cout<<"\n";
}
/*ZMIANA POLA NA PLANSZY FUNKCJA*/
void zmiana_pola(int *tabstan, int *tabtyp, int x, int y,int rozmiar,int wymiar)
{
/* ODPOWIEDNIE WARUNKI DLA ZMIANY POL */
if((tabtyp[(x*rozmiar)+y]==1))
{
if((tabstan[(x*rozmiar)+y])==1)
{
*(tabstan+(x*rozmiar)+y)=0;
}
else
{
*(tabstan+((x*rozmiar)+y))=1;
}
}
else if((x==0)&&(y==0)&&(tabtyp[(x*rozmiar)+y]==2))
{
*(tabstan+1)=rand()%2;
}
else if(tabtyp[(x*rozmiar)+y]==2)
{
*(tabstan+(x*rozmiar)+y-1)=rand()%2;
*(tabstan+(x*rozmiar)+y+1)=rand()%2;
}
else if(tabtyp[(x*rozmiar)+y]==2&&(x+1==rozmiar)&&(y+1==rozmiar))
{
*(tabstan+(x*rozmiar)+rozmiar-1)=rand()%2;
}
else if(tabtyp[(x*rozmiar)+y]==3)
{
/*LOSOWE ZAPELNIANIE WYBRANEGO POLA PRZEZ WPOLRZEDNE LOSOWE 0 LUB 1. POWETARZA SIE 10 RAZY*/
int a,b,c;
for(int i=0;i<50;i++)
{
a=rand()%rozmiar;
b=rand()%rozmiar;
c=rand()%2;
*(tabstan+(x*a)+b)=c;
}
}
if((tabtyp[(x*rozmiar)+y]==4))
{
/*ZAPELNIANIE CALEJ PLANSZY 0 LUB 1. TAKIE NOWE USTAWIANIE PLANSZY. TYP POMOCNY PODCZAS ZASTOJU PLANSZY
OK LOSUJE 0 LUB 1 DLA CALEJ PLANSZY. TRZEBA UWAZAC NA TEN TYP!!!!*/
for(int i=0;i<wymiar;i++)
{
*(tabstan+i)=rand()%2;
}
}
}
/* FUNKCJA ZAPISUJACA AKTUALNY STAN GRY PO ZAKONCZENIU ROZGRYWKI*/
void zapis_gry()
{
char n_zapis[10];
int i=0;
FILE* zapis;
FILE* zapis2;
FILE* zapis3;
cout<<"Podaj nazwe pliku do zapisu stanu gry:";
cin>>n_zapis;
zapis=fopen(n_zapis,"w");
zapis2=fopen("daneplanszy.txt","w");
zapis3=fopen("globalne.txt","w");
if(zapis!=NULL&&zapis2!=NULL)
{
cout<<"Utworzono pomyslnie plik i zapisano stan gy ;-)"<<endl;
fprintf(zapis3,"%d %d",rozmiar,wymiar);
for(i=0;i<wymiar;i++)
{
fprintf(zapis,"%d\n",*(tabstan+i));
fprintf(zapis2,"%d\n",*(tabtyp+i));
}
}
else
{
cout<<"BLAD nie mozna zapisac stanu gry-.-"<<endl;
}
fclose(zapis);
fclose(zapis2);
fclose(zapis3);
}
// FUNKCJA WCZYTUJACA STAN POPRZEDNIEJ GRY
void wczytanie_gry(int *tabstan,int *tabtyp)
{
FILE* odczyt;
FILE* odczyt2;
char n_odczyt[10];
cout<<"Podaj plik do odczytu:";
cin>>n_odczyt;
int i=0;
odczyt=fopen(n_odczyt,"r");
odczyt2=fopen("daneplanszy.txt","r");
//SEEK_SET;
if(odczyt==NULL)
{
cout<<"Blad"<<endl;
}
while(feof(odczyt)==0)
{
fscanf(odczyt,"%d",&tabstan[i]);
i++;
}
i=0;
while(feof(odczyt2)==0)
{
fscanf(odczyt2,"%d",&tabtyp[i]);
i++;
}
cout<<"Zczytano dane zapisanej stan gy ;-)"<<endl;
fclose(odczyt);
fclose(odczyt2);
}
/* FUNKCJA WCZYTUJACA DANE GLOBALNE UZYWANE W CALYM PROGRAMIE. BARDZO WAZNE!!!!!!!!!!!!!!!*/
void wczytanie_globalnych()
{
FILE* odczyt;
odczyt=fopen("globalne.txt","r");
fscanf(odczyt,"%d%d",&rozmiar,&wymiar);
cout<<"Zczytano dane pomocnicze stan gy ;-)\n"<<endl;
system("pause");
fclose(odczyt);
}
/*CZYSCI TABLICE WCZYTYWANYCH GRACZY BY UNIKNAC SMIECI I BLEDNYCH DANYCH PODCZAS WCZYTYWANIA*/
void czyszcztab(char *graczdane)
{
for(int i=0;i<10;i++)
{
graczdane[i]=NULL;
}
}
/*FUNKCJA WYSWIETLAJACA NA EKRAN LISTE GRACZY*/
void wysw_gracz()
{
FILE *gracz; //PLIK GRACZY
char graczdane[10];
gracz=fopen("gracz.txt","r");
cout<<"Gracz wczesniejsi:"<<endl;
while(feof(gracz)==0)
{
fscanf(gracz,"%s",&graczdane);
printf("%s\n",graczdane);
czyszcztab(graczdane);
}
fclose(gracz);
cout<<"\n";
}
/*FUNKCJA ZAPISUJACA STAN GRY*/
void zapis_graczy()
{
FILE *gracz; /*PLIK GRACZY*/
char graczdane[10];
gracz=fopen("gracz.txt","a");
cout<<"Podaj nick do gry:"<<endl;
cin>>graczdane;
fprintf(gracz,"%s\n",graczdane);
fclose(gracz);
cout<<"\n";
}
/*WYSWIETLANIE PIERWSZEJ WIADOMOSCI PO ROZPOCZECIU GRY*/
void poczatek_gry()
{
cout<<"Podaj rozmiar planszy:"<<endl;
cin>>rozmiar;
wymiar=rozmiar*rozmiar; /*ilosc pol w tablicy*/
tabstan= new int[wymiar]; /*TWOTRZY PLANSZE STANU*/
tabtyp=new int[wymiar]; /*TWORZY PLANSZE TYPOW*/
}
/*FUNKCJA WYPISUJACA PLANSZE PO WCZTANIU DANYCH NIEZBEDNYCH DO ROZGRYWKI*/
void po_wczytaniu()
{
Koniec* kon,K;
kon=&K;
tabstan= new int[wymiar]; /*TWOTRZY PLANSZE STANU*/
tabtyp=new int[wymiar]; /*TWORZY PLANSZE TYPOW*/
wczytanie_gry(tabstan,tabtyp);
wysw_plansze(tabstan,tabtyp,rozmiar); /*Wyswietla plansze na ekran*/
kon->wysw_pause();
}
/*funkcja sprawdzajaca plansze aby ukonczyc gre z sukcesem*/
int sprawdz(int *tabstan)
{
int j=1;
for(int i=0;i<wymiar;i++)
{
if(tabstan[i]!=1)
j=0;
}
return j;
}
int main(int argc, char* argv[])
{
/*WYWIETLANIE ZASAD*/
/*OBIEKT CZYSZCZENIE*/
Czyszczenie* wsk,A;
wsk=&A;
/* OBIEKT KONIEC*/
Koniec* kon,K;
kon=&K;
/* OBIEKT ZASADY*/
//zasady *pb;
zasady_dal k;
//pb=&k;
k.zasady0();
//pb->zasady::zasady0();
kon->wysw_pause(); /*WYSWIETLANIE PAUSE*/
//-------------------------------------------------------------------------
A.getczyszcz(); /*CZYSCZENIE EKRANU*/
/*Rozgrywka*/
int wybor_gracz; /*ZMIENNA PRZECHOWUJACA WYBOR GRACZA Z MENU*/
wybor_gracz=menu1();
int x,y; /*WSPOLRZEDNE*/
if(wybor_gracz==1)
{
srand(time(NULL)); /*FUNKCJA LOSUJACA*/
zapis_graczy(); /*Zapisuje aktualnych dodanych graczy*/
poczatek_gry(); /*PIERWSZY INTERFEJS*/
ustaw_plansze(tabstan,tabtyp,wymiar); /*ustawianie poczatkowej planszy*/
wysw_plansze(tabstan,tabtyp,rozmiar); /*Wyswietla plansze na ekran*/
wybor_gracz=menu2();
int v; //zmienna przechowuje wartosc od funkcji sprawdzajacej czy cala plansza sklada sie z samych jedynek
while(wybor_gracz!=2)
{
wybor_gracz=NULL; /*NULL PO TO ABY NIE BYLO BLEDOW W NADPISYWANIU DANYCH W ZMIENNEJ*/
cout<<"Podaj wspolrzedne pola ktore chcesz zmienic:"<<endl;
cout<<"Twoje wspolrzedne:";
cin>>x;
cin>>y;
zmiana_pola(tabstan,tabtyp,x,y,rozmiar,wymiar); //ZMIANA POLA NA PLANSZY*/
A.getczyszcz(); /*CZYSCI EKRAN PO ZMIANIE*/
wysw_plansze(tabstan,tabtyp,rozmiar); /*Wyswietla plansze na ekran*/
v=sprawdz(tabstan); /*zmienna przechowujaca stan planszy czy jest zapelniona calkowicie 1*/
if(v==0)
{
/*Pusty warunek */
}
else if(v==1)
{
cout<<"Gratulacje udało ci sie przejsc gre"<<endl;
zapis_gry(); /*PO KOLEI ZAPISUJE GRE USUWA WZKAZNIKI DO TABLIC GLOBALNYCH KONCZY GRE*/
kon->wysw_pause();
free (tabstan);
free (tabtyp);
zakonczenie *c,C;
c=&C;
c->wyp_kon();
cout<<"\n";
kon->wysw_pause();
return 0;
}
wybor_gracz=menu2();
}
zapis_gry(); /*ZAPIS GRY*/
kon->wysw_pause();
free (tabstan); /*USUWANIE WZKAZNIKOW DO TABLIC GLOBALNYCH*/
free (tabtyp);
zakonczenie *c,C;
c=&C;
c->wyp_kon();
cout<<"\n";
kon->wysw_pause();
return 0;
}
if(wybor_gracz==2)
{
// OBIEKT KONIEC
Koniec* kon,K;
kon=&K;
wczytanie_globalnych(); /*Wczytanie zmiennych globalnych z pliku aby mozna bylo grac*/
wysw_gracz(); /*wyswietla dotychczasowych graczy*/
kon->wysw_pause();
/*OBIEKT CZYSZCZENIE*/
Czyszczenie* wsk,A;
wsk=&A;
wsk->getczyszcz();
po_wczytaniu(); /*interfejs po wczytaniu gry*/
wybor_gracz=menu2();
int v;
while(wybor_gracz!=2)
{
wybor_gracz=NULL;
cout<<"Podaj wspolrzedne pola ktore chcesz zmienic:"<<endl;
cout<<"Twoje wspolrzedne:";
cin>>x;
cin>>y;
zmiana_pola(tabstan,tabtyp,x,y,rozmiar,wymiar); /*ZMIANA POLA*/
A.getczyszcz(); /*CZYSCI EKRAN PO ZMIANIE*/
wysw_plansze(tabstan,tabtyp,rozmiar); /*Wyswietla plansze na ekran*/
wybor_gracz=menu2();
v=sprawdz(tabstan); /*zmienna przechowujaca stan planszy czy jest zapelniona calkowicie 1*/
if(v==1)
{
cout<<"Gratulacje udało ci sie przejsc gre"<<endl;
zapis_gry(); /*PO KOLEI ZAPISUJE GRE USUWA WZKAZNIKI DO TABLIC GLOBALNYCH KONCZY GRE*/
kon->wysw_pause();
free (tabstan);
free (tabtyp);
zakonczenie *c,C;
c=&C;
c->wyp_kon();
cout<<"\n";
kon->wysw_pause();
return 0;
}
}
zapis_gry(); /*PO KOLEI ZAPISUJE GRE USUWA WZKAZNIKI DO TABLIC GLOBALNYCH KONCZY GRE*/
kon->wysw_pause();
free (tabstan);
free (tabtyp);
zakonczenie *c,C;
c=&C;
c->wyp_kon();
cout<<"\n";
kon->wysw_pause();
return 0;
}
if(wybor_gracz==3) /*ZAKONCZENIE GRY */
{
kon->wysw_pause();
return 0;
}
}
Kod jest dosc dlugi i ten moj problem jest w funkcji main zaraz na poczatku