Guest User

Untitled

a guest
Jun 30th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <time.h>
  5.  
  6. const short int szerokosc = 100;
  7. const short int wysokosc = 30;
  8. int predkosc, kierunekx, kieruneky, pokarmx, pokarmy, wynik, i, c, highscore_r;
  9. float k;
  10. int snake[9999];
  11. short int dlugosc = 0;
  12. void gotoXY();
  13. void writeXY();
  14. void rysujRamke();
  15. void gra();
  16. void ruch();
  17. void kolizja();
  18. void losujPokarm();
  19. void pauza();
  20. void koniec();
  21. void restart();
  22.  
  23. int main()
  24. {
  25.     HKEY hkKEY;
  26.     DWORD dwDisp;
  27.     DWORD dwType = REG_DWORD;
  28.     DWORD dwSize = 4;
  29.     RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\snake", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkKEY, &dwDisp);
  30.     RegQueryValueEx(hkKEY, "highscore", NULL, &dwType, (BYTE*) &highscore_r, &dwSize);
  31.  
  32.     srand(time(0));
  33.     CONSOLE_CURSOR_INFO kursor;
  34.     kursor.dwSize = 1;
  35.     kursor.bVisible = FALSE;
  36.     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &kursor);
  37.  
  38.     system("mode 100, 30");
  39.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
  40.     gotoXY(5,5);
  41.  
  42.     writeXY(22, 8, "      _/_/_/  _/      _/    _/_/    _/    _/  _/_/_/_/");
  43.     writeXY(22, 9, "   _/        _/_/    _/  _/    _/  _/  _/    _/");
  44.     writeXY(22, 10, "    _/_/    _/  _/  _/  _/_/_/_/  _/_/      _/_/_/");
  45.     writeXY(22, 11, "       _/  _/    _/_/  _/    _/  _/  _/    _/");
  46.     writeXY(22, 12, "_/_/_/    _/      _/  _/    _/  _/    _/  _/_/_/_/");
  47.     writeXY(37, 15, "wcisnij SPACJE aby zagrac");
  48.     writeXY(92, wysokosc-1, "mdzn.pl");
  49.  
  50.     while(1) if(GetAsyncKeyState(32)) gra();
  51.  
  52.     return 0;
  53. }
  54.  
  55. void gotoXY(int x, int y)
  56. {
  57.     COORD coord = {x, y};
  58.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  59. }
  60.  
  61. void writeXY(int x, int y, char *s)
  62. {
  63.     gotoXY(x,y);
  64.     printf("%s",s);
  65. }
  66.  
  67. void rysujRamke()
  68. {
  69.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
  70.     for(i = 0; i <= szerokosc; i++) writeXY(i, 0, " ");
  71.     for(i = 0; i <= szerokosc; i++) writeXY(i, wysokosc, " ");
  72.     for(i = 1; i < wysokosc; i++) writeXY(0, i, "  ");
  73.     for(i = 1; i < wysokosc; i++) writeXY(szerokosc-2, i, "  ");
  74.     gotoXY(48, wysokosc-1);
  75.     printf("W - gora, S - dol, A - lewo, D - prawo, ESC - pauza");
  76.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
  77. }
  78.  
  79. void ruch()
  80. {
  81.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
  82.  
  83.     writeXY(snake[0], snake[1], " ");
  84.  
  85.     for(i = 2; i <= dlugosc; i +=2) writeXY(snake[i], snake[i+1], " ");
  86.  
  87.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
  88.     writeXY(snake[dlugosc-1], snake[dlugosc], " ");
  89.  
  90.     for(i = dlugosc-1; i >= 2; i -= 2)
  91.     {                              
  92.         snake[i] = snake[i - 2];
  93.         snake[i+1] = snake[i - 1];
  94.     }
  95.  
  96.     snake[0] += kierunekx;
  97.     snake[1] += kieruneky;
  98.  
  99. }
  100.  
  101. void kolizja()
  102. {
  103.     if(snake[0] == 1 || snake[0] == szerokosc-2 || snake[1] == 0 || snake[1] == wysokosc-1) koniec();
  104.  
  105.     for(i = 2; i <= dlugosc; i +=2) if(snake[0] == snake[i] && snake[1] == snake[i+1]) koniec();
  106. }
  107.  
  108. void losujPokarm()
  109. {
  110.     pokarmx = 4 + rand()%(szerokosc-7);
  111.     pokarmy = 2 + rand()%(wysokosc-4);
  112.     writeXY(pokarmx, pokarmy, "*");
  113. }
  114.  
  115. void gra()
  116. {
  117.     predkosc = 50;
  118.     dlugosc = 9;
  119.     kierunekx = 1;
  120.     kieruneky = 0;
  121.     wynik = 0;
  122.  
  123.     for(i = 0, c = 0; i <= dlugosc; i += 2, c++)
  124.     {
  125.         snake[i] = 20 - c;
  126.         snake[i+1] = 10;
  127.     }
  128.  
  129.     system("cls");
  130.     rysujRamke();
  131.     losujPokarm();
  132.  
  133.     while(1)
  134.     {
  135.         if(GetAsyncKeyState(87) && kieruneky != 1 && !GetAsyncKeyState(83) && !GetAsyncKeyState(65) && !GetAsyncKeyState(68)) { kierunekx = 0; kieruneky = -1; } /* skret w gore */
  136.         if(GetAsyncKeyState(83) && kieruneky != -1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(65) && !GetAsyncKeyState(68)) { kierunekx = 0; kieruneky = 1; } /* skret w dol */
  137.         if(GetAsyncKeyState(65) && kierunekx != 1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(83) && !GetAsyncKeyState(68)) { kierunekx = -1; kieruneky = 0; } /* skret w lewo */
  138.         if(GetAsyncKeyState(68) && kierunekx != -1 && !GetAsyncKeyState(87) && !GetAsyncKeyState(83) && !GetAsyncKeyState(65)) { kierunekx = 1; kieruneky = 0; } /* skret w prawo */
  139.  
  140.         ruch();
  141.         kolizja();
  142.  
  143.         Sleep(predkosc);
  144.  
  145.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); /* wypisywanie wyniku na ekranie */
  146.         gotoXY(5,wysokosc-1);
  147.         if(wynik <= highscore_r) printf("score: %d | highscore: %d", wynik, highscore_r);
  148.         else printf("score: %d | highscore: %d", wynik, wynik);
  149.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x08);
  150.  
  151.         if((snake[0] == pokarmx && snake[1] == pokarmy))
  152.         {
  153.             wynik += 10;
  154.             if(wynik%50 == 0 && predkosc > 2) predkosc -= 1;
  155.             dlugosc = dlugosc+2;
  156.             snake[dlugosc-1] = pokarmx;
  157.             snake[dlugosc] = pokarmy;
  158.             losujPokarm();
  159.         }
  160.         for(i = 0; i <= dlugosc; i += 2) if(pokarmx == snake[i] && pokarmy == snake[i+1]) losujPokarm();
  161.  
  162.         if(GetAsyncKeyState(27)) pauza();
  163.     }
  164. }
  165.  
  166. void pauza()
  167. {
  168.     system("cls");
  169.     writeXY(25, 8, "########     ###    ##     ## ########    ###");
  170.     writeXY(25, 9, "##     ##   ## ##   ##     ##      ##    ## ##");
  171.     writeXY(25, 10, "##     ##  ##   ##  ##     ##     ##    ##   ##");
  172.     writeXY(25, 11, "########  ##     ## ##     ##    ##    ##     ##");
  173.     writeXY(25, 12, "##        ######### ##     ##   ##     #########");
  174.     writeXY(25, 13, "##        ##     ## ##     ##  ##      ##     ##");
  175.     writeXY(25, 14, "##        ##     ##  #######  ######## ##     ##");
  176.     gotoXY(26, 18);
  177.     system("pause");
  178.     restart(1);
  179. }
  180. void koniec()
  181. {
  182.     HKEY hkHIGHSCORE;
  183.     DWORD highscore = wynik;
  184.     DWORD dwType = REG_DWORD;
  185.     DWORD dwSize = 4;
  186.     RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\snake", 0, KEY_ALL_ACCESS, &hkHIGHSCORE);
  187.     RegQueryValueEx(hkHIGHSCORE, "highscore", NULL, &dwType, (BYTE*) &highscore_r, &dwSize);
  188.     if(wynik > highscore_r)
  189.     RegSetValueEx(hkHIGHSCORE, "highscore", 0, REG_DWORD, (BYTE*) &highscore, 4);
  190.  
  191.     Sleep(1500);
  192.     system("cls");
  193.     writeXY(9, 3, " ######      ###    ##     ## ########     #######  ##     ## ######## ########");
  194.     writeXY(9, 4, "##    ##    ## ##   ###   ### ##          ##     ## ##     ## ##       ##     ##");
  195.     writeXY(9, 5, "##         ##   ##  #### #### ##          ##     ## ##     ## ##       ##     ##");
  196.     writeXY(9, 6, "##   #### ##     ## ## ### ## ######      ##     ## ##     ## ######   ########");
  197.     writeXY(9, 7, "##    ##  ######### ##     ## ##          ##     ##  ##   ##  ##       ##   ##");
  198.     writeXY(9, 8, "##    ##  ##     ## ##     ## ##          ##     ##   ## ##   ##       ##    ##");
  199.     writeXY(9, 9, " ######   ##     ## ##     ## ########     #######     ###    ######## ##     ##");
  200.     for(i = 0; i <= wynik; i++) { Sleep(15); gotoXY(43, 15); printf("score: %d", i); }
  201.     if(wynik > highscore_r) writeXY(41, 18, "NEW HIGHSCORE!");
  202.     gotoXY(26, 21);
  203.     system("pause");
  204.     restart(0);
  205. }
  206.  
  207. void restart(int pauza)
  208. {
  209.     system("cls");
  210.     rysujRamke();
  211.     writeXY(pokarmx, pokarmy, "*");
  212.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  213.     gotoXY(5,wysokosc-1);
  214.     if(wynik <= highscore_r) printf("score: %d | highscore: %d", wynik, highscore_r);
  215.     else printf("score: %d | highscore: %d", wynik, wynik);
  216.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
  217.     writeXY(snake[0], snake[1], " ");
  218.     for(i = 2; i <= dlugosc; i +=2) writeXY(snake[i], snake[i+1], " ");
  219.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
  220.     if(pauza == 1) Sleep(3000);
  221.     else if(pauza == 0) gra();
  222. }
Advertisement
Add Comment
Please, Sign In to add comment