Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Snake.h"
- unsigned long lastTick = GetTickCount(), currTick = GetTickCount();
- unsigned long UPDATESPEED;
- unsigned int frames = 0;
- float fps = 60.0f;
- float g_speed;
- Snake::Snake(int i)
- {
- lastTick = GetTickCount(), currTick = GetTickCount();
- frames = 0;
- fps = 60.0f;
- kolor_tla = 62,
- kolor_granic = 49;
- kolor_jablka = 44;
- kolor_n = 15;
- kolor_weza = 2;
- dlugosc_weza = 5;
- jablko = 0;
- poziom = 1;
- if (p_waz)>200 || p_waz<0) p_waz = 5;
- c_x = 39 - (linie / 2);
- c_y = 14 - (kolumny / 2);
- Gra();
- }
- void Snake::Gra()
- {
- Ustawienia();
- Tlo_gry();
- Wyrzuc_jablko();
- Zainicjuj_weza();
- Poka_sowe_a_wlasciwie_weza();
- if (p_waz>200 || p_waz<0) p_waz = 5;
- do {
- Przyciski();
- Wylap_kolizje();
- Sprawdz_jablko();
- Sprawdz_ewe();
- Lokalizacja_weza();
- Poka_sowe_a_wlasciwie_weza();
- CalclateFramesPerSecond();
- ;
- } while ((c != 27) && (x != c_x + (linie)) && (x != c_x - 1) && (y != c_y + (kolumny)) && (y != c_y - 1)); Koniec_gry();
- }
- void Snake::Ustawienia()
- {
- ustaw_kolor(kolor_n);
- linie = 15;
- kolumny = 60;
- poziom = 1;
- srand(time(NULL));
- c_x = 39 - (linie / 2);
- c_y = 14 - (kolumny / 2);
- if (p_waz>200 || p_waz<0) p_waz = 5;
- wyczysc_boksa(10, 8, 70, 16, 31);
- boks(10, 8, 70, 16, 31, 31, "");
- idz_do_x_y(28, 10); cprintf("Get Ready");
- idz_doo_x_y(18, 12); cprintf("Use the Arrow keys on the keyboard ");
- idz_do_x_y(18, 13); cprintf("<LEFT> <RIGHT> <UP> <DOWN> to steer snake");
- idz_do_x_y(18, 15); printf("Press any key to start snake");
- c = _getch();
- }
- void Snake::Tlo_gry()
- {
- wyczysc_boksa(1, 1, 78, 24, ((16 * Jasno_zielony) + Jasno_zielony));
- wyczysc_boksa(c_x - 1, c_y - 1, linie + c_x, kolumny + c_y, Zielony);
- boks(c_x - 1, c_y - 1, linie + c_x, kolumny + c_y, Zielony, Bialy, "");
- ustaw_kolor(kolor_n); printf("%c", 177);
- for (i = 0; i <= linie + 1; i++)
- {
- for (j = 0; j <= kolumny + 1; j++)
- {
- idz_do_x_y( ( c_x - 1 ) + i, (c_y - 1) + j);
- if ( ( c_x + i == c_x ) ||
- ( c_x + i - 1 == ( c_x + linie ) ) ||
- ( c_y + j == c_y ) ||
- ( c_y + j - 1 == (kolumny + c_y ) ) )
- {
- ustaw_kolor(color_granicy);
- printf("%c", 178);
- }
- else printf("%c", 177);
- ustaw_kolor(color_tla);
- }
- }
- }
- void Snake::Zainicjuj_weza()
- {
- x = 35;
- y = 14;
- waz = 5;
- for (i = 0; i <= 201; i++)
- {
- snake_x_lokalizacja[i] = 0;
- snake_y_lokalizacja[i] = 0;
- }
- for (i = waz; i>0; i--, x++)
- {
- snake_x_lokalizacja[i] = x;
- snake_y_lokalizacja[i] = y;
- }
- x--;
- poprzednie_x = x; poprzednie_y = y;
- kierunek = 1;
- j = 0;
- }
- void Snake::Wylap_kolizje()
- {
- for (i = 2; i <= waz; i++)
- {
- if ( ( snake_x_lokalizacja[1] == snake_x_lokalizacja[i] ) && ( snake_y_lokalizacja[1] == snake_y_lokalizacja[i] ) ) Koniec_gry();
- }
- }
- void Snake::Sprawdz_jablko()
- {
- ustaw_kolor(kolor_jablka);
- losowy_x = ( rand() % linie ) + c_x;
- losowy_y = (rand() % kolumny ) + c_y;
- for (i = 1; i <= waz; i++)
- {
- if ( ( losowy_x == snake_x_lokalizacja[i] ) && ( losowy_y == snake_y_lokalizacja[i] ) ) Wyrzuc_jablko();
- }
- idz_do_x_y(losowy_x, losowy_y); printf("%c", 770);
- if (punkty == 1)_getch();
- }
- void Snake::Sprawdz_jablko()
- {
- if ( ( snake_x_lokalizacja[1] == losowy_x ) && ( snake_y_lokalizacja[1] == losowy_y ) )
- {
- jablko++;
- Wylosuj_jablko();
- waz += dlugosc_weza;
- Wyrzuc_jablko();
- }
- }
- void Snake::Poka_sowe_a_wlasciwie_weza()
- {
- for (i = waz; i >= 0; i--)
- {
- idz_do_x_y(snake_x_lokalizacja[i], snake_y_lokalizacja[i]);
- if (i == 0)
- {
- ustaw_kolor(kolor_tla);
- printf("%c", 177);
- }
- else ustaw_kolor(kolor_weza);
- if (i == 1) printf("%c", 178);
- if ((i != 0) && (i != 1)) printf("%c", 219);
- }
- ustaw_kolor(kolor_n);
- idz_do_x_y(c_x - 1, c_y + kolumny + 2);
- printf("level: %2.d", poziom);
- idz_do_x_y(c_x - 1, c_y + kolumny + 2 + 1);
- printf("/ %2.d,eaten /%2.d apples left ", jablko, ( ( ( kolumny * linie ) / 30 ) + 6 ) );
- ustaw_kolor(kolor_tla);
- }
- void Snake::Lokalizacja_weza()
- {
- if (p_waz>200 || p_waz<0) p_waz = 5;
- if ((poprzednie_x != x) || (poprzednie_y != y))
- {
- if (waz == p_waz)
- {
- snake_x_lokalizacja[0] = snake_x_lokalizacja[waz];
- snake_y_lokalizacja[0] = snake_y_lokalizacja[waz];
- for (i = waz; i>1; i--)
- {
- snake_x_lokalizacja[i] = snake_x_lokalizacja[i - 1];
- snake_y_lokalizacja[i] = snake_y_lokalizacja[i - 1];
- }
- }
- if (waz != p_waz)
- {
- snake_x_lokalizacja[0] = snake_x_lokalizacja[p_waz];
- snake_y_lokalizacja[0] = snake_y_lokalizacja[p_waz];
- for (i = p_waz; i>1; i--)
- {
- snake_x_lokalizacja[i] = snake_x_lokalizacja[i - 1];
- snake_y_lokalizacja[i] = snake_y_lokalizacja[i - 1];
- }
- for (i = (p_waz + 1); i <= waz; i++)
- {
- snake_x_lokalizacja[i] = snake_x_lokalizacja[i - 1];
- snake_y_lokalizacja[i] = snake_y_lokalizacja[i - 1];
- }
- }
- if (poprzednie_x != x) snake_x_lokalizacja[1] = x; //
- if (poprzednie_y != y) snake_y_lokalizacja[1] = y; //
- }
- p_waz = waz; //
- poprzednie_x = x; poprzednie_y = y; //
- }
- void Snake::Przyciski()
- {
- if (_kbhit())
- { //
- c = _getch();
- switch (c)
- {
- case PRAWO:
- if (kierunek != 3)
- {
- x++;
- kierunek = 1;
- }
- else x--;
- break;
- case LEWO:
- if (kierunek != 1)
- {
- x--;
- kierunek = 3;
- }
- else x++;
- break;
- case DOl:
- if (kierunek != 2)
- {
- y++;
- kierunek = 4;
- }
- else y--;
- break;
- case GORA:
- if (kierunek != 4)
- {
- y--;
- kierunek = 2;
- }
- else y++;
- break;
- case SPACJA: _getch(); break;
- }
- }
- else { //
- switch (kierunek)
- {
- case 1: x++; break;
- case 3: x--; break;
- case 4: y++; break;
- case 2: y--; break;
- }
- }
- switch (poziom) { //
- case 1: poziom_trudnosci = 120; break;
- case 2: poziom_trudnosci = 90; break;
- case 3: poziom_trudnosci = 65; break;
- case 4: poziom_trudnosci = 40; break;
- case 5: poziom_trudnosci = 20; break;
- case 6: poziom_trudnosci = 15; break;
- }
- Sleep(poziom_trudnosci);
- }
- void Snake::Wylosuj_jablko()
- {
- if (jablko == ( ( (kolumny*linie) / 30) + 6))
- {
- jablko = 0;
- Wyswietl();
- poziom++;
- if (poziom>7)
- { //
- punkty = 0;
- idz_do_x_y(30, 7);
- ustaw_kolor(kolor_n);
- printf(" score ");
- Sleep(700);
- _getch();
- Gra();
- }
- punkty = 1;
- Gra();
- }
- }
- void Snake::Koniec_gry()
- {
- jablko = 0;
- wyczysc_ekran();
- wyczysc_boksa(10, 8, 70, 16, 31);
- boks(10, 8, 70, 16, 31, 31, "Game Over ");
- idz_do_x_y(18, 10); cprintf(" ");
- idz_do_x_y(18, 11); cprintf("The snake has hit an obstacle");
- idz_do_x_y(18, 14); cprintf("");
- idz_do_x_y(18, 13); printf("play Again? (y/n)");
- do {
- powtorz_rozgrywke = _getch();
- if ( ( powtorz_rozgrywke == 'y') || ( powtorz_rozgrywke == 'Y' ) )
- {
- linie= 0;
- kolumny = 0;
- Wyswietl();
- Gra();
- }
- if ( ( powtorz_rozgrywke == 'n') ||
- ( powtorz_rozgrywke == 'N'))
- {
- ustaw_kolor(15);
- wyczysc_ekran();
- idz_do_x_y(1, 23);
- printf("\n ");
- exit(1);
- }
- } while ( ( powtorz_rozgrywke != 'y') ||
- ( powtorz_rozgrywke != 'Y') ||
- ( powtorz_rozgrywke != 'n') ||
- ( powtorz_rozgrywke != 'N'));
- }
- void Snake::Wyswietl()
- {
- ustaw_kolor(0);
- for (i = 0; i <= 70; i++)
- {
- for (j = 0; j <= 23; j++)
- {
- idz_do_x_y(i, j);
- printf("%c", 177);
- }
- }
- }
- void Snake::ustaw_kolor(WORD kolor)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), kolor);
- return;
- }
- void Snake::wyczysc_ekran()
- {
- COORD coordScreen = { 0, 0 };
- DWORD cCharsWritten;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- DWORD dwConSize;
- HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- GetConsoleScreenBufferInfo(hConsole, &csbi);
- dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
- FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
- GetConsoleScreenBufferInfo(hConsole, &csbi);
- FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
- SetConsoleCursorPosition(hConsole, coordScreen);
- return;
- }
- void Snake::idz_do_x_y(int x, int y)
- {
- COORD coord;
- coord.X = x; coord.Y = y;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- return;
- }
- void Snake::wyczysc_boksa(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char bkgcol)
- {
- int x, y;
- for (y = y1; y<y2; y++)
- {
- for (x = x1; x<x2; x++)
- {
- ustaw_kolor(bkgcol);
- idz_do_x_y(x, y); cprintf(" ");
- }
- }
- }
- void Snake::boks(unsigned x, unsigned y, unsigned sx, unsigned sy, unsigned char col, unsigned char col2, char text_[])
- {
- unsigned i, j, k = 0, m;
- {
- m = (sx - x);
- j = m / 8;
- j = j - 1;
- ustaw_kolor(col2);
- idz_do_x_y(x, y); cprintf("É");
- idz_do_x_y(sx, y); cprintf("»");
- idz_do_x_y(x, sy); cprintf("Č");
- idz_do_x_y(sx, sy); cprintf("Ľ");
- for (i = x + 1; i<sx; i++)
- {
- idz_do_x_y(i, y); cprintf("Í");
- idz_do_x_y(i, sy); cprintf("Í");
- }
- for (i = y + 1; i<sy; i++)
- {
- idz_do_x_y(x, i); cprintf("ş");
- idz_do_x_y(sx, i); cprintf("ş");
- }
- ustaw_kolor(col);
- idz_do_x_y(x + j, y); cprintf(text_);
- idz_do_x_y(1, 24);
- }
- }
- void Snake::umiesc_boksa(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned char texcol, unsigned char frcol, unsigned char bkgcol, char bheader[])
- {
- wyczysc_boksa(x1, y1, x2, y2, bkgcol);
- boks(x1, y1, x2, y2, texcol, frcol, bheader);
- }
- void Snake::CalclateFramesPerSecond()
- {
- currTick = GetTickCount();
- unsigned long tickDiff = currTick - lastTick;
- frames++;
- if (tickDiff >= UPDATESPEED)
- {
- lastTick = currTick;
- float calcVal = 1 / ((float)UPDATESPEED / 1000.0f);
- float fpsCalc = (float)frames*calcVal;
- fps += fpsCalc;
- fps /= 2;
- ustaw_kolor(31); idz_do_x_y(60, 22); printf(" %d FPS ", tickDiff); ustaw_kolor(15);
- frames = 0;
- g_speed = 60 / fps;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement