Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <time.h>
- const short int szerokosc = 100;
- const short int wysokosc = 30;
- int predkosc, kierunekx, kieruneky, pokarmx, pokarmy, wynik, i, c, highscore_r;
- float k;
- int snake[9999];
- short int dlugosc = 0;
- void gotoXY();
- void writeXY();
- void rysujRamke();
- void gra();
- void ruch();
- void kolizja();
- void losujPokarm();
- void pauza();
- void koniec();
- void restart();
- int main()
- {
- HKEY hkKEY;
- DWORD dwDisp;
- DWORD dwType = REG_DWORD;
- DWORD dwSize = 4;
- RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\snake", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkKEY, &dwDisp);
- RegQueryValueEx(hkKEY, "highscore", NULL, &dwType, (BYTE*) &highscore_r, &dwSize);
- srand(time(0));
- CONSOLE_CURSOR_INFO kursor;
- kursor.dwSize = 1;
- kursor.bVisible = FALSE;
- SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &kursor);
- system("mode 100, 30");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
- gotoXY(5,5);
- writeXY(22, 8, " _/_/_/ _/ _/ _/_/ _/ _/ _/_/_/_/");
- writeXY(22, 9, " _/ _/_/ _/ _/ _/ _/ _/ _/");
- writeXY(22, 10, " _/_/ _/ _/ _/ _/_/_/_/ _/_/ _/_/_/");
- writeXY(22, 11, " _/ _/ _/_/ _/ _/ _/ _/ _/");
- writeXY(22, 12, "_/_/_/ _/ _/ _/ _/ _/ _/ _/_/_/_/");
- writeXY(37, 15, "wcisnij SPACJE aby zagrac");
- writeXY(92, wysokosc-1, "mdzn.pl");
- while(1) if(GetAsyncKeyState(32)) gra();
- return 0;
- }
- void gotoXY(int x, int y)
- {
- COORD coord = {x, y};
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- }
- void writeXY(int x, int y, char *s)
- {
- gotoXY(x,y);
- printf("%s",s);
- }
- void rysujRamke()
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
- for(i = 0; i <= szerokosc; i++) writeXY(i, 0, " ");
- for(i = 0; i <= szerokosc; i++) writeXY(i, wysokosc, " ");
- for(i = 1; i < wysokosc; i++) writeXY(0, i, " ");
- for(i = 1; i < wysokosc; i++) writeXY(szerokosc-2, i, " ");
- gotoXY(48, wysokosc-1);
- printf("W - gora, S - dol, A - lewo, D - prawo, ESC - pauza");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
- }
- void ruch()
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
- writeXY(snake[0], snake[1], " ");
- for(i = 2; i <= dlugosc; i +=2) writeXY(snake[i], snake[i+1], " ");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
- writeXY(snake[dlugosc-1], snake[dlugosc], " ");
- for(i = dlugosc-1; i >= 2; i -= 2)
- {
- snake[i] = snake[i - 2];
- snake[i+1] = snake[i - 1];
- }
- snake[0] += kierunekx;
- snake[1] += kieruneky;
- }
- void kolizja()
- {
- if(snake[0] == 1 || snake[0] == szerokosc-2 || snake[1] == 0 || snake[1] == wysokosc-1) koniec();
- for(i = 2; i <= dlugosc; i +=2) if(snake[0] == snake[i] && snake[1] == snake[i+1]) koniec();
- }
- void losujPokarm()
- {
- pokarmx = 4 + rand()%(szerokosc-7);
- pokarmy = 2 + rand()%(wysokosc-4);
- writeXY(pokarmx, pokarmy, "*");
- }
- void gra()
- {
- predkosc = 50;
- dlugosc = 9;
- kierunekx = 1;
- kieruneky = 0;
- wynik = 0;
- for(i = 0, c = 0; i <= dlugosc; i += 2, c++)
- {
- snake[i] = 20 - c;
- snake[i+1] = 10;
- }
- system("cls");
- rysujRamke();
- losujPokarm();
- while(1)
- {
- if(GetAsyncKeyState(87) && kieruneky != 1 && !GetAsyncKeyState(83) && !GetAsyncKeyState(65) && !GetAsyncKeyState(68)) { kierunekx = 0; kieruneky = -1; } /* skret w gore */
- if(GetAsyncKeyState(83) && kieruneky != -1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(65) && !GetAsyncKeyState(68)) { kierunekx = 0; kieruneky = 1; } /* skret w dol */
- if(GetAsyncKeyState(65) && kierunekx != 1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(83) && !GetAsyncKeyState(68)) { kierunekx = -1; kieruneky = 0; } /* skret w lewo */
- if(GetAsyncKeyState(68) && kierunekx != -1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(83) && !GetAsyncKeyState(65)) { kierunekx = 1; kieruneky = 0; } /* skret w prawo */
- ruch();
- kolizja();
- Sleep(predkosc);
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); /* wypisywanie wyniku na ekranie */
- gotoXY(5,wysokosc-1);
- if(wynik <= highscore_r) printf("score: %d | highscore: %d", wynik, highscore_r);
- else printf("score: %d | highscore: %d", wynik, wynik);
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x08);
- if((snake[0] == pokarmx && snake[1] == pokarmy))
- {
- wynik += 10;
- if(wynik%50 == 0 && predkosc > 2) predkosc -= 1;
- dlugosc = dlugosc+2;
- snake[dlugosc-1] = pokarmx;
- snake[dlugosc] = pokarmy;
- losujPokarm();
- }
- for(i = 0; i <= dlugosc; i += 2) if(pokarmx == snake[i] && pokarmy == snake[i+1]) losujPokarm();
- if(GetAsyncKeyState(27)) pauza();
- }
- }
- void pauza()
- {
- system("cls");
- writeXY(25, 8, "######## ### ## ## ######## ###");
- writeXY(25, 9, "## ## ## ## ## ## ## ## ##");
- writeXY(25, 10, "## ## ## ## ## ## ## ## ##");
- writeXY(25, 11, "######## ## ## ## ## ## ## ##");
- writeXY(25, 12, "## ######### ## ## ## #########");
- writeXY(25, 13, "## ## ## ## ## ## ## ##");
- writeXY(25, 14, "## ## ## ####### ######## ## ##");
- gotoXY(26, 18);
- system("pause");
- restart(1);
- }
- void koniec()
- {
- HKEY hkHIGHSCORE;
- DWORD highscore = wynik;
- DWORD dwType = REG_DWORD;
- DWORD dwSize = 4;
- RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\snake", 0, KEY_ALL_ACCESS, &hkHIGHSCORE);
- RegQueryValueEx(hkHIGHSCORE, "highscore", NULL, &dwType, (BYTE*) &highscore_r, &dwSize);
- if(wynik > highscore_r)
- RegSetValueEx(hkHIGHSCORE, "highscore", 0, REG_DWORD, (BYTE*) &highscore, 4);
- Sleep(1500);
- system("cls");
- writeXY(9, 3, " ###### ### ## ## ######## ####### ## ## ######## ########");
- writeXY(9, 4, "## ## ## ## ### ### ## ## ## ## ## ## ## ##");
- writeXY(9, 5, "## ## ## #### #### ## ## ## ## ## ## ## ##");
- writeXY(9, 6, "## #### ## ## ## ### ## ###### ## ## ## ## ###### ########");
- writeXY(9, 7, "## ## ######### ## ## ## ## ## ## ## ## ## ##");
- writeXY(9, 8, "## ## ## ## ## ## ## ## ## ## ## ## ## ##");
- writeXY(9, 9, " ###### ## ## ## ## ######## ####### ### ######## ## ##");
- for(i = 0; i <= wynik; i++) { Sleep(15); gotoXY(43, 15); printf("score: %d", i); }
- if(wynik > highscore_r) writeXY(41, 18, "NEW HIGHSCORE!");
- gotoXY(26, 21);
- system("pause");
- restart(0);
- }
- void restart(int pauza)
- {
- system("cls");
- rysujRamke();
- writeXY(pokarmx, pokarmy, "*");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
- gotoXY(5,wysokosc-1);
- if(wynik <= highscore_r) printf("score: %d | highscore: %d", wynik, highscore_r);
- else printf("score: %d | highscore: %d", wynik, wynik);
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
- writeXY(snake[0], snake[1], " ");
- for(i = 2; i <= dlugosc; i +=2) writeXY(snake[i], snake[i+1], " ");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
- if(pauza == 1) Sleep(3000);
- else if(pauza == 0) gra();
- }
Advertisement
Add Comment
Please, Sign In to add comment