Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- struct plansza{
- int wysokosc;
- int szerokosc;
- int **elementy;
- };
- typedef struct{ //typedef przypisuje pewnej nazwie(tu pos), jakiś typ danych(tu struct, które ma elemnty x i y)
- int x;
- int y;
- }pos;
- void ZapiszDoPliku(struct plansza StanGry);
- struct plansza WczytajZPliku();
- struct plansza rozruch();
- void Wypisz(struct plansza);
- int sprawdzwygrana(struct plansza StanGry);
- pos Koordynaty();
- int main()
- {
- struct plansza StanGry = rozruch(StanGry);
- int game_over=0;
- int Tura=0;
- Wypisz(StanGry);
- int poprawne;
- pos wybor;
- while(!game_over){
- game_over = sprawdzwygrana(StanGry);
- while(game_over==1)
- {
- printf("Koniec Gry!");
- return 0;
- }
- poprawne = 0;
- do{
- wybor = Koordynaty();
- if(StanGry.elementy[wybor.y][wybor.x]==0)
- poprawne = 1;
- else{
- printf("Bledny ruch. Sprobuj ponownie:\n");
- }
- }while(!poprawne);
- StanGry.elementy[wybor.y][wybor.x]=Tura?'X':'O';//Jeżeli Tura==0 to zapisuje O jak Tura==1 to zapisuje X
- Wypisz(StanGry);
- //Sprawdzanie czy ktoś wygrał
- Tura=(Tura+1)%2;//Alternuje miedzy Tura==0 i Tura==1
- ZapiszDoPliku(StanGry);
- }
- }
- void ZapiszDoPliku(struct plansza StanGry)
- {
- FILE *plik = fopen("Stan.txt","w+");
- fprintf(plik,"%d x %d\n", StanGry.wysokosc, StanGry.szerokosc);
- for(int i = 0; i < StanGry.wysokosc; ++i, fprintf(plik,"\n"))
- for(int j = 0; j < StanGry.szerokosc; ++j)
- fprintf(plik,"%d ", StanGry.elementy[i][j]);
- fclose(plik);
- }
- struct plansza WczytajZPliku(){
- FILE *plik = fopen("Stan.txt","r");
- struct plansza StanGry;
- fscanf(plik,"%d x %d", &StanGry.wysokosc, &StanGry.szerokosc);
- printf("%d %d", StanGry.wysokosc, StanGry.szerokosc);
- StanGry.elementy=calloc(StanGry.wysokosc, sizeof(int*));//Tworzy wskaźnik który jest w stanie przechowywać StanGry.wysokosc wskaźników typu char
- for(int i=0; i<StanGry.wysokosc; i++){
- StanGry.elementy[i]=(int*)calloc(StanGry.szerokosc, sizeof(int));
- }
- for(int i = 0; i < StanGry.wysokosc; ++i, fprintf(plik,"\n"))
- for(int j = 0; j < StanGry.szerokosc; ++j)
- fscanf(plik,"%d", StanGry.elementy[i]+j);
- fclose(plik);
- return StanGry;
- }
- struct plansza rozruch()
- {
- printf("Czy chcesz wczytac poprzedni stan gry?[t/n]");
- char wybor;
- int w,s;
- scanf("%c",&wybor);
- struct plansza wymiary;
- if(wybor=='t')
- wymiary = WczytajZPliku();
- else if(wybor=='n'){
- printf("prosze podac wymiary planszy: \n wyskokosc:");
- scanf("%d", &wymiary.wysokosc);
- printf("\n szerokosc: ");
- scanf("%d",&wymiary.szerokosc);
- printf("\n\n\n\n\n\n");
- wymiary.elementy=calloc(wymiary.wysokosc, sizeof(int*));
- for(int i=0; i<wymiary.wysokosc; i++){
- *(wymiary.elementy+i)=(int*)calloc(wymiary.szerokosc, sizeof(int));
- }
- }
- printf("wymiary: %dx%d\n\n", wymiary.wysokosc, wymiary.szerokosc);
- return wymiary;
- }
- void Wypisz(struct plansza wymiary){
- for(int odlicz = 0 ; odlicz < wymiary.szerokosc ; ++odlicz)
- printf(" %d ", odlicz);
- printf("\n");
- for(int k = 0 ; k < wymiary.szerokosc ; ++k)
- printf("---|");
- printf("\n");
- for(int i = 0; i < wymiary.wysokosc; ++i, printf("\n"))
- {
- for(int j = 0; j < wymiary.szerokosc; ++j)
- if(wymiary.elementy[i][j])
- printf(" %c |",wymiary.elementy[i][j]);
- else
- printf(" |");
- printf("\n");
- for(int k = 0 ; k < wymiary.szerokosc ; ++k)
- printf("---|");
- }
- }
- pos Koordynaty(){
- int x,y;
- scanf("%d %d", &x, &y);
- return (pos){x,y};
- }
- int sprawdzwygrana(struct plansza StanGry)
- {
- int wygrana = 1;
- //sprawdzanie poziomo
- for(int wbok = 0; wbok<StanGry.szerokosc; wbok++)
- for(int wdol = 0; wdol<=StanGry.wysokosc-5; wdol++)
- if(StanGry.elementy[wbok][wdol] != 0)
- {
- if(StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok][wdol+1] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok][wdol+2] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok][wdol+3] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok][wdol+4])
- {
- return wygrana;
- }
- }
- //sprawdzanie pionowo
- for(int wdol = 0; wdol<StanGry.wysokosc; wdol++)
- for(int wbok = 0; wbok<=StanGry.szerokosc-5; wbok++)
- if(StanGry.elementy[wbok][wdol] != 0)
- {
- if(StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok+1][wdol] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok+2][wdol] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok+3][wdol] &&
- StanGry.elementy[wbok][wdol] ==
- StanGry.elementy[wbok+4][wdol])
- {
- return wygrana;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement