Práca s INI súbory v Game Maker
INI súbor slúži na to, aby ste si do neho mohli ukladať napríklad najvyššie skóre, či mená hráčov, jednoducho rôzne dáta čo súvisí s hrou (samozrejme, nie je to špeciálny súbor pre Game Maker, ale využíva sa celkom často, najviac pre nastavenie dát rôznych aplikácií ).
Dá sa využiť na plno veciam, výhodou INI súborov je, že aj keď hru ukončíte, údaje sú v ňom uložené, a dajú sa načítať napríklad budúci hru, narozdiel od premenných, ktoré existujú len po dobu hry.
V tomto tutoriále vás naučím ako do INI súborov zapisovať, zároveň aj ich obsah vypisovať, tým sa vaša hra môže stať viac atraktívne.
Takže dajme tomu, že máme hru v ktorej si potrebujeme uložiť meno hráča a najlepšie skóre.
Vytvoríme si nový objekt s názvom obj_ini, do Eventu novovytvoreného objektu obj_ini, pridáme Event Create.
Do Eventu Create pridáme Action Execute Code (Control-> Code).
Otvorí sa nám okienko, kam budeme písať kód. Ešte pred zápisom a výpisom z INI súboru musíme zistiť meno hráča.
Takže do okienka napíšeme:
jmeno=get_string("Zadej své jméno.","");
Hneď po spustení hry to hráčov vyzve k napísaniu jeho mena do menšieho okienka, hráč ho napíše a stlačí OK, tým svoje meno potvrdí a hráčovo meno sa nám uloží do lokálnej premennej.
Už máme hráčovo meno, tak si ho hneď zapíšeme do INI súboru. Do okienka s kódom, kde už máme napísaný kód pre zistenie hráčovho mená pripíšeme na ďalší riadok:
ini_open("informace.ini"); ini_write_string("INFORMACE","JMENO",jmeno); ini_close();
Rozobratie kódu: Najskôr si otvoríme súbor s názvom informace.ini, súbor musí existovať a musí byť v priečinku s hrou!
Na ďalšom riadku zapíšeme do súboru hráčovo meno, existujú dva typy funkcie pre zápis: ini_write_string a ini_write_real, my sme použili 1.Typ, pretože slúži na zapísanie textu, 2.Typ slúži na zapísanie čísel, to si ukážeme za chvíľu na najlepšom skóre.
Prvý parameter u funkcie pre zápis, či už 1. alebo 2. typu je sekcia, druhý je kľúč a tretí hodnota, pre zápis, čiže jmeno tam sme si uložili meno hráča, tu je ukážka čo je to sekcia, kľúč a hodnota.
[INFORMÁCIE] - sekcia
Meno- kľúč = Jan (alebo ak je hodnota premennej meno)
A na poslednom riadku ini súbor zatvoríme.
Tak a máme hotový zápis hráčovho mena, takto by sa ale formulár pre hráčovo meno zobrazoval vždy pri spustení hry, takže to ošetríme tak, že ak už kľúč (meno) v INI súboru existuje, tak sa hráča pýtať nebudeme a ani do INI súboru nič zapisovať nebudeme. Vrhneme sa na to, zmeníme celý kód v Create, nový kód vyzerá nasledovne:
ini_open("informace.ini"); nacteme=ini_read_string("INFORMACE","JMENO",""); if(nacteme="") { jmeno=get_string("Zadej své jméno.",""); ini_write_string("INFORMACE","JMENO",jmeno); ini_close(); } else { ini_close(); }
Rozobratie kódu: Najskôr si INI súbor otvoríme, aby sme z neho mohli načítať aktuálnej hodnoty, v premennej načíta máme uložené meno, ak bolo zadané, ak nie, tak tam nemáme uložené nič.
Ďalej skontrolujeme, či nie je načítaná hodnota mená prázdna, ak áno, tak vyvoláme okienko pre zadanie mena a zapíšeme ho tam, celý kód pre získanie mena a zápis do súboru je popísaný vyššie. Inak sa nič nestane a súbor sa akurát zavrie.
Tým sme vyriešili získanie hráčovho mená a zápis, ďalej ak už meno je uložené v súbore, tak sa nič nestane.
1.časť máme hotovú, teraz sa vrhneme na zápis najlepšieho skóre.
Do objektu obj_ini, jeho Eventu Create a Action Execute code, kde už máme kód pre hráčovo meno, pripíše a nový riadok:
skore=0;
Tým sme definovali lokálnu premennú skore, ktorá nám bude slúžiť pre testovanie zápisu najlepšieho skóre.
Ďalej napíšeme zápis najlepšieho skóre, rovno to ale ošetríme kontrolou, ak je skóre väčší ako aktuálna najlepšie skóre v súbore, tak ho zapíšeme, pretože to budeme ale kontrolovať po celej trvania hry, pridáme do Eventu Event Other-> Room end (vždy keď, ukončíme room, tak sa vykoná kontrola, prípadne zápis nového vyššieho skóre, dal by sa použiť Event Step, ten by to ale kontroloval po celú dobu hry, čo by bolo viac náročné) a do evet Room end, Akciu Execute Code (Control-> code).
Otvorí sa nám okienko, do ktorého budeme písať kód pre zápis najlepšieho skóre.
Pripíšte teda do okienka s kódom toto:
ini_open("informace.ini"); nacteme2=ini_read_real("INFORMACE","NEJSKORE",""); if(nacteme2<skore) { ini_write_real("INFORMACE","NEJSKORE",skore); ini_close(); } else { ini_close(); }
Otvorili sme súbor informace.ini, do premennej nacteme2 si načítame hodnotu aktuálneho skóre. Skontrolujeme, či je načítané skóre menšie ako aktuálne skóre v hre, ak áno, zapíšeme to aktuálne.
Ako vidíme, zapisujeme pomocou funkcie ini_write_real, pretože skóre číselné hodnoty. Viac informácií o tom, ako prebieha zápis a v čom sa líšia, nájdete vyššie.
No a ak je skóre v súbore vyššia, ako aktuálna v hre, tak len súbor zatvoríme.
Pre test si do objektu obj_ini pridáme dva Eventim Keyboard-> Enter a Keyboard-> Space, k obom eventom priradíte Action Execute code (Control-> Code).
Do okienka, ktoré sa nám otvorí pre napísanie kódu v Eventu Enter, napíšeme:
skore=20;
, Do okienka v Eventu Space:
skore=50;
.
Spustíme hru, ak máme meno už zapísané, tak ho nebudem písať, ak nie tak do okienka napíšeme svoje meno, potvrdíme tlačidlom OK.
Najskôr stlačíme Enter a ukončíme hru, pozrieme sa do súboru informace.ini (je v zložke s hrou), a uvidíme že je kľúč u sekcia NEJSKORE 20.
Znovu spustíme hru a stlačíme Space (medzerník), hru opäť ukončíme a pozri sa do informace.ini. Uvidíme, že kľúč u sekcia NEJSKORE je 50.
Tak a teraz ešte skúsime, či to opradu funguje tak, že sa tam zapisuje len najlepšie skóre. Spustíme hru a stlačíme Enter, tým sa bude skóre rovnať 20. Hru ukončíme a pozrieme sa do informace.ini, uvidíme, že kľúč u sekcia NEJSKORE je 50, čiže naozaj vyšší ako 20.
Teraz už viete, ako na zápis hráčovho mena a najlepšieho skóre.
Ešte Vás naučím ako vypisovať obsah INI súborov.
Pridáme do objektu obj_ini Event Draw, do Eventu draw Action Execute code (Control-> Code).
Do okienka, ktoré sa nám otvorí, napíšeme:
ini_open("informace.ini"); hracovojmeno=ini_read_string("INFORMACE","JMENO",""); nejlepsiskore=ini_read_real("INFORMACE","NEJSKORE",""); ceil(nejlepsiskore); ini_close(); draw_text(x,y,"Hráčovo jméno:"+string(hracovojmeno)+"#"+"Nejlepší skóre:"+string(skore));
Rozobratie kódu: Otvoríme súbor informace.ini, do premennej hracovojmeno si uložíme hodnotu z Sekcia Informácie a Kľúče Jmeno.
Do premennej nejlepsiskore si uložíme hodnotu z Sekcia Informácie a Kľúče Nejskore, potom ho ešte zaokrouhíme, inak by to robilo problémy.
Súbor zatvoríme a vypíšeme hráčovo meno a najlepšie skóre (# je medzera).
Tak a už viete, ako na INI súbory, dúfam že Vám tento tutoriál pomôže, dal mi celkom prácu. Ak Vám niečo nie je jasné, možno to pochopíte viac z přioženého príkladu a pokiaľ sa Vám nezobrazujú slovenské znaky, vytvorte nový font, vykonaní predchádzajúcich krokov stlačte All a do Eventu Draw Action Execute code pridajte
draw_set_font(font0);
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 350x (5.64 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker