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

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.

Nový projekt v céčku - Zdrojákoviště jazyka C - Pokročilé konštrukcia

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:

Test funkcií pre hru had v céčku - Zdrojákoviště jazyka C - Pokročilé konštrukcia

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;
}
Môj prvý had v céčku - Zdrojákoviště jazyka C - Pokročilé konštrukcia

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

  1. RAM_ZED takhle funkcie vykreslí proste rámik tak v poli tak barvičkama.
  2. vyjresli_hada_start to je snáď jasné
  3. pohybuj_hada ...
  4. vykresli_hlavičku
  5. smaz_posledni, táto funkcia vlastne odmazávať poslednú časť hada aby nebol väčší aj bez žrania myšiek
  6. posun_hodnoty ... posunie hada
  7. Bodíky
  8. vypis_bodiky - vypíše koľko máme bodov
  9. novy_mysky - vlastne vykreslí nový myši čo budeme žrať
  10. koniec
  11. funkcie na ukončenie

No tak si svoje projekty uložte :) pokračovanie nabudúce, nemám rád zdĺhavé články :)


 

Všetky články v sekcii
Zdrojákoviště jazyka C - Pokročilé konštrukcia
Článok pre vás napísal Зайчик
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Коммунизм для нашего будущего!
Aktivity