#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include <windows.h>
#include <stdio.h>
using namespace std;
//---------------------------------Wzkaznik do TABLICE STATYCZNE DO PRZECHOWYWANIA STANU I TYPU
static int *tabstan;
static int *tabtyp;
static int rozmiar; //Podstawowy bok planszy
static int wymiar; //Plansza wymnozona juz
//-------------------------------------------
//-----------------------------KLASA ZATRZYMUJACA DZIALANIE PROGRAMU NA MOMENT
class Koniec
{
private:
void pause();
public:
void wysw_pause();
};
void Koniec::pause()
{
system("pause");
}
void Koniec::wysw_pause()
{
pause();
}
//---------------------------KLASA CZYSZCZACA EKRAN
class Czyszczenie
{
private:
void czyszcz();
public:
void getczyszcz();
};
void Czyszczenie::czyszcz()
{
system("cls");
}
void Czyszczenie::getczyszcz()
{
czyszcz();
}
////////////////////////////////////////////////////////KLASA ZASADY**********************************************************
class zasady
{
protected:
void wysw_zasady();
public:
void zasady0();
};
void zasady::wysw_zasady()
{
printf("Prosze o stosowanie sie do wymienionych zasad gry i informacji. Powodzenia!");
printf("\n");
}
void zasady::zasady0()
{
wysw_zasady();
}
class zasady_dal:public zasady
{
public:
void zasady0();
};
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*****************************************************************
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********************************************************************
int menu2()
{
int wybor;
cout<<"Wybierz opcje:\n1-Podaj wspolrzedne\n2-Zapisz i Zakoncz"<<endl;
cout<<"Twoj wybor:";
cin>>wybor;
return wybor;
}
//---------USTAWIA PLANSZE
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;
//tabtyp[j]=4;
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
void zmiana_pola(int *tabstan, int *tabtyp, int x, int y,int rozmiar,int wymiar)
{
if((tabtyp[(x*rozmiar)+y]==1))
{
if((tabstan[(x*rozmiar)+y])==1)
*(tabstan+(x*rozmiar)+y)=0;
else
{
*(tabstan+((x*rozmiar)+y))=1;
}
}
//OK
else if((x==0)&&(y==0)&&(tabtyp[(x*rozmiar)+y]==2))
{
*(tabstan+1)=rand()%2;
}
//OK
else if(tabtyp[(x*rozmiar)+y]==2)
{
*(tabstan+(x*rozmiar)+y-1)=rand()%2;
*(tabstan+(x*rozmiar)+y+1)=rand()%2;
}
//OK DLA nastepnego ELEMENTU TABLICY jak i poprzedniego
else if(tabtyp[(x*rozmiar)+y]==2&&(x+1==rozmiar)&&(y+1==rozmiar))
{
*(tabstan+(x*rozmiar)+rozmiar-1)=rand()%2;
}
//OK DLA OSTATNIEGO ELEMENTU
else if(tabtyp[(x*rozmiar)+y]==3)
{
int a,b,c;
for(int i=0;i<10;i++)
{
a=rand()%rozmiar;
b=rand()%rozmiar;
c=rand()%2;
*(tabstan+(x*a)+b)=c;
}
}
if((tabtyp[(x*rozmiar)+y]==4))
{
for(int i=0;i<wymiar;i++)
{
*(tabstan+i)=rand()%2;
}
}
//OK LOSUJE 0 LUB 1 DLA CALEJ PLANSZY. TRZEBA UWAZAC NA TEN TYP!!!!
}
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("dane planszy.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 ",*(tabstan+i));
fprintf(zapis2,"%d ",*(tabtyp+i));
}
}
else
{
cout<<"BLAD nie mozna zapisac stanu gry-.-"<<endl;
}
fclose(zapis);
fclose(zapis2);
fclose(zapis3);
}
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("dane planszy.txt","r");
//SEEK_SET;
if(odczyt==NULL)
{
cout<<"Blad"<<endl;
}
while(feof(odczyt))
{
fscanf(odczyt,"%d ",tabstan[i]);
i++;
}
i=0;
while(feof(odczyt2))
{
fscanf(odczyt2,"%d ",tabtyp[i]);
i++;
}
cout<<"Zczytano dane zapisanej stan gy ;-)"<<endl;
fclose(odczyt);
fclose(odczyt2);
}
void wczytanie_globalnych()
{
FILE* odczyt;
odczyt=fopen("globalne.txt","r");
fscanf(odczyt,"%d%d",&wymiar,&rozmiar);
cout<<"Zczytano dane pomocnicze stan gy ;-)\n"<<endl;
printf("%d %d",wymiar,rozmiar);
system("pause");
fclose(odczyt);
}
int main(int argc, char* argv[])
{
///////////////WYŚWIETLANIE ZASAD*******************************************************************
//OBIEKT CZYSZCZENIE
Czyszczenie* wsk,A;
wsk=&A;
// OBIEKT KONIEC
Koniec* kon,K;
kon=&K;
// OBIEKT ZASADY
zasady *pb;
zasady_dal k;
pb=&k; //Rzutowanie w gorę aby dostać sie do klasy bazowaej ("ZASADY1")
k.zasady0();
pb->zasady::zasady0();
kon->wysw_pause();
//-------------------------------------------------------------------------
A.getczyszcz();
///////////////****************Rozgrywka**********************************************************************************
int wybor_gracz;
wybor_gracz=menu1();
int x,y; //WSPOLRZEDNE
if(wybor_gracz==1)
{
srand(time(NULL));
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
ustaw_plansze(tabstan,tabtyp,wymiar); //ustawianie poczatkowej planszy
wysw_plansze(tabstan,tabtyp,rozmiar); //Wyswietla plansze na ekran
wybor_gracz=menu2();
//cout<<"Twoje wspolrzedne:";
//cin>>x;
//cin>>y;
//A.getczyszcz();
//zmiana_pola(tabstan,tabtyp,x,y,rozmiar,wymiar);
//wysw_plansze(tabstan,tabtyp,rozmiar); //Wyswietla plansze na ekran
//cout<<"\n";
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();
}
zapis_gry();
kon->wysw_pause();
free (tabstan);
free (tabtyp);
return 0;
}
if(wybor_gracz==2)
{
wczytanie_globalnych();
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
printf("%d %d",wymiar,rozmiar);
kon->wysw_pause();
return 0;
}
if(wybor_gracz==3)
{
kon->wysw_pause();
return 0;
}
}
Mozecie mi pomoc?? Chodzi o to ze wywala mi sie zczytywanie z pliku txt. Zapisywanie idzie bardzo dobrze, natomiast jak chce zczytac dane to mi wywala jakies dziwne adresy.
Wiedzie co jest nie tak?
Njapierw utworzcie plik (NOWA GRA) a dopiero potem spróbujcie to wczytać
Proszę o szybką odpowiedz