Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- #include <Windows.h> // funkce z windows
- #include <conio.h> // funkce jen pro win
- #define VYSKA 10 //muze se menit (ale nemela by byt mensi nez.. 2 asi
- #define SIRKA 4 //NEMENIT, nesedely by matice reseni ani matice "nasbiranych" cisel
- int main()
- {
- //DEKLARACE
- int r, s; //indexy pro pohyby v cyklech - radek a sloupec
- int stlpec, riadok; //umisteni strisky
- int znakI; //pri nacitani z klavesnice
- char znakC; //pri generovani noveho radku
- int level, zivoty, rychlost;
- bool napoveda = false; //bool co kontroluje zobrazeni napovedy na 1 tah
- bool test; //bool pouzivany pri testovani, zda jsme uz neslozili cislo
- int cil; //cislo, ktere skladame (0 - 15)
- int nahodnySloupec; //sloupec pri generovani noveho radku
- int nahodnyZnak; //znak pri generovani noveho radku
- char cislice[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; //jednotlive 16kove cislice
- char cisliceReseni[][4] = {
- { '0', '0', '0', '0' },
- { '0', '0', '0', '1' },
- { '0', '0', '1', '0' },
- { '0', '0', '1', '1' },
- { '0', '1', '0', '0' },
- { '0', '1', '0', '1' },
- { '0', '1', '1', '0' },
- { '0', '1', '1', '1' },
- { '1', '0', '0', '0' },
- { '1', '0', '0', '1' },
- { '1', '0', '1', '0' },
- { '1', '0', '1', '1' },
- { '1', '1', '0', '0' },
- { '1', '1', '0', '1' },
- { '1', '1', '1', '0' },
- { '1', '1', '1', '1' }}; //cisla 0 - F prevedena do binarni podoby, at muzu jednoduse porovnavat
- char nasbiraneCislice[] = { '_', '_', '_', '_' };
- char matica[VYSKA][SIRKA];
- bool stopHry = false; //po kliknuti na Q - ukonceni cele hry
- bool stopZivoty = false; //pri smrti na zivoty, akorat nas vrati do menu
- srand(time(NULL));
- do
- {
- //hlavni menu
- system("cls");
- printf("\n\t\t\t\tBinary Hero");
- printf("\n\n\t\t\ta - prva draha");
- printf("\n\t\t\ts - druha draha");
- printf("\n\t\t\td - tretia draha");
- printf("\n\t\t\tf - stvrta draha");
- printf("\n\n\t\t\th - napoveda za 1 zivot");
- printf("\n\t\t\tq - Koniec hry");
- printf("\n\n\t\t\t Press any key to play\n");
- getch();
- system("cls");
- //reset matice
- for (r = 0; r < VYSKA; r++)
- {
- for (s = 0; s < SIRKA; s++)
- {
- matica[r][s] = ' ';
- }
- }
- //nastaveni pocatecnich parametru
- rychlost = 750;
- stopZivoty = false;
- level = 1;
- zivoty = 3;
- riadok = VYSKA - 1;
- stlpec = 2;
- matica[riadok][stlpec] = '^'; //pocatecni umisteni strisky
- for (s = 0; s < SIRKA; s++)
- nasbiraneCislice[s] = '_';
- cil = rand() % 16; //vygenerovani noveho cisla
- do
- {
- // padanie cisiel
- for (int r = VYSKA - 1; r > 0; r--)
- {
- for (int s = 0; s < SIRKA; s++)
- {
- if (r == VYSKA - 1) //padani na posledni radek, prvni pruchod cyklem, kontrolujeme kolize
- {
- if (matica[r][s] == '^') //pokud je znak ktery by jinak "padal" ta striska tak zbytek pruchodu cyklu preskocime
- continue;
- else if (matica[r][s] != ' ' && nasbiraneCislice[s] == '_') //dopadame na prazdne misto
- {
- if (matica[r][s] == cisliceReseni[cil][s]) //spravne cislo
- {
- nasbiraneCislice[s] = matica[r][s];
- }
- else //spatne cislo
- {
- nasbiraneCislice[s] = 'x';
- zivoty--;
- }
- }
- else if (matica[r][s] != ' ' && nasbiraneCislice[s] != '_') //dopadame na plne misto
- {
- if (nasbiraneCislice[s] == 'x') //dopadame na X
- {
- if (matica[r][s] == cisliceReseni[cil][s]) //a pada tam spravne cislo
- {
- nasbiraneCislice[s] = matica[r][s]; //tak se tam usadi
- }
- else //nepatri tam, X zustava
- {
- zivoty--;
- }
- }
- else //dopadame na 1 nebo 0
- {
- if (matica[r][s] != nasbiraneCislice[s]) //a je to neco opacneho a tedy spatneho
- {
- nasbiraneCislice[s] = 'x';
- zivoty--;
- }
- }
- }
- matica[r][s] = matica[r - 1][s]; //a vsechno z predposledniho redku spadne na posledni radek
- }
- else //ostatni radky normalne padaji
- {
- matica[r][s] = matica[r - 1][s];
- }
- }
- }
- //vyzkousim, jestli jsme poskladali cele cislo
- test = true;
- for (s = 0; s < SIRKA; s++)
- {
- if (nasbiraneCislice[s] != cisliceReseni[cil][s]) //pokud najdu na jediny odlisny znak od reseni, kontrolu rusim, nemusim dal prochazet
- {
- test = false;
- break;
- }
- }
- if (test == true) //poskladali jsme cele cislo
- {
- level++;
- system("cls");
- printf("\n\t\t\t\tBinary Hero");
- printf("\n");
- printf("\n\t\tgratuluji, pokracujes do kola cislo %d", level);
- //vyresetuju matici
- for (r = 0; r < VYSKA; r++)
- {
- for (s = 0; s < SIRKA; s++)
- {
- matica[r][s] = ' ';
- }
- }
- for (s = 0; s < SIRKA; s++)
- nasbiraneCislice[s] = '_';
- //vygeneruju nove cislo
- cil = rand() % 16;
- //vyresetuju zivoty
- zivoty = 3;
- //trochu zrychlim (o 0,05s)
- rychlost -= 50;
- //vyresetuju strisku
- riadok = VYSKA - 1;
- stlpec = 2;
- matica[riadok][stlpec] = '^';
- //dam 2s na precteni
- Sleep(2000);
- }
- else //bud pokracujeme dale nebo muzeme jeste skoncit na zivoty
- {
- // generovanie noveho riadku
- nahodnySloupec = rand() % 4;
- nahodnyZnak = rand() % 4;
- znakC = ' ';
- if (nahodnyZnak == 0)
- znakC = '0';
- if (nahodnyZnak == 1)
- znakC = '1';
- for (s = 0; s < SIRKA; s++)
- matica[0][s] = ' ';
- matica[0][nahodnySloupec] = znakC;
- // ovladani
- if (_kbhit())
- {
- znakI = _getch();
- matica[riadok][stlpec] = ' '; //smazu puvodni
- switch (znakI)
- {
- case 'a':
- stlpec = 0;
- riadok = VYSKA - 1;
- break;
- case 's':
- stlpec = 1;
- riadok = VYSKA - 1;
- break;
- case 'd':
- stlpec = 2;
- riadok = VYSKA - 1;
- break;
- case 'f':
- stlpec = 3;
- riadok = VYSKA - 1;
- break;
- case 'q':
- stopHry = true;
- break;
- case 'h':
- napoveda = true;
- zivoty--;
- break;
- default:
- break;
- }
- matica[riadok][stlpec] = '^'; //vykreslim novy
- }
- if (zivoty <= 0)
- stopZivoty = true;
- system("cls");
- if (stopHry == false && stopZivoty == false)
- {
- // vypis
- //vypsani toho co se ma hledat, zivotu a urovne
- printf("\t\t\tLevel %d\n", level);
- printf("\t\t\t%c # # %d\n", cislice[cil], zivoty);
- for (r = 0; r < VYSKA; r++)
- {
- printf("\t\t\t");
- for (s = 0; s < SIRKA; s++)
- {
- printf("%c ", matica[r][s]);
- }
- printf("\n");
- }
- printf("\t\t\t");
- for (int s = 0; s < SIRKA; s++)
- {
- if (napoveda == true) //pokud jsme stiskli napovedu, zobrazim na jedno bliknuti napovedu
- printf("%c ", cisliceReseni[cil][s]);
- else
- printf("%c ", nasbiraneCislice[s]);
- }
- napoveda = false; //a hned ji zrusim
- Sleep(rychlost);
- }
- }
- } while (stopHry == false && stopZivoty == false); //ukoncuje levely (resp. jen zaporne, pokud jsme prohrali)
- //pokud se dostaneme sem, znamena to ze nam bud dosly zivoty nebo jsme ukoncili hru
- if (stopZivoty == true) //dosly nam zivoty
- {
- system("cls");
- printf("\n\t\t\t\tBinary Hero\n\n");
- printf("\t\t\tDosly ti zivoty, jdes do hlavniho menu");
- Sleep(2000);
- }
- } while (stopHry == false); //ukoncuje hru
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement