Tvoříme hru had v jazyce C - 1.Díl
Zdravím, rozhodl jsem se udělat tutoriál na to, jak si vytvořit hru had v
klasickém jazyce C. V tomto prvním díle si vytvoříme funkce, struktury,
nějaké proměnné atd.
Takže, co jako první budeme potřebovat? Tak určitě nějaké vývojové
prostředí (IDE). Trochu nervy, kafíčko a samozřejmě něco k jídlu.
Jako první si vytvoříme nový projekt, nazveme ho třeba "Hra had". Vytvoří se nám nový projekt se souborem main.c.

Toho si prozatím nebudeme všímat a vytvoříme si další soubor a nazveme ho "funkce.h". Do něj vložíme základní funkce, které aplikace bude potřebovat. Těmi jsou funkce na vymazání obrazu, souřadnice, delay, MyGetch, a samozřejmě nějaké ty barvičky. Já už mám svůj soubor funkce.h tak vyberu, co bude zapotřebí.
// 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; } }
Tyto funkce nám budou prozatím stačit a vložíme je tedy do souboru funkce.h. Do souboru main.c připojíme náš soubor funkce.h.
#include "funkce.h"
A zkusíme, zda naše funkce fungují (měly by).
#include "funkce.h" int main() { gotoxy(10,10); barva(2); printf("Hello world!\n"); return 0; }
Výsledek by měl vypadat takto :

Pokud ano, vše je v pořádku (delay i mygetch funkce na 100%) . No a pokud vám už tohle
nefunguje tak máte smůlu a budete mi muset napsat do komentářů, co vám
nefunguje.
Dále si do souboru main.c přidáme nějaký titulek. Třeba Můj první Snake.
#include "funkce.h" int main() { SetConsoleTitle("Muj Prvni Snake!"); return 0; }

Tak nyní vytvoříme další soubor had.h stejným způsobem, jako jsme dělali funkce.h. Vytvoříme nějaké funkce v souboru had.h a nadefinujeme si nějaké potřebné věci.
#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);
Teď chci upozornit! V souboru main.h změníme funkce.h na had.h a v souboru
had.h připojíme hlavičkový soubor funkce.h!
Takže tady snad není co vysvětlovat, naincludujeme si funkce.h nadefinujeme nějaké konstanty a vytvoříme si funkce. Jejich těla dopíšeme příště, vysvětleme si, co znamenají:
- RAM_ZED takhle funkce vykreslí prostě rámeček jak v poli tak barvičkama.
- vyjresli_hada_start to je snad jasné
- pohybuj_hada...
- vykresli_hlavičku
- smaz_posledni, tato funkce vlastně odmazává poslední část hada aby nebyl větší i bez žraní myšek
- posun_hodnoty ... posune hada
- bodiky
- vypis_bodiky - vypíše kolik máme bodů
- novy_mysky - vlastně vykreslí nový myši co budeme žrát
- konec
- funkce na ukončení
No tak si svoje projekty uložte pokračování příště,
nemám rád zdlouhavé články