Advertisement
sMteX

BinaryHero

Oct 29th, 2015
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <Windows.h> // funkce z windows
  4. #include <conio.h>  // funkce jen pro win
  5.  
  6.  
  7.  
  8. #define VYSKA 10    //muze se menit (ale nemela by byt mensi nez.. 2 asi
  9. #define SIRKA 4     //NEMENIT, nesedely by matice reseni ani matice "nasbiranych" cisel
  10.  
  11.  
  12. int main()
  13. {
  14.     //DEKLARACE
  15.     int r, s;           //indexy pro pohyby v cyklech - radek a sloupec
  16.     int stlpec, riadok; //umisteni strisky
  17.     int znakI;          //pri nacitani z klavesnice
  18.     char znakC;         //pri generovani noveho radku
  19.     int level, zivoty, rychlost;
  20.     bool napoveda = false; //bool co kontroluje zobrazeni napovedy na 1 tah
  21.     bool test;          //bool pouzivany pri testovani, zda jsme uz neslozili cislo
  22.     int cil;            //cislo, ktere skladame (0 - 15)
  23.     int nahodnySloupec; //sloupec pri generovani noveho radku
  24.     int nahodnyZnak;    //znak pri generovani noveho radku
  25.     char cislice[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; //jednotlive 16kove cislice
  26.     char cisliceReseni[][4] = {
  27.         { '0', '0', '0', '0' },
  28.         { '0', '0', '0', '1' },
  29.         { '0', '0', '1', '0' },
  30.         { '0', '0', '1', '1' },
  31.         { '0', '1', '0', '0' },
  32.         { '0', '1', '0', '1' },
  33.         { '0', '1', '1', '0' },
  34.         { '0', '1', '1', '1' },
  35.         { '1', '0', '0', '0' },
  36.         { '1', '0', '0', '1' },
  37.         { '1', '0', '1', '0' },
  38.         { '1', '0', '1', '1' },
  39.         { '1', '1', '0', '0' },
  40.         { '1', '1', '0', '1' },
  41.         { '1', '1', '1', '0' },
  42.         { '1', '1', '1', '1' }}; //cisla 0 - F prevedena do binarni podoby, at muzu jednoduse porovnavat
  43.     char nasbiraneCislice[] = { '_', '_', '_', '_' };
  44.     char matica[VYSKA][SIRKA];
  45.     bool stopHry = false;       //po kliknuti na Q - ukonceni cele hry
  46.     bool stopZivoty = false;    //pri smrti na zivoty, akorat nas vrati do menu
  47.  
  48.     srand(time(NULL));
  49.  
  50.     do
  51.     {
  52.         //hlavni menu
  53.         system("cls");
  54.         printf("\n\t\t\t\tBinary Hero");
  55.         printf("\n\n\t\t\ta - prva draha");
  56.         printf("\n\t\t\ts - druha draha");
  57.         printf("\n\t\t\td - tretia draha");
  58.         printf("\n\t\t\tf - stvrta draha");
  59.         printf("\n\n\t\t\th - napoveda za 1 zivot");
  60.         printf("\n\t\t\tq - Koniec hry");
  61.         printf("\n\n\t\t\t Press any key to play\n");
  62.         getch();
  63.  
  64.         system("cls");
  65.         //reset matice
  66.         for (r = 0; r < VYSKA; r++)
  67.         {
  68.             for (s = 0; s < SIRKA; s++)
  69.             {
  70.                 matica[r][s] = ' ';
  71.             }
  72.         }
  73.         //nastaveni pocatecnich parametru
  74.         rychlost = 750;
  75.         stopZivoty = false;
  76.         level = 1;
  77.         zivoty = 3;
  78.         riadok = VYSKA - 1;
  79.         stlpec = 2;
  80.         matica[riadok][stlpec] = '^'; //pocatecni umisteni strisky
  81.         for (s = 0; s < SIRKA; s++)
  82.             nasbiraneCislice[s] = '_';
  83.         cil = rand() % 16;      //vygenerovani noveho cisla
  84.         do
  85.         {
  86.             // padanie cisiel
  87.             for (int r = VYSKA - 1; r > 0; r--)
  88.             {
  89.                 for (int s = 0; s < SIRKA; s++)
  90.                 {
  91.                     if (r == VYSKA - 1) //padani na posledni radek, prvni pruchod cyklem, kontrolujeme kolize
  92.                     {
  93.                         if (matica[r][s] == '^') //pokud je znak ktery by jinak "padal" ta striska tak zbytek pruchodu cyklu preskocime
  94.                             continue;
  95.                         else if (matica[r][s] != ' ' && nasbiraneCislice[s] == '_') //dopadame na prazdne misto
  96.                         {
  97.                             if (matica[r][s] == cisliceReseni[cil][s]) //spravne cislo
  98.                             {
  99.                                 nasbiraneCislice[s] = matica[r][s];
  100.                             }
  101.                             else //spatne cislo
  102.                             {
  103.                                 nasbiraneCislice[s] = 'x';
  104.                                 zivoty--;
  105.                             }
  106.                         }
  107.                         else if (matica[r][s] != ' ' && nasbiraneCislice[s] != '_') //dopadame na plne misto
  108.                         {
  109.                             if (nasbiraneCislice[s] == 'x') //dopadame na X
  110.                             {
  111.                                 if (matica[r][s] == cisliceReseni[cil][s]) //a pada tam spravne cislo
  112.                                 {
  113.                                     nasbiraneCislice[s] = matica[r][s]; //tak se tam usadi
  114.                                 }
  115.                                 else //nepatri tam, X zustava
  116.                                 {
  117.                                     zivoty--;
  118.                                 }
  119.                             }
  120.                             else //dopadame na 1 nebo 0
  121.                             {
  122.                                 if (matica[r][s] != nasbiraneCislice[s]) //a je to neco opacneho a tedy spatneho
  123.                                 {
  124.                                     nasbiraneCislice[s] = 'x';
  125.                                     zivoty--;
  126.                                 }
  127.                             }
  128.                         }
  129.                         matica[r][s] = matica[r - 1][s]; //a vsechno z predposledniho redku spadne na posledni radek
  130.                     }
  131.                     else //ostatni radky normalne padaji
  132.                     {
  133.                         matica[r][s] = matica[r - 1][s];
  134.                     }
  135.                 }
  136.             }
  137.             //vyzkousim, jestli jsme poskladali cele cislo
  138.             test = true;
  139.             for (s = 0; s < SIRKA; s++)
  140.             {
  141.                 if (nasbiraneCislice[s] != cisliceReseni[cil][s]) //pokud najdu na jediny odlisny znak od reseni, kontrolu rusim, nemusim dal prochazet
  142.                 {
  143.                     test = false;
  144.                     break;
  145.                 }
  146.             }
  147.             if (test == true) //poskladali jsme cele cislo
  148.             {
  149.                 level++;
  150.                 system("cls");
  151.                 printf("\n\t\t\t\tBinary Hero");
  152.                 printf("\n");
  153.                 printf("\n\t\tgratuluji, pokracujes do kola cislo %d", level);
  154.                 //vyresetuju matici
  155.                 for (r = 0; r < VYSKA; r++)
  156.                 {
  157.                     for (s = 0; s < SIRKA; s++)
  158.                     {
  159.                         matica[r][s] = ' ';
  160.                     }
  161.                 }
  162.                 for (s = 0; s < SIRKA; s++)
  163.                     nasbiraneCislice[s] = '_';
  164.                 //vygeneruju nove cislo
  165.                 cil = rand() % 16;
  166.                 //vyresetuju zivoty
  167.                 zivoty = 3;
  168.                 //trochu zrychlim (o 0,05s)
  169.                 rychlost -= 50;
  170.                 //vyresetuju strisku
  171.                 riadok = VYSKA - 1;
  172.                 stlpec = 2;
  173.                 matica[riadok][stlpec] = '^';
  174.                 //dam 2s na precteni
  175.                 Sleep(2000);
  176.             }
  177.             else //bud pokracujeme dale nebo muzeme jeste skoncit na zivoty
  178.             {
  179.                 // generovanie noveho riadku
  180.                 nahodnySloupec = rand() % 4;
  181.                 nahodnyZnak = rand() % 4;
  182.                 znakC = ' ';
  183.                 if (nahodnyZnak == 0)
  184.                     znakC = '0';
  185.                 if (nahodnyZnak == 1)
  186.                     znakC = '1';
  187.                 for (s = 0; s < SIRKA; s++)
  188.                     matica[0][s] = ' ';
  189.                 matica[0][nahodnySloupec] = znakC;
  190.                 // ovladani
  191.  
  192.                 if (_kbhit())
  193.                 {
  194.                     znakI = _getch();
  195.                     matica[riadok][stlpec] = ' '; //smazu puvodni
  196.                     switch (znakI)
  197.                     {
  198.                     case 'a':
  199.                         stlpec = 0;
  200.                         riadok = VYSKA - 1;
  201.                         break;
  202.                     case 's':
  203.                         stlpec = 1;
  204.                         riadok = VYSKA - 1;
  205.                         break;
  206.                     case 'd':
  207.                         stlpec = 2;
  208.                         riadok = VYSKA - 1;
  209.                         break;
  210.                     case 'f':
  211.                         stlpec = 3;
  212.                         riadok = VYSKA - 1;
  213.                         break;
  214.                     case 'q':
  215.                         stopHry = true;
  216.                         break;
  217.                     case 'h':
  218.                         napoveda = true;
  219.                         zivoty--;
  220.                         break;
  221.                     default:
  222.                         break;
  223.                     }
  224.                     matica[riadok][stlpec] = '^'; //vykreslim novy
  225.                 }
  226.  
  227.                 if (zivoty <= 0)
  228.                     stopZivoty = true;
  229.  
  230.                 system("cls");
  231.  
  232.                 if (stopHry == false && stopZivoty == false)
  233.                 {
  234.                     // vypis
  235.                     //vypsani toho co se ma hledat, zivotu a urovne
  236.                     printf("\t\t\tLevel %d\n", level);
  237.                     printf("\t\t\t%c # # %d\n", cislice[cil], zivoty);
  238.                     for (r = 0; r < VYSKA; r++)
  239.                     {
  240.                         printf("\t\t\t");
  241.                         for (s = 0; s < SIRKA; s++)
  242.                         {
  243.                             printf("%c ", matica[r][s]);
  244.                         }
  245.                         printf("\n");
  246.                     }
  247.                     printf("\t\t\t");
  248.                     for (int s = 0; s < SIRKA; s++)
  249.                     {
  250.                         if (napoveda == true)   //pokud jsme stiskli napovedu, zobrazim na jedno bliknuti napovedu
  251.                             printf("%c ", cisliceReseni[cil][s]);
  252.                         else
  253.                             printf("%c ", nasbiraneCislice[s]);
  254.                     }
  255.                     napoveda = false; //a hned ji zrusim
  256.                     Sleep(rychlost);
  257.                 }
  258.             }
  259.  
  260.         } while (stopHry == false && stopZivoty == false); //ukoncuje levely (resp. jen zaporne, pokud jsme prohrali)
  261.         //pokud se dostaneme sem, znamena to ze nam bud dosly zivoty nebo jsme ukoncili hru
  262.         if (stopZivoty == true) //dosly nam zivoty
  263.         {
  264.             system("cls");
  265.             printf("\n\t\t\t\tBinary Hero\n\n");
  266.             printf("\t\t\tDosly ti zivoty, jdes do hlavniho menu");
  267.             Sleep(2000);
  268.         }
  269.     } while (stopHry == false); //ukoncuje hru
  270.     _getch();
  271.     return 0;
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement