Sukūriau vaidmenų žaidimą „JavaScript“. Jūs taip pat galite. Štai kaip.

Taigi norite išbandyti ir sukurti žaidimą, bet esate šiek tiek įbauginti? Nesijaudink, aš taip pat buvau!

Aš bijojau, pavyzdžiui, naudoti daiktus. Jie buvo šis didelis baisus dalykas, kurį vėliau palikau. Bet dabar aš juos naudoju nuolat!

Aš eisiu jums per visus veiksmus, kuriuos atlikau, kad sukčiau savo „JavaScript“ vaidmenų žaidimą.

Štai mano žaidimas veikia „CodePen“. (Atminkite, kad jis dar nėra optimizuotas mobiliesiems įrenginiams):

Pirma ,išsirinkite savo žaidimo tašką. Ar tai galvosūkis? RPG? Hack & slash? Gerai, dabar pagalvokite apie techninius jo gaminimo sunkumus. Dėlionės žaidimui reikės daug sudėtingo „JavaScript“. „Hack & slash“ reikėtų atidžiai subalansuoti ir pan.

Be to, nuspręskite, ar tai yra naršyklės, ar mobilusis žaidimas, ar abu („žiniatinklio“ žaidimas).

Pavyzdžiui, mano žaidimas negali gerai tilpti į mobiliojo telefono ekraną, nes grotuvas turi 24 burtus. Tai nepatogu spustelėjus šiuos mažus mygtukus mažyčiame ekrane, todėl turėčiau iš naujo sukurti žaidimą mobiliesiems.

Antra , užsirašykite visus dalykus, kuriuos reikia užprogramuoti, kad iš tikrųjų sukurtų žaidimą. Man tai buvo:

  • inventorizacijos sistema
  • daiktų generatorius
  • žaidėjo stat sistema
  • taupymo sistema

Trečia , pradėkite kurti savo žaidimą spręsdami šias problemas po vieną.

Reikia pagalbos iš tikrųjų kuriant žaidimą?

Daug lengviau suskaidyti žaidimą į mažas užduotis. Kuriate ne žaidimą, o inventorizacijos sistemą. Tada kuriate kovinę sistemą. Ir taip toliau.

Jei jau nesiseka piešti ar nenorite praleisti mėnesius ar metus tam gerai, naudokite šiuos įrankius, kad sukurtumėte turtą, dėl kurio jūsų žaidimas atrodys gerai:

  • Game-Icons.net - šios piktogramos yra įdomios ir lengvai spalvinamos
  • „Open Game Art“ - gaukite puikių viešosios nuosavybės išteklių
  • Masinis nuotraukų dydžio keitimas - puikus įrankis, norint pasidaryti savo mažas piktogramas
  • CSS Sprite Generator - padeda jums sukurti CSS lenteles jūsų piktogramoms

Problemos, su kuriomis susidūriau, ir kaip jas išsprendžiau

Spriteheet

Ar planuojate savo žaidime turėti daugiau nei 20 vaizdų? Jei taip, nenorite padaryti 20 vaizdų su kiekvieno nuoroda. Galbūt nemanote, kad 20 vaizdų yra tiek daug, bet jei nuspręsite pridėti dar 50? Štai kur praverčia lentelės. Įdėkite keletą nuotraukų ant jų, nukopijuokite CSS failą į savo projektą ir tiesiog pridėkite klasę prie savo elemento, atitinkančio jūsų norimą vaizdą.

Žaidimo būsenos išsaugojimas

Ar norite, kad jūsų žaidimas būtų išsaugotas? Galite pasirinkti tarp naršyklės „LocalStorage“ ir daiktų saugojimo serveryje. Serveriai reikalauja galinių žinių. Jei tokių neturite, siūlau naudoti „LocalStorage“. Tai išsaugo žaidimą tol, kol vartotojas jo neištrina naudodamas kokį nors valymo įrankį. Štai kaip aš tai padariau:

Iš esmės, išsaugokite visus duomenis viename objekte, tada atnaujinkite elementus, kai jie yra įkeliami. Naudokite JSON striktrą ir analizuokite vėliau.

Moduliuokite savo kodą

Išsiaiškinkite, kurią dalį sunku užkoduoti ir kurias dalis moduliuoti. Klaidingai pradėjau sunkiai užkoduotus burtus, kurie greitai negražūs. Man reikėjo 24 iš šių funkcijų, kartu su 24 „ifCritical“ funkcijomis.

Dabar galite paklausti, kaip veikia antrasis burtas? Turiu funkcijų grotuvą „Attack“ (), kuris naudoja rašybos objektą dalykams atlikti:

  • Pirmiausia ji vykdo „update spells“ funkciją, kuri vadina burtus objektu. Tada burtas ima jūsų dabartinę statistiką ir paverčia jas tokiomis vertėmis kaip „žala“ ir „manos kaina“.
  • Jis patikrina, ar žala yra didesnė nei 0. Jei taip, padaro viršininkui žalos ir parodo žalą, kuri tai padarė, ir sumą. Tai daro ir daugumai kitų vertybių. Galima pagalvoti, kad didesnis nei nulis patikrinimas yra nenaudingas, bet dar kartą pagalvosite, kai žaidime sakoma, kad padarėte 0 žalos ir atstatėte 0 maną.
  • Tada ji vykdo pasirinktinę funkciją, jei burtas ją turi. Tai gali būti naudojama burtams sukurti specialiuosius efektus, kurių neįmanoma atlikti naudojant pagrindinę atakos funkciją.

Žaidimo kilpa

Man žaidimo ciklas tikrina ir atnaujina dalykus: žaidėjų statistiką, ar žaidėjas mirė, ar žaidėjas ką tik išsilygino, ar viršininkas mirė ir pan.

Šį turėsite išsiaiškinti patys. Manau, kad tai gera mokymosi patirtis. Pagalvokite, ką ir kada reikia atlikti patikrinimus ir atnaujinimus. Pavyzdžiui, patikrinęs lygį, aš jį nustatiau veikti kas 20 sekundžių, nes išlyginimas nėra toks didelis dalykas.

Bet tada aš taip pat turiu Boso mirties patikrinimą, kuris atliekamas kas sekundę po mūšio pradžios. Kodėl? Taigi žaidėjams nereikia laukti 20 sekundžių, kol bosas mirs.

Kai kurie kiti dalykai net neturi būti kilpiniai. Funkcijas galima tiesiog iškviesti, kai jų reikia. Paimkime, pavyzdžiui, mano atnaujinimo rašybos funkciją. Tai vadinama tik tada, kai žaidėjas naudoja burtą.

Keli dalykai, kuriuos išmokau:

  • Objektai yra geri. Tokiu būdu, kai turite išsaugoti duomenis, jums tiesiog reikia išsaugoti objektą, o ne 50 atskirų kintamųjų.
  • Visada nustatykite pertraukas ir intervalus kaip kintamuosius, kad vėliau juos būtų galima išvalyti - nebent tai yra nuolatinis poveikis ir esate tikri, kad niekada nereikės jų išvalyti.
  • Vienas didelis „javascript“ failas gali būti ne išmintinga mintis. „CodePen“ leidžia naudoti tik vieną „JavaScript“ failą, tačiau idealiu atveju turėtumėte viską suskirstyti į modulius.
  • Jei nesijaudinate dėl našumo, galite tiesiog nukopijuoti ir įklijuoti objektą, kai jį reikia atnaujinti - nereikia atskirai atnaujinti pusės reikšmių. Jei objektas yra didžiulis, jūs netgi galite apibrėžti objektą pirmiausia kaip kintamąjį, pvz .: var objektas; tada sukurkite ją naudodamiesi kita funkcija, kai norite ją atnaujinti. Aš tai padariau savo kerais. Kiekvieną kartą, kai žaidėjas užburia, funkcija „updateSpell ()“ pirmiausia vėl apibrėžia burtų objektą, apskaičiuoja visus nuostolius ir statistiką, o tada paleidžia burtą.

Juokingi dalykai, dėl kurių sukompromitavau:

  • Įgūdžių manos išlaidos priklauso vienam boso lygiui, nes jei jie būtų žaidėjo lygmenyje, nubaustų žaidėjus už aukštesnį lygį. Tai taip pat gerokai apsunkino aukštesnio lygio viršininkus, kas man patiko.
  • Elementai yra kuriami su visa statistika, tačiau jie nerodomi, jei jie yra 0. Tokiu būdu man nereikia tikrinti, ar tai nėra apibrėžta, ir aš galiu vengti rodyti statistikos, jei ji sugeneruota kaip 0. Dvigubai laimėk!
  • Turiu daug supaprastintų mėgėjų ir debuffų. Iš esmės yra var buffStat, nerfStat, totalStat ir stat. Taigi mėgėjai ar debuffai niekada nekraunami.
  • Turint bosus, nerf stat įgūdžiai iš tikrųjų nenusileidžia iki 0. Tai yra daug sudėtingesnė nei tai. Jis nerfs statistiką iki 9999999, tada patikrina, ar jis yra mažesnis nei 0. Jei taip, jis nustato jį į 0. Taigi, jei jums pavyks pasiekti lygį, kuriame jūsų statistika yra milijardai, man gali tekti pridėti daugiau nuliai.

Visa tai manė, kad turėčiau planuoti šiek tiek toliau, net jei tik kuriu įdomų projektą, norėdamas išplėsti savo įgūdžius.

Be to, dabar aš daug geriau suprantu, kaip atsiranda klaidų: kartais jūs nesuvokiate visų krašto atvejų, kai viskas gali nulaužti kelią. Ir tada klaidos įkanda.

Klaidos ir išnaudojimai

Šis mane stebino ir šiek tiek išgąsdino. Negalėjau patikėti, kad mano tobulame meno kūrinyje yra klaidų!

Gerai, aš šiek tiek perdedu. Bet aš nuvertinau daugybę dalykų, kurie gali suklysti, man to net nesuvokiant.

Čia yra keletas klaidų ir išnaudojimų, kurie nukirto virš mano galvos:

  1. Kovodamas su viršininku galėtum pakeisti viršininko lygį ir tokiu būdu gauti geresnių grobio lašų
  2. „HP“ ir „Mana“ barai kada nors perpildytų
  3. Galite pulti viršininką dar neprasidėjus mūšiui. Kalbėk apie čiulpiamą smūgį!
  4. „Mana“ gali tapti neigiama, o tai neleido atlikti net pagrindinių atakų, o tai yra pagrindinis būdas atkurti maną.
  5. Gydymas laikinai padidino jūsų maksimalią sveikatą.
  6. Vienas burtas iš tikrųjų dažniausiai nebuvo spustelėtas dėl CSS problemos
  7. Užpuolimas, kai nesi kovoje, užburia begalinį atvėsimą

Visa tai skamba siaubingai, tiesa? MMORPG šie dalykai būtų piktnaudžiaujami nuo pat pirmos dienos ir viską sugadintų!

Geros naujienos yra tai, kad dauguma jų buvo lengvai pataisomos - paprastai su mažiau nei 1 kodo eilute.

Tačiau dėl kitų klaidų man reikėjo visiškai perdaryti visą sistemą. Naudodamas burtų sistemą, nuo to, kad reikėjo parašyti po 3 ištisas funkcijas kiekvienam burtui, reikėjo tik mažo objekto, kurį redaguoti reikia tik kelias sekundes.

Vėlgi, čia yra mano žaidimas, jei norite jį išbandyti (atkreipkite dėmesį, kad jis nėra optimizuotas mobiliesiems įrenginiams):

Štai kodas (kuris taip pat yra atviro kodo ir kurį galima redaguoti „CodePen“):

RobertSkalko / LOOT-RPG-v1.0

LOOT-RPG-v1.0 - nužudyk viršininkus, gauk LOOT! github.com

Turėkite omenyje, kad esu pradedantysis (tik 2 mėnesius planuoju), todėl kai kuriuos mano sprendimus galima patobulinti. Tikimės, kad aš jums suteikiau bent jau pagrindus, kad galėtumėte pradėti!

Smagiai kurkite savo „Javascript“ žaidimą!