Tvoříme hru had v jazyce C - 1.Díl

C++ Pokročilé konstrukce Zdrojákoviště 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. :P

Jako první si vytvoříme nový projekt, nazveme ho třeba "Hra had". Vytvoří se nám nový projekt se souborem main.c.

Nový projekt v céčku

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 :

Test funkcí pro hru had v céčku

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;
}
Můj první had v céčku

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í:

  1. RAM_ZED takhle funkce vykreslí prostě rámeček jak v poli tak barvičkama.
  2. vyjresli_hada_start to je snad jasné
  3. pohybuj_hada...
  4. vykresli_hlavičku
  5. smaz_posledni, tato funkce vlastně odmazává poslední část hada aby nebyl větší i bez žraní myšek
  6. posun_hodnoty ... posune hada
  7. bodiky
  8. vypis_bodiky - vypíše kolik máme bodů
  9. novy_mysky - vlastně vykreslí nový myši co budeme žrát
  10. konec
  11. funkce na ukončení

No tak si svoje projekty uložte :) pokračování příště, nemám rád zdlouhavé články :)


 

  Aktivity (2)

Článek pro vás napsal Зайчик
Avatar
Коммунизм для нашего будущего!

Jak se ti líbí článek?
Celkem (3 hlasů) :
4.666674.666674.666674.666674.66667


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!