Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ncurses.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define WIDTH 20
- #define HEIGHT 23
- WINDOW *TetrisSCR;
- int Points = 0, RozmiarKlocka = 0, PozycjaKlockaKolumna = 0, PozycjaKlockaWiersz = 0;
- bool Przegrales = FALSE, KlocekPoziomo = TRUE;
- void TetrisSCR_init(void)
- {
- curs_set(0);
- noecho();
- TetrisSCR = newwin(HEIGHT, WIDTH, 1, 1);
- box(TetrisSCR, ACS_VLINE, ACS_HLINE);
- nodelay(TetrisSCR, TRUE);
- refresh();
- wrefresh(TetrisSCR);
- }
- void Wyswietl_Plansze(int (*Plansza)[WIDTH])
- {
- int i = 0, j = 0;
- for(i = 2; i < WIDTH; i++)
- {
- for(j = 2; j < WIDTH; j++)
- {
- if(Plansza[i][j] == 0)
- mvprintw(i, j, " ");
- else if(Plansza[i][j] == 1)
- mvprintw(i, j, "*");
- refresh();
- wrefresh(TetrisSCR);
- }
- }
- }
- void NowyKlocek(int (*Plansza)[WIDTH])
- {
- int i = 0;
- RozmiarKlocka = rand() % 5+2;
- KlocekPoziomo = rand() % 2;
- if(KlocekPoziomo)
- PozycjaKlockaKolumna = (WIDTH-RozmiarKlocka+1)/2;
- else
- PozycjaKlockaKolumna = WIDTH/2;
- PozycjaKlockaWiersz = 0;
- if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] == 1)
- {
- Przegrales = TRUE;
- clear();
- start_color();
- init_pair(1, COLOR_RED, COLOR_BLACK);
- attron(COLOR_PAIR(1));
- mvprintw(5, 40, "Przegrales! Zebrales %d punktow.\n", Points);
- attroff(COLOR_PAIR(1));
- return;
- }
- for(i = 0; i < RozmiarKlocka; i++)
- {
- if(KlocekPoziomo)
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+i] = 1;
- else
- Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 1;
- }
- }
- void RozdajPunkty(int (*Plansza)[WIDTH])
- {
- int i = 0, j = 0, k = 0;
- bool DodacPunkty = TRUE;
- for(i = 0; i < HEIGHT; i++)
- {
- DodacPunkty = TRUE;
- for(j = 2; (j < WIDTH) && DodacPunkty ; j++)
- {
- if(Plansza[i][j] == 0)
- DodacPunkty = FALSE;
- }
- if(DodacPunkty)
- {
- Points += WIDTH;
- for(j = i-1; j >= 0; j--)
- {
- for(k = 2; k < WIDTH; k++)
- {
- Plansza[j+1][k] = Plansza[j][k];
- Plansza[j][k] = 0;
- }
- }
- }
- }
- }
- void SterujKlockiem(int Klawisz, int (*Plansza)[WIDTH])
- {
- int i = 0;
- bool Dalej = FALSE, WRuchu = TRUE;
- if(KlocekPoziomo)
- {
- if(PozycjaKlockaKolumna + RozmiarKlocka-1 > WIDTH|| PozycjaKlockaWiersz+2 > HEIGHT)
- {
- PozycjaKlockaKolumna = 0; PozycjaKlockaWiersz = 0;
- WRuchu = FALSE;
- Dalej = TRUE;
- }
- for(i = 0; (i < RozmiarKlocka) && !Dalej; i++)
- {
- if(Plansza[PozycjaKlockaWiersz+1][PozycjaKlockaKolumna+i] == 1)
- {
- WRuchu = FALSE;
- PozycjaKlockaKolumna = 0;
- PozycjaKlockaWiersz = 0;
- }
- }
- if(WRuchu)
- {
- for(i = 0; i < RozmiarKlocka; i++)
- {
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+i] = 0;
- Plansza[PozycjaKlockaWiersz+1][PozycjaKlockaKolumna+i] = 1;
- }
- ++PozycjaKlockaWiersz;
- }
- }
- else
- {
- if(PozycjaKlockaKolumna - 2 > WIDTH || PozycjaKlockaWiersz + RozmiarKlocka+1 > HEIGHT)
- {
- PozycjaKlockaKolumna = 0;
- PozycjaKlockaWiersz = 0;
- Dalej = TRUE;
- }
- if(Plansza[PozycjaKlockaWiersz+RozmiarKlocka][PozycjaKlockaKolumna] == 0 && !Dalej )
- {
- Plansza[PozycjaKlockaWiersz+RozmiarKlocka][PozycjaKlockaKolumna] = 1;
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] = 0;
- ++PozycjaKlockaWiersz;
- }
- else
- {
- PozycjaKlockaKolumna = 0; PozycjaKlockaWiersz = 0;
- }
- }
- if(Klawisz == KEY_LEFT && KlocekPoziomo )
- {
- if(PozycjaKlockaKolumna - 1 < 2)return;
- if(PozycjaKlockaKolumna + RozmiarKlocka-1 > WIDTH)return;
- if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna-1] == 1)
- return;
- else
- {
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna-1] = 1;
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka-1] = 0;
- --PozycjaKlockaKolumna;
- }
- }
- else if(Klawisz == KEY_RIGHT && KlocekPoziomo)
- {
- if(PozycjaKlockaKolumna - 1 > WIDTH)return;
- if(PozycjaKlockaKolumna + RozmiarKlocka+1 > WIDTH)return;
- if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka] == 1)
- return;
- else
- {
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] = 0;
- Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka] = 1;
- ++PozycjaKlockaKolumna;
- }
- }
- else if(Klawisz == KEY_LEFT && !KlocekPoziomo)
- {
- if(PozycjaKlockaKolumna - 1 < 2)
- return;
- for(i = 0; i < RozmiarKlocka; i++)
- if(Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna-1] == 1)
- return;
- for(i = 0; i < RozmiarKlocka; i++)
- {
- Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 0;
- Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna-1] = 1;
- }
- --PozycjaKlockaKolumna;
- }
- else if(Klawisz == KEY_RIGHT && !KlocekPoziomo)
- {
- if(PozycjaKlockaKolumna+2 > WIDTH)
- return;
- for(i = 0; i < RozmiarKlocka; i++)
- if(Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna+1] == 1)
- return;
- for(i = 0; i < RozmiarKlocka; i++)
- {
- Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 0;
- Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna+1] = 1;
- }
- ++PozycjaKlockaKolumna;
- }
- }
- int main()
- {
- srand(time(NULL)); // Ziarno
- int Plansza[HEIGHT][WIDTH];
- int Klawisz = 1;
- initscr();
- TetrisSCR_init();
- int i = 0, j = 0;
- // Wypelniam plansze zerami ( Nowa gra )
- for(i = 0; i < HEIGHT; i++)
- for(j = 0; j < WIDTH; j++)
- Plansza[i][j] = 0;
- keypad(TetrisSCR, TRUE);
- while(!Przegrales)
- {
- if(!PozycjaKlockaKolumna && !PozycjaKlockaWiersz)
- NowyKlocek(Plansza);
- Klawisz = wgetch(TetrisSCR);
- SterujKlockiem(Klawisz, Plansza);
- RozdajPunkty(Plansza);
- Wyswietl_Plansze(Plansza);
- box(TetrisSCR, ACS_VLINE, ACS_HLINE);
- refresh();
- usleep(40000);
- }
- getch();
- endwin();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement