Konvence (nejen) v Game Makeru

Vystavil PepiCzech

07.04.2010

6
Konvence jsou nepsaná pravidla a doporučení, která je obecně dobré/vhodné dodržovat. Jejich dodržování není povinné, dokonce na ně neexistuje ani žádná závazná norma, ale usnadní Vám život, třeba když se po delším čase vrátíte ke staršímu projektu nebo pokud projekt po někom přebíráte.


Tento soupis konvencí jsem doplnil o pár tipů, které jsem během mé programovací kariéry shledal užitečnými. Samozřejmě nic nebrání nadefinovat si konvence vlastní, důležité je se jimi řídit. Pokud použijeme konvenční styl zápisu, vyzná se v něm pak kromě nás ještě někdo jiný. Což se může hodit.

Jak na přehledný kód?



Proměnné a jejich názvy


spr_hlavni_hrdina, spr_pomocnik, spr_zbran označují proměnné do kterých se ukládají sprity hlavního hrdiny, jeho pomocníka a zbraně.
Obdobně:
obj_hrac, obj_zbran, obj_lektvar označují objekty – na první pohled tak v kódu poznáme zde se jedná o objekt, sprite, zvuk atd.
Dodržujme srozumitelné jednotné pojmenování proměnných.

Prefixy (předpony) pro pojmenování si lze vytvořit i vlastní, já sám s oblibou používám:
o_ nebo obj_ pro objekty
spr_ pro sprity (png soubory s 256stupni průhlednosti)
s_ nebo snd_ pro zvuky (typicky wav formát)
mus_ pro hudbu na pozadí (typicky mp3 formát)
bg_ pro pozadí
room_ nebo r_ pro místnosti
scr_ pro skritpy
tile_ nebo t_ pro tileset

tyto prefixy umožňují na první pohled odhalit o co že se vlastně v kódu jedná.

U vymýšlení názvů proměnných neexperimentujeme. Proměnná by měla být pokud možno krátká - budeme s ní pracovat a párkrát ji určitě do kódu naťukáme. Proměnná by měla být jednoznačná - výstižná, ale přitom srozumitelná:
např. muze_strilet nebo can_shoot - tak takovou proměnnou ano, ale třeba can už ne (co to je? k čemu se to vztahuje?) a cn jako zkratka pro can už rozhodně ne, potom v tom je binec ;)

Diplomaticky řečeno - proměnná by měla být krátká, ale tak dlouhá, aby byla jednoznačná, nezaměnitelná a vše vysvětlující :)

Názvy by neměly obsahovat mezery (ty lze nahradit podtržítkem), diakritiku, speciální znaky ani číslo na začátku.

Namísto desetinné čárky se zapisuej desetinná tečka. Takže hodnotu 1,6 zapíšeme jako 1.6

Veškeré příkazy ukončujeme středníkem na konci řádku. To, že GM je zvládá zpracovat i neukončené příkazy, neznamená, že se tak mají zapisovat.


Nemícháme české a anglické názvy dohromady - to že to není "navenek" vidět, není oprávnění to takto zapisovat. Kdo si pak má vzpomenou, jestli se ta proměnná jmenovala stity_actual nebo shields_aktualne? Jazyky nemíchat.

To stejné pak platí i pro texty a třeba menu - máloco zatahá za oko tak jako "hrát hru", "nastavení", "credist" a "quit".

Optické členění kódu


V kódu umisťujeme logicky mezery, používáme odřádkování, odsazení.


if hloubka_ponoru = 1
{
draw_sprite(spr_ponorka, -1, x, y);
draw_circle(x, y, 300, 1);
}

Pokud máme složitější kód dodržujeme odsazení podle logických bloků.


Kód shlukujeme do bloků. Pro blok slouží buď ikonky fialových trojbokých zarážek nebo se blok zapisuje jako kód ve složených závorkách {kód umístěný do bloku;}

Komentáře ke kódu


Kód si průběžně komentujeme.
Pro jednořádkový komentář slouží znaky // vše co je za dvojicí lomítek na jednom řádku, program ignoruje a nám umožní orientaci.
// náš jednořádkový komentář


Pro víceřádkové komentáře slouží zápis
/* náš víceřádkový komentář,
který si můžeme dovolit
rozepsat na více řádků,
protože vše co je mezi hvězdičkami a lomítky program
jednoduše ignoruje
*/

vše co je mezi znaky /* a */ program ignoruje. Tento zápis umožňuje vytvářet i delší, strukturované komentáře.

Za spoustu tipů a poznatků děkuji chylexovi, článek je dobrou polovinou i jeho dílem.

Další tipy budou průběžně doplňovány. Máte vlastní? Podělte se v komentářích. Zároveň tímto děkuji autorům komentářů, dle jejich poznatků a postřehů je článek aktualizován.







Hodnocení +36Líbí
Přečteno 1095-krát

Komentáře

Přidat nový



Pro přispívání musíte být přihlášen


Zapsal Bullet catcher - 21.04.2010 16:16



Tak například v PHP to dělám, takže o to nejde.



Zapsal keksa - 20.04.2010 21:41



Bullet catcher: řeknu ti to takhle: gml přímo nevyžaduje ukončování řádků středníkem, ale v každém programovacím jazyku je to vyžadováno a pokud tam nebude tak se ti program nezkompiluje/nespustí, takže je lepší si na to zvyknout už teď, než na to potom zapomínat u jiných prog.jazyků



Zapsal Bullet catcher - 20.04.2010 21:03



V čem to je potom jiné, když se píše středník nebo ne? Myslím pro GM, napsali jsme, že se mu to asi nelíbí. Stručně někdo prosím napište proč :)



Zapsal velda898 - 07.04.2010 16:46



Skvělej článek. Ale já mám osobně hodně problém ho dodržovat. ale musím říct že se lepším. ale // a /* */ používám jenom na dektivování nějkýho příkazu když si nejsu jistej jestli ho ještě budu potřebovat.
No co můžu doporučit já krom toho co je víš psát podmínku se závorkama:
if (hloubka_ponoru = 1)
{
protože pokud vím tak jedině pak stačí dát pro negaci vykřičník a je to i přehlednější. ;-)



Zapsal bildo - 07.04.2010 08:01



Pekny clanek, pro novacky a mozna i nektere pokrocile se bude urcite hodit. Ja sam se snazim delal takhle, sice nekdy v navalu mnozstvi napadu na kod na to trosku zapomenu, ale jinak se snazim mit kod prehledny. :)



Zapsal Matt Samyel - 07.04.2010 06:47



Dobrý, :) sám to takhle dělám, akorát ty názvy proměnnejch vymejšlim úplně špatně :D
Ještě bych doplnil, že názvy by neměly obsahovat mezery(nahradit podtržítkem), diakritiku, speciální znaky ani číslo na začátku :) A že desetinný čísla se píšou s tečkou, ne s čárkou :)




Poslední komentáře

Sousední akvárko

Nejčtenější

Nejlepší

Web Kreveta.net je unikátní sbírkou článků mapují proces tvorby her. Vedle návodů naleznete v krevetím akvárku i rozhovory s vývojáři, recenze, soutěže. Portál Kreveta.net připravují (řazeno abecedně): Akhera, Banane4joy, Bullet_catcher, Burák, Fire.js, Ikkju, Izual, Likandro, Makan, PepiCzech, StorN, Tior.
Akvárko vymaloval Tior, o chod filtrace se stará StorN (design a kód).
Copyright © 2010 Kreveta.net. Všechna práva vyhrazena.