Práce s INI soubory v Game makeru

Ostatní jazyky GameMaker Ostatní Práce s INI soubory v Game makeru

INI soubor slouží k tomu, abyste si do něj mohli ukládat například nejvyšší skóre, či jména hráčů, prostě různá data co souvisí s hrou (samozřejmě, není to speciální soubor pro Game Maker, ale využívá se docela často, nejvíce pro nastavení dat různých aplikací).

Dá se využít k plno věcem, výhodou INI souborů je, že i když hru ukončíte, údaje jsou v něm uložené, a dají se načíst například příští hru, narozdíl od proměnných, které existují jen po dobu hry.

V tomto tutoriálu vás naučím jak do INI souborů zapisovat, zároveň i jejich obsah vypisovat, tím se vaše hra může stát více atraktivní.

Takže dejme tomu, že máme hru ve které si potřebujeme uložit jméno hráče a nejlepší skóre.

Vytvoříme si nový objekt s názvem obj_ini, do Eventu nově vytvořeného objektu obj_ini, přidáme Event Create.

Do Eventu Create přidáme Action Execute Code(control->Code).

Otevře se nám okénko, kam budeme psát kód. Ještě před zápisem a výpisem z INI souboru musíme zjistit jméno hráče.

Takže do okénka napíšeme:

jmeno=get_string("Zadej své jméno.","");

Hned po spuštění hry to hráče vyzve k napsání jeho jména do menšího okénka, hráč ho napíše a zmáčkne OK, tím své jméno potvrdí a hráčovo jméno se nám uloží do lokální proměnné.

Už máme hráčovo jméno, tak si ho hned zapíšeme do INI souboru. Do okénka s kódem, kde už máme napsán kód pro zjištění hráčova jména připíšeme na další řádek:

ini_open("informace.ini");
ini_write_string("INFORMACE","JMENO",jmeno);
ini_close();

Rozebrání kódu: Nejdříve si otevřeme soubor s názvem informace.ini, soubor musí existovat a musí být ve složce s hrou!

Na dalším řádku zapíšeme do souboru hráčovo jméno, existují dva typy funkce pro zápis: ini_write_string a ini_write_real, my jsme použili 1.typ, protože slouží k zapsání textu, 2.typ slouží k zapsání čísel, to si ukážeme za chvíli na nejlepším skóre.

První parametr u funkce pro zápis, ať už 1. či 2.typu je sekce, druhý je klíč a třetí hodnota, pro zápis, čili jmeno tam jsme si uložili jméno hráče, zde je ukázka co je to sekce, klíč a hodnota.

[INFORMACE]-sekce

JMENO-klíč=Jan(nebo-li hodnota proměnné jmeno)

A na posledním řádku ini soubor zavřeme.

Tak a máme hotový zápis hráčova jména, takto by se ale formulář pro hráčovo jméno zobrazoval vždy při spuštění hry, takže to ošetříme tak, že pokud již klíč(jméno) v INI souboru existuje, tak se hráče ptát nebudeme a ani do INI souboru nic zapisovat nebudeme. Vrhneme se na to, změníme celý kód v Create, nový kód vypadá následovně:

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();
}

Rozebrání kódu: Nejdříve si INI soubor otevřeme, abychom z něj mohli načíst aktuální hodnoty, v proměnné nacteme máme uloženo jméno, pokud bylo zadáno, pokud ne, tak tam nemáme uloženo nic.

Dále zkontrolujeme, zda není načtená hodnota jména prázdná, pokud ano, tak vyvoláme okénko pro zadání jména a zapíšeme ho tam, celý kód pro získání jména a zápis do souboru je popsán výše. Jinak se nic nestane a soubor se akorát zavře.

Tím jsme vyřešili získání hráčova jména a zápis, dále pokud již jméno je uloženo v souboru, tak se nic nestane.

1.část máme hotovou, teď se vrhneme na zápis nejlepšího skóre.

Do objektu obj_ini, jeho Eventu Create a Action Execute code, kde již máme kód pro hráčovo jméno, přípíšeme a nový řádek:

skore=0;

Tím jsme definovali lokální proměnnou skore, která nám bude sloužit pro testování zápisu nejlepšího skóre.

Dále napíšeme zápis nejlepšího skóre, rovnou to ale ošetříme kontrolou, pokud je skóre větší než aktuální nejlepší skóre v souboru, tak ho zapíšeme, jelikož to budeme ale kontrolovat po celé trvání hry, přidáme do Eventu Event Other->Room end (vždy když, ukončíme room, tak se provede kontrola, případně zápis nového vyššího skóre, dal by se použít Event Step, ten by to ale kontroloval po celou dobu hry, což by bylo více náročné) a do Evetu Room end, Akci Execute Code(control->Code).

Otevře se nám okénko, do kterého budeme psát kód pro zápis nejlepšího skóre.

Připišme tedy do okénka s kódem 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();
}

Otevřeli jsme soubor informace.ini, do proměnné nacteme2 si načteme hodnotu aktuálního skóre. Zkontrolujeme, zda je načtené skóre menší než aktuální skóre ve hře, pokud ano, zapíšeme to aktuální.

Jak vidíme, zapisujeme pomocí funkce ini_write_real, jelikož skóre je číselné hodnoty. Více informací o tom, jak probíhá zápis a v čem se liší, najdete výše.

No a pokud je skóre v souboru vyšší, jak aktuální ve hře, tak jen soubor zavřeme.

Pro test si do objektu obj_ini přidáme dva Eventy Keyboard->Enter a Keyboard->Space, k oboum eventům přiradíme Action Execute code(control->Code).

Do okénka, které se nám otevře pro napsání kódu v Eventu Enter, napíšeme:

skore=20;

, do okénka v Eventu Space:

skore=50;

.

Spustíme hru, pokud máme jméno již zapsáno, tak ho nebudem psát, pokud ne tak do okénka napíšeme své jméno, potvrdíme tlačítkem OK.

Nejdříve zmáčkneme Enter a ukončíme hru, koukneme se do souboru informace.ini (je ve složce s hrou), a uvidíme že je klíč u sekce NEJSKORE 20.

Znovu spustíme hru a zmáčkneme Space (mezerník), hru opět ukončíme a kouknem se do informace.ini. Uvidíme, že klíč u sekce NEJSKORE je 50.

Tak a teď ještě zkusíme, jestli to opradu funguje tak, že se tam zapisuje jen nejlepší skóre. Spustíme hru a zmáčkneme Enter, tím se bude skóre rovnat 20. Hru ukončíme a koukneme se do informace.ini, uvidíme, že klíč u sekce NEJSKORE je 50, čili opravdu vyšší než 20.

Nyní už víte, jak na zápis hráčova jména a nejlepšího skóre.

Ještě Vás naučím jak vypisovat obsah INI souborů.

Přidáme do objektu obj_ini Event Draw, do Eventu Drawu Action Execute code(control->Code).

Do okénka, které se nám otevře, 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));

Rozebrání kódu: Otevřeme soubor informace.ini, do proměnné hracovojmeno si uložíme hodnotu z Sekce Informace a Klíče Jmeno.

Do proměnné nejlepsiskore si uložíme hodnotu z Sekce Informace a Klíče Nejskore, pak ho ještě zaokrouhíme, jinak by to dělalo problémy.

Soubor zavřeme a vypíšeme hráčovo jméno a nejlepší skóre(# je mezera).

Tak a už víte, jak na INI soubory, doufám že Vám tento tutoriál pomůže, dal mi docela práci. Pokud Vám něco není jasné, možná to pochopíte více z přioženého příkladu a pokud se Vám nezobrazují české znaky, vytvořte nový font, stistkněte tlačítko All a do Eventu Drawu Action Execute code přidejte

draw_set_font(font0);

 

Stáhnout

Staženo 336x (5.64 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal jackm18
Avatar
Autor se věnuje C++, Pythonu, Visual Basic Application...

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


 


Miniatura
Předchozí článek
Game Maker - Health Bar
Miniatura
Všechny články v sekci
GameMaker - Ostatní
Miniatura
Následující článek
Atmosféra v GM

 

 

Komentáře

Avatar
samo007
Redaktor
Avatar
samo007:

Skvelý návod :)

 
Odpovědět  +1 14.9.2012 16:09
Avatar
andrej200
Člen
Avatar
andrej200:

pomocí toho 3. kódu se soubor .ini vytvoří sám, protože pokud v tom souboru není zapsané jmnéno, tak se to na jméno zeptá a zapíše ho tam a tim vytvoří i ten soubor

možná to tak neni, ale ten .ini se mi sám vytvoří a funguje v poho :)

Odpovědět 14.12.2013 11:06
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
Neaktivní uživatel:

ten ini soubor je txt se zmněněnou koncovkou že,mám ho vložit přímo do složky s hrou nebo mám vytvořit podsložku,jestli ano,jak ji mám nazvat??

Odpovědět 19.4.2015 9:39
Neaktivní uživatelský účet
Avatar
ZbyStr
Člen
Avatar
Odpovídá na Neaktivní uživatel
ZbyStr:

Stačí ho dát jen do složky s hrou.

Odpovědět 14. února 13:55
Jen vyvolený dokáže na internetu najít pravdivou věc.
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.

Zobrazeno 4 zpráv z 4.