Tvoríme hru had v jazyku C - 1.Diel
Zdravím, rozhodol som sa urobiť tutoriál na to, ako si vytvoriť hru had v klasickom jazyku C. V tomto prvom diele si vytvoríme funkcie, štruktúry, nejaké premenné atď.
Takže, čo ako prvý budeme potrebovať? Tak určite nejaké vývojové prostredie (IDE). Trochu nervy, kávičku a samozrejme niečo na jedenie. : P
Ako prvý si vytvoríme nový projekt, nazveme ho treba "Hra had". Vytvorí sa nám nový projekt so súborom main.c.
Toho si zatiaľ nebudeme všímať a vytvoríme si ďalší súbor a nazveme ho "FUNKCIE.H". Do neho vložíme základné funkcie, ktoré aplikácie bude potrebovať. Tými sú funkcie na vymazanie obrazu, súradnice, delay, MyGetch, a samozrejme nejaké tie farbičky. Ja už mám svoj súbor FUNKCIE.H tak vyberiem, čo bude potrebné.
// funkce.h #include <stdio.h> #include <math.h> #include <stdlib.h> #include <windows.h> #include <time.h> #include <conio.h> // hlavičkové soubory, které budeme potřebovat void vymaz(); // funkce pro vymazání obrazu funguje stejně jako system("cls"); void gotoxy(int, int); // souřadice void barva(int); // nějaké ty barvičky void delay(double ms); // delay (pauzování aplikace na milisekundy) int MyGetch (void); // MyGetch vstup kláves void vymaz() { 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); } void gotoxy(int x, int y) { COORD point; point.X = x; point.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point); } void delay(double ms) { clock_t End = (clock_t) (ms + clock()); while (End > clock()); } int MyGetch (void) { int Ret = getch(); if ((!Ret || Ret == 0xE0) && kbhit()) Ret = 256 + getch(); return Ret; } void barva(int color) { switch (color) { case -1: /* Cerna na Cernem */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0); break; case 0: /* Bila na Cerne */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); break; case 1: /* Cervena na Cerne */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED); break; case 2: /* Zelena na Cerne */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; case 3: /* Zluta na Cerne */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); break; default : /* Bila na Cerne */ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); break; } }
Tieto funkcie nám budú zatiaľ stačiť a vložíme ich teda do súboru FUNKCIE.H. Do súboru main.c pripojíme náš súbor FUNKCIE.H.
#include "funkce.h"
A skúsime, či naše funkcie fungujú (mali by).
#include "funkce.h" int main() { gotoxy(10,10); barva(2); printf("Hello world!\n"); return 0; }
Výsledok by mal vyzerať takto:
Ak áno, všetko je v poriadku (delay aj mygetch funkcie na 100%) . No a ak vám už toto nefunguje tak máte smolu a budete mi musieť napísať do komentárov, čo vám nefunguje.
Ďalej si do súboru main.c pridáme nejaký titulok. Trebárs Môj prvý Snake.
#include "funkce.h" int main() { SetConsoleTitle("Muj Prvni Snake!"); return 0; }
Tak teraz vytvoríme ďalší súbor had.h rovnakým spôsobom, ako sme robili FUNKCIE.H. Vytvoríme nejaké funkcie v súbore had.ha zadefinujeme si nejaké potrebné veci.
#include "funkce.h" #define START_DELKA_HADA 4 /* velikost hada pri vykresleni */ #define START_X 25 /* startovni souradnice hada na ose X */ #define START_Y 12 /* startovni souradnice hada na ose Y */ #define RADKY 25 /* pocet radku v hracim poli */ #define SLOUPECKY 80 /* pocet sloupecku v hracim poli */ void RAM_ZED(); void vykresli_hada_start(void); void pohybuj_hada(); void vykresli_hlavicku(void); void smaz_posledni(void); void posun_hodnoty(void); void bodiky(); void vypis_bodiky(); void novy_mysky(void); void konec(int udalost); void exit_fce(void);
Teraz chcem upozorniť! V súbore main.h zmeníme FUNKCIE.H na had.hav súboru had.h pripojíme hlavičkový súbor FUNKCIE.H!
Takže tu snáď nie je čo vysvetľovať, naincludujeme si FUNKCIE.H nadefinujeme nejaké konštanty a vytvoríme si funkcie. Ich telá dopíšeme nabudúce, vysvetlíme si, čo znamenajú:
- RAM_ZED takhle funkcie vykreslí proste rámik tak v poli tak barvičkama.
- vyjresli_hada_start to je snáď jasné
- pohybuj_hada ...
- vykresli_hlavičku
- smaz_posledni, táto funkcia vlastne odmazávať poslednú časť hada aby nebol väčší aj bez žrania myšiek
- posun_hodnoty ... posunie hada
- Bodíky
- vypis_bodiky - vypíše koľko máme bodov
- novy_mysky - vlastne vykreslí nový myši čo budeme žrať
- koniec
- funkcie na ukončenie
No tak si svoje projekty uložte pokračovanie nabudúce, nemám rád zdĺhavé články