Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

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

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

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


 

Všechny články v sekci
Zdrojákoviště jazyka C - Pokročilé konstrukce
Článek pro vás napsal Зайчик
Avatar
Uživatelské hodnocení:
3 hlasů
Коммунизм для нашего будущего!
Aktivity