Maendeleo ya mkakati wa hatua kwa hatua. Kuendeleza mkakati hatua kwa hatua. Kwa kazi ya kujitegemea

theme_park:
Tutahitaji:
sprite ya ujenzi
menyu ya sprite
SPRITE ZA VIFUNGO MBALIMBALI KAMA:
srite na maandishi (ujenzi, ujenzi, ujenzi, nk)
dirisha inayoonekana
kuchora jengo,
1) tutaongeza wengine wenyewe
2) neno bandia - iliyoundwa na mimi mwenyewe, kwa sababu tutahitaji kuighushi ili kuendana na chanzo chetu)
IIlet tuanze:
1) tengeneza kila kitu kilichoandikwa kwa nukta I isipokuwa 1)
Wacha tuunde kibadilishaji cha kimataifa kinachoitwa pesa, weka kiasi chochote cha pesa cha awali
Pia tutaunda kipengee cha kipanya na kibodi
Hebu tuunde maandishi, tuyaite maelezo, tuunde tukio la kila mara, na tuunde kitendo ndani yake:
chagua habari katika uteuzi wa kitendo chagua maandishi kwenye maandishi andika hivi:
"pesa: " &(kimataifa("fedha".
2) ongeza menyu, kazi kuu ya menyu sio kuingilia kati, lakini kusaidia mchezaji kuzunguka (inawezaje kuingilia kati? - ni rahisi ikiwa utaiweka katikati ya mchezo); kabla ya kutengeneza menyu, sisi tutaunda safu mpya, ambayo tutaita menyu, kwa idadi yake ( mipangilio, chaguzi) kwenye kipengee cha kuonyesha tunachoandika:


tutaongeza sprite ndani yake na kuchukua picha ya menyu iliyokuwa kwenye vifaa vya utengenezaji wa awali (point I) na kuweka menyu yetu mahali pa faragha ambapo haitaingilia kati, lakini itaonekana kwenye skrini.
Wacha pia tuweke kitufe kilichotengenezwa kwa nyenzo za kumaliza kabla (point I) na maandishi BUILD (au kitu kama hicho)
wacha tuiweke kwenye menyu
Sasa nenda kwa Kihariri cha Laha ya Tukio
tengeneza tukio (#blah blah blah# - huu ni ujumbe wangu (maelezo) kwako tu badala ya blah blah blah kutakuwa na maoni yangu kwako; >> - action; ll - mgawanyiko wa madirisha kwa mfano:

kipanya&kibodi kwenye kipengee kilichobofya itabofya kushoto ili kupinga #kitufe chako cha menyu chenye maandishi BUILD (au kitu kama hicho)##mengineyo baadaye (angalia nukta 3)#
3)sasa sehemu ngumu zaidi(Niligawanya hii katika alama mbili ili isiwe ngumu sana),
unda sprite kutoka kwa vifaa vya kumaliza kabla "dirisha ambalo litaonekana"
kisha tunaunda sprite tupu inayoitwa p1, sogeza kidirisha kutoka kwa skrini, na uweke p1 mahali ambapo dirisha lako linapaswa kuonekana unapobonyeza kitufe cha kujenga (au kitu kama hicho CHVER)
vizuri! Sasa nenda kwa kihariri laha ya tukio
Wacha tuandike tukio ambalo halijakamilika hadi mwisho:
Maandishi yataweka maandishi yatakuwa bla-bla-bla)
kipanya&kibodi kwenye kipengee kilichobofya itabofya kushoto ili kupinga #kitufe chako cha menyu kilichoandikwa BUILD (au kitu kama hicho)#>>
4)Sehemu ya pili ya sehemu ngumu zaidi:
wacha tuunde sprite ambapo picha ya jengo (vifaa vya kumaliza kabla) itachorwa, tuite h1.
wacha tuunde sprite tupu, iite p2, sasa iweke mahali ambapo dirisha linapaswa kufunguliwa,
Wacha tuunda sprite, pia dirisha (vifaa vya kumaliza kabla), kwenye dirisha tutaandika kwa uzuri jina la jengo, gharama yake na maelezo (hiari) na kuiita i1.
wacha tuunde sprite nyingine tupu inayoitwa p3, kuiweka karibu na p2, ili tu iguse p2 na kona ya juu kushoto.
Sasa hebu tuunde matukio kadhaa, lakini kwanza tunafanya tukio lililotangulia kuwa kitendo kimoja kipya:
kipanya&kibodi itabofya kwenye kipengee kilichobofya kushoto kubofya ili kupinga #kitufe cha menyu yako chenye maandishi JENGA (au kitu kama hicho)#>> mfumo utaunda kitu kinachohusiana na kipingamizi #dirisha lako# #nambari ya safu chini ya menyu ya jina# # X ;Y-usibadilishe# kuwa kipingamizi p1
>>Mfumo utaunda kitu kinachohusiana na kipingamizi #dirisha lako la pili# #nambari ya safu chini ya menyu ya jina# #X;Y-usibadilishe# kuwa kitu p2
Tunahitaji pia kumrejeshea tukio:
nakili tukio na ligeuze
tukio jipya
kipanya&kibodi ll iko juu ya kitu ll h1>>system itaunda kitu kwa jamaa na kitu ll i1 #safu nambari chini ya menyu ya jina# #X;Y-usibadilishe# kuwa kipengee p3
Hebu tufanye sprite na jengo (tumia vifaa vya kabla ya uzalishaji) na kuiita nyumba
Hebu tuunda dirisha ambapo majengo yetu yataonekana wakati yamechaguliwa kwenye menyu, iite rlo
matukio:
kipanya&kibodi kwenye kipengee kilichobofya ll kushoto kubofya hadi h1>>taratibu itaunda ili kupinga kitu ll nyumba #safu nambari chini ya menyu ya jina# #X;Y-usibadilishe# ili kupinga rlo
>> mfumo utaondoa kutoka kwa thamani #kiasi cha pesa ambacho kinapaswa kuchukuliwa wakati wa ujenzi#
Sasa haikuwezekana kujenga tukio
Nitakuambia njia yangu ya zamani ya kukataza (nitakapomaliza kuandika, nitachunguza njia nyingine iliyonifanya kuwa bluu nilipokumbuka ulimwengu wa mbuga ya mandhari)
matukio:
nyumba itagongana na kitu kingine hadi nyumba
>> nyumba itaharibiwa
>> mfumo utaondoa thamani ll - #ongeza mara mbili ya pesa iliyochukuliwa wakati wa ujenzi##kumbuka lazima uweke - wingi#
kimsingi kila kitu.
III ninachotaka kusema:

Nilisikitishwa sana na kuporomoka kwa mchezo wangu, ulikuwa ni mchezo wa mkakati, na makala hii ilitungwa kwa utaratibu wake.Naomba usikosoe sana, niliandika muda mrefu, ukipata makosa ya kuongea andika. na kuwasahihisha
na pia hapa kuna msimbo wa chanzo cha raha yako ya kutazama, angalia, kimsingi kila kitu ni sawa na ilivyoandikwa hapa, tu hii ilikuwa toleo la mchezo wa mchezo. Jambo kuu sio kubadilisha chochote, vinginevyo itakuwa buggy. !
tumia, jaribu, angalia, fanya unachotaka, ni sawa kwangu

KaMiKaZa:
Maneno yote ya "mfumo" lazima yajumuishwe kwenye lebo ya "Msimbo".
Kisha nadhani itakuwa bora zaidi.
Pia, inaonekana kwangu kuwa picha za skrini hazingeumiza hapa. Na pia msimbo wa chanzo, kwa Kompyuta.

theme_park:
Sijui jinsi ya kupiga picha za skrini za matukio.

Naam, hiyo sio lazima.

iamnp:
theme_park , kuna kifungo maalum kwenye kibodi - PrintScreen

theme_park:
Najua baadhi ya watu hufanya hivyo kwa njia tofauti. Aidha, kila mtu ana sprite yake
na ikiwa nitaweka sprites hizi zote, watu wachache wataelewa.
Kweli, labda mtu atatoa nyongeza? Si ajabu nilikuwa najitahidi?

burlachenko:
Ili somo kama hilo liwe la kupendeza kwa mtu yeyote, linahitaji kupangwa ipasavyo, lakini hapa "hata hivyo"
Na bado, ikiwa unataka, kidogo kwa wakati, unapokuwa na wakati, tafadhali "ipamba".

theme_park:
sawa, nitarudi nyumbani kutoka shule na kujiandaa.
PS. chanzo kilichoongezwa

Serega Lebedev:

iamnp, hizi skrini huenda wapi baadaye?

KaMiKaZa:

Kwa ubao wa kunakili.
Nenda kwa kihariri chochote cha maandishi na ufanye operesheni ya "Bandika", au bonyeza Ctrl+V.

Uundaji wa mkakati
Huwezi kuwaamini wapenzi:
mipango yao inaweza kutekelezwa bila kutarajia,
na hakuna aliye tayari kwa hili.

(A. Cuningham)

Katika masuala mawili yaliyopita tulijifunza tengeneza michezo rahisi ya 2D, kudhibiti sprites, kusogeza skrini ya mchezo, kufuatilia migongano ya vitu vya mchezo, tengeneza kiolesura (vitufe, kipanya, kibodi, maeneo ya maandishi) na ufanye kazi katika hali ya skrini nzima na iliyo na madirisha. Haya yote yalifanywa kwa kutumia mchezo wa arcade kama mfano.

Wakati huu tutahama kutoka michezo ya ukumbini hadi aina "zito" zaidi - mikakati. Hapa tutalazimika kujua safu nzima ya mifumo mpya, lakini hakutakuwa na chochote ngumu hapa. Katika makala hii sisi Wacha tujifunze muundo wa mkakati wa msingi wa zamu(na pia mkakati wa wakati halisi- ni rahisi zaidi kuifanya na LKI-Creator) na tutafanya mchezo kama mfano, iliyoundwa, hata hivyo, kwa ajili ya watumiaji wengi mode (na pia mhariri wa ramani kwaajili yake). Tutashughulika na hali ya mchezaji mmoja katika toleo linalofuata la safu yetu - iliyowekwa kwa misingi ya akili ya bandia.

Kwa kuwa hili tayari ni somo la tatu, hatutaingia kwa undani zote nambari ya mfano - kwa bahati nzuri, mengi yamefanywa sawa na nyakati mbili zilizopita. Kwa kumbukumbu, kuna mpango wa mfano (kuna maoni mengi ndani yake) na makala zilizopita.

Kweli, unaweza kupata nyenzo kutoka kwa madarasa yetu ya zamani kwenye yetu CD, katika sehemu ya "Jifanyie mwenyewe mchezo" iliyoundwa mahsusi kwa kusudi hili.

Uundaji wa shida

Hebu tuandike mchezo wa mkakati unaojumuisha vita kati ya majeshi mawili ya fantasia. Lengo la vita ni kukamata kadhaa obeliski, iliyowekwa kwenye ramani. Kabla ya vita tunapeleka wanajeshi wetu, wakiwemo 6 wapiga panga, 4 wapiga mishale, 2 wapiganaji, 2 wachawi na 1 mzimu, ndani ya eneo tulilopewa. Mbali nao, kuna zile zisizoegemea upande wowote kwenye ramani mazimwi.

Tabia za wapiganaji
Mpiganaji Harakati Vipigo Masafa Uharibifu Ulinzi Uwezo
Mpanga upanga4 8 1 7 2 -
Mpiga mishale4 5 7 5 1 -
Knight3 15 1 9 4 Uponyaji, Mgomo wa Knight
Mage3 12 5 6 0 Mpira wa moto
Roho4 7 2 5 5 Kuzaliwa upya
Joka6 30 2 12 5 Ndege

Tabia za wapiganaji zinawasilishwa kwenye meza. Matibabu- hii ni haki ya kuponya shujaa wa jirani (isipokuwa roho) kwa afya kamili mara moja kwa vita. Mgomo wa Knight- haki ya kusababisha uharibifu mara tatu kwa kila mchezo. Mpira wa moto- shambulio la mchawi huondoa alama za kugonga sio tu kutoka kwa lengo la haraka, lakini pia kutoka kwa viwanja vilivyo karibu. Kuzaliwa upya- ahueni ya hit 1 kwa zamu. Ndege- haki ya kusonga juu ya vikwazo.

Mchezo unachezwa katika hali ya wachezaji wengi, katika toleo la Kiti cha Moto (kucheza kutoka kwa kompyuta moja, kugeuka moja kwa wakati). Baada ya wachezaji kugeuka, mazimwi wasioegemea upande wowote hufanya zamu yao, wakishambulia adui yeyote ndani ya eneo la seli 7.

Sherehe hiyo inaisha wakati upande mmoja unakamata zaidi ya nusu ya nguzo zilizopo kwenye ramani au kufa kabisa.

Ramani iliwekwa awali kwenye kihariri cha ramani. Kuna obelisks, dragons na vikwazo (vitu ambavyo huwezi kusonga au kushambulia).

Kujiandaa kwa kazi

Kabla ya kuanza, tutahitaji kuweka tena kifurushi Muumbaji wa LKI. Ukweli ni kwamba ikilinganishwa na wakati wa mwisho, mabadiliko mengi na nyongeza zimefanywa kwa hilo.

(Natumaini kwamba Delphi tayari umesakinisha; ikiwa sivyo, basi soma mapendekezo juu ya mada hii katika nakala yetu iliyotangulia - katika toleo la Juni la jarida au kwenye CD ya toleo hili au kwenye wavuti.)

Ni muhimu: toleo la awali la LKI-Creator lilikuwa na matatizo ya uoanifu na matoleo mapya ya Delphi. Katika toleo hili wanaondolewa.

Chukua faili na maandishi ya programu na picha kutoka kwa CD yetu (sehemu "Mchezo na mikono yako mwenyewe") na uifungue kwenye saraka ya mradi.

Sasa unaweza kupakua faili zinazohitajika kutoka hapa .

Tunapaswa kuwa na subdirectories tatu. Moja - Units - huhifadhi maktaba za DirectX na moduli za kifurushi cha LKI-Muumba. Katika mwingine - Mradi - tutafanya kazi; Picha ambazo tutahitaji na toleo la awali la mchezo wetu wa arcade huwekwa hapo mapema. Katika ya tatu - Escort - programu iliyotengenezwa tayari ambayo tunapaswa kufanikiwa.

Sasa hebu tusakinishe (reinstall) LKI-Creator. Katika menyu ya Delphi, fungua kipengee cha Sehemu na uchague Sakinisha Sehemu. Ikiwa tayari umesakinisha kifurushi hiki, kaa kwenye kichupo cha Ndani ya kifurushi kilichopo, vinginevyo nenda kwenye kichupo cha Into new na ujaze mistari tupu kama inavyoonyeshwa kwenye takwimu (kwenye mstari wa juu, njia rahisi ni kuchagua LKI2dEngine. pas kwa kutumia kitufe cha Vinjari, na chini andika tu LKI). Kisha bofya Sawa na uchague Sakinisha. Unapaswa sasa kuona kichupo cha LKI kwenye paneli ya juu ya Delphi.

Sasa kilichobaki ni kupakia mradi wetu. Katika menyu ya Faili, chagua Fungua, fungua faili Project\Obelisk.dpr...

Ramani iko wapi, Billy? Tunahitaji ramani!

Walakini, kabla ya kuingia kwenye mambo makubwa, tutahitaji kufanya kazi zaidi kwenye injini ya michoro.

Katika Star Escort, mradi wetu wa awali, "ramani" haikuwa na maana: nyota ziliwekwa kwa nasibu na hazikuathiri chochote, na nafasi ya vitu vingine ilielezwa moja kwa moja katika kanuni au kuamua kwa bahati. Hii haifai kwa kila mradi. Hii inamaanisha kuwa ni wakati wa sisi kuongeza kwenye injini yetu ramani ya eneo.

Labda tayari unaweza kukisia itakuwaje - tunaweka kitu cha ramani kwenye dirisha la mradi, na kisha kuisajili katika mali. Ramani injini yetu.

Ndivyo ilivyo ... lakini tuna zaidi ya darasa moja la kadi. Hebu tuangalie kwa karibu...

Aina za kadi

Ramani ina kitu mandhari Na vitu imewekwa juu yake. Mazingira mara nyingi (lakini sio kila wakati) imegawanywa katika seli zinazoitwa vigae- vigae.

Kama tunavyojua kutoka kwa kozi ya jiometri ya shule, ndege inaweza kufunikwa bila mapengo au kuingiliana na poligoni za kawaida za aina tatu: pembetatu (sawa), mraba, hexagon. Sehemu za pembetatu sio rahisi sana, kwa hivyo seli za mraba au hexagoni hutumiwa mara nyingi zaidi.

Kwa maana, kuishi na miraba ni rahisi: ikiwa tuna safu ya seli mbili-dimensional, ni wazi mara moja jinsi ya kupata seli zilizo karibu na seli fulani. Hizi ni +1 na -1 kwa kila fahirisi mbili. Kwa hexagons, kila kitu ni ngumu zaidi ... lakini bodi ya hexagonal ina mali ya thamani sana: maelekezo yote ndani yake ni sawa. Hii sivyo ilivyo na gridi ya mraba: diagonals ni tofauti sana na usawa na wima. Kwa hiyo, kwa mahesabu makubwa ya kimkakati, hexagons inaweza kuwa bora kuliko mraba.

Pia kuna kadi zisizo na tiles. LKI-Muumba inasaidia aina mbili: grafu na patchwork.

Ramani ya grafu ni ramani ambayo ni vipengele vichache tu muhimu vinavyo maana, pamoja na pengine maeneo maalum (kwa mfano, yale yasiyopitika), na yaliyosalia ni mchoro tu ambao hauna athari ya mchezo. Hivi ndivyo ramani za nyota hutengenezwa mara nyingi, kama vile, sema, Mwalimu wa Orion: nyota na shimo nyeusi ni pointi muhimu, iliyobaki ni mandharinyuma. Katika hali hii, wakati mwingine hutengeneza ramani za kimataifa, kwa mfano, kwa mchezo wa kuigiza.

Ramani ya patchwork imegawanywa katika maeneo, na ndani ya eneo pointi zote ni sawa; huwezi kusonga kando ya "patchwork". Hii ni nzuri kwa mikakati ya kimataifa, ambapo mkoa ndio sehemu ya chini kabisa ya eneo.

Mifano ya kadi kutoka kwa michezo mbalimbali, inayoonyesha aina, iko kwenye picha.

Hivyo walio wengi yenye pande mbili ramani (tatu-dimensional - makala maalum) inaweza kugawanywa katika madarasa manne:

  • Mstatili- Ramani ya TLKRect. Hii ni ramani ya vigae, seli ni miraba. Ramani kama hiyo, kwa mfano, katika Ustaarabu III.
  • Hexagonal- Ramani ya TLKHex. Ramani iliyo na vigae iliyo na seli za hexagonal. Inatumika katika michezo mingi ya kivita, na sio tu: hii ni, kwa mfano, jinsi ramani ya vita ya Mashujaa wa Nguvu na Uchawi ilitengenezwa kitamaduni.

    Aina hizi mbili za kadi ni wazao wa darasa la jumla Ramani ya TLKITle.

  • Graphovaya- Ramani ya TLKGraph. Kadi hii ina mandharinyuma (Sifa ya usuli) na mambo muhimu yaliyoangaziwa juu yake ni vitu tuli. Nafasi ya vitu vingine kwenye ramani hii inaonyeshwa ama na viwianishi vya kawaida (kama chombo cha anga katika nafasi ya nyota) au kwa kurejelea kitu (meli sawa katika obiti ya sayari). Hizi ni kadi za Mwalimu wa Orion, Arcanum (kimataifa), na kadhalika.
  • Viraka- Ramani ya TLKICluster. Inayo mali ya nyuma, kama girafu, na mali ya pili - mask, ambayo huamua ni hatua gani ni ya mkoa gani, na mali Mipaka, ambayo inafafanua uhusiano kati ya "shreds". Hivi ndivyo ramani zinavyopangwa, kwa mfano, katika Zama za Kati: Vita Jumla au Victoria.

Ni muhimu: madarasa ya ramani hayajaelezewa katika moduli ya LKI2dEngine, lakini katika LKI2dMap.

Tilt pembe

Lakini ikiwa unafikiri kwamba hii inamaliza uwezo wa LKI-Muumba wa kuonyesha ramani, basi umekosea sana.

Ramani inaweza kuwasilishwa mtazamo wa juu au isometriki- angalia pembe kwa wima. Kwa mfano, ramani ya Ustaarabu III au Mashujaa wa Nguvu & Uchawi IV ni ya kiisometriki, lakini Ustaarabu I inachukua mtazamo wa juu chini.

Kwa kawaida, isometria hutumiwa kwa ramani zilizo na vigae, huku ramani za grafu zikiwa na mwonekano wa juu, kwani saizi ya ramani za grafu kawaida huwa ndogo. Lakini kuna tofauti: kwa mfano, katika Medieval: Jumla ya Vita kuna ramani ya isometriki ya patchwork.

Sifa ya ramani inawajibika kwa isometricity Kiisometriki na vigezo viwili vinavyoweka pembe ambayo kamera yetu inaonekana: Phi Na Theta.

Ya kwanza inawajibika kwa kuzunguka kwa ramani inayohusiana na mhimili wima: kwa mfano, ikiwa utaiweka kwa digrii 45 (inapimwa kwa digrii), basi seli ya gridi ya mstatili itaelekezwa kwa pembe ya juu, kama katika Ustaarabu. . Kwa Phi=0, moja ya pande za seli itakuwa mlalo.

Ya pili inadhibiti mwelekeo wa kamera inayohusiana na wima. Kwa urahisi, imetolewa kama uwiano wa vitengo vya usawa na wima vya urefu. Wacha tuseme, ikiwa tunataka seli yetu ichorwe kwa urefu wa nusu ya upana kama ilivyo kwa upana, tunahitaji kuweka Theta kuwa 2.

Kwa ramani iliyo na vigae, haturuhusiwi kuchagua pembe hizi kiholela: baada ya yote, hatuna (bado) 3D. Wanategemea moja kwa moja vigezo vya matofali. Kwa mfano, ikiwa tuna mhimili wa umbo la almasi na pembe ya juu, na mhimili wima ni nusu ya saizi ya mhimili mlalo, basi lazima tuweke vigezo 45 na 2.

Lakini ramani za grafu na patchwork zinakupa haki ya kugawa vigezo hivi unavyopenda (na hata, ikiwa inataka, ubadilishe katika mchakato), lakini haupaswi kubebwa na hii - kwa kuongeza ukweli kwamba zamu kama hizo huchukua. muda mwingi, pia hawaonekani kuwa wazuri sana. Na usisahau kwamba ikiwa ramani yako ni ya kisanii, na picha, usajili, nk, basi watageuka nayo ... Kwa ujumla, wakati mwingine ni rahisi kuteka ramani ya patchwork kwa kuzingatia mzunguko unaohitajika - kwa bahati nzuri, umbali. mara nyingi hawana jukumu lolote hapo.

Viungo

Ramani ya patchwork, mtazamo wa juu.

Ramani za vigae zina tatizo lingine - kuunganisha vigae. Inadhibitiwa na parameter TileBorderStyle. Mara nyingi hii tileSawa, hali ambayo vigae vinafaa pamoja bila athari zozote za makali, au tileBorder, ambayo mistari hutolewa kutenganisha tile moja kutoka kwa nyingine - mipaka ya seli (katika kesi ya mwisho, usisahau kufafanua rangi lati katika parameter TileBorderColour).

Lakini kuna chaguo la ujanja zaidi, wakati tiles zinazofanana ziko karibu na kila mmoja bila mabadiliko, na tofauti hutumiwa kwa kutumia tile maalum ya "mpito". Hii kawaida hufanywa ikiwa ramani ina sehemu kubwa ya aina moja ya eneo, tuseme, maeneo makubwa ya kijani kibichi, na seli ya mtu binafsi sio muhimu na haipaswi kutambuliwa na mchezaji. Hii ni kadi ya Mashujaa wa Nguvu ya Uchawi. Lakini ikiwa kila seli inasindika kando, kama ilivyo katika Ustaarabu, basi njia hii haifai, na ni bora kutenganisha seli kutoka kwa kila mmoja. Teknolojia ya "Fused" (pia inaitwa mask) imebainishwa na thamani ya TileBorderStyle sawa na tileMasked. Tutazungumza juu ya muundo wao wakati mwingine - hii ni mada ngumu sana.

Kigae

Kipengele cha ramani - kitu cha darasa TLKITile- ina muundo rahisi. Hapo awali ina: kuratibu, sprite inayoichora, nambari ya aina ya vigae (ambayo huamua tuliyo nayo hapa - kilima, jangwa, barabara, bahari?) na uwezo wa kuvuka (hii inafaa katika michezo mingi). Ya mwisho ni idadi ya vitengo vya kusonga ambavyo vinatumika kusonga kupitia tile hii ardhi kikosi. Kwa vigae visivyopitika, hii ni nambari hasi.

Kigezo kingine - Vitu, orodha ya vitu vilivyo kwenye kigae hiki (aina TLKGameObject).

Ili kujua ni kisanduku gani kilibofya, ramani ina mbinu MouseTile(x,y) kurudisha kigae kilichochaguliwa.

Mbinu za tile ni pamoja na Ni Jirani(Tile, Umbali). Chaguo hili la kukokotoa linarudi kuwa kweli ikiwa Kigae si zaidi ya seli za Umbali kutoka kwa kigae kilichotolewa (kwa chaguo-msingi kigezo hiki ni sawa na kimoja, yaani, ukiandika tu IsNeighbour(Tile), chaguo la kukokotoa litarudi kuwa kweli kwa kigae kilicho karibu mara moja. kwa kigae ulichopewa. Kwa gridi za mraba, vigae vinavyopakana kwa kimshazari pia huchukuliwa kuwa "majirani".

Kazi Jirani wa Kwanza Na Next Jirani hutumika kuangalia seli zote zilizo karibu na fulani. Wa kwanza wao anaelekeza kwa seli ya jirani, na ya pili inaweza kuitwa tu baada ya kuita ya kwanza, na inatoa majirani wanaofuata, moja kwa wakati.

Hesabu ya majirani

// Kusababisha uharibifu wa seli

utaratibu TObeliskTile.Damage(dmg: integer);

kama(Objects.Hesabu > 0) na// Tunaweza kuwa nayo

// hakuna zaidi ya kitu kimoja kwa kila seli

(Objects.ID > 0) // Vitu vya passiv

// haijaharibiwa

Desemba(Vitu.Hits,

// Ondoa kiotomatiki ulinzi kutoka kwa uharibifu

Upeo(0,dmg-(Vitu kama TObeliskGameObject).Ulinzi);

kama Objects.Hitsthen Die; // Tunaondoa wafu

// Shambulio la mpira wa moto

utaratibu TObeliskTile.Fireball;

var Jirani: TObeliskTile;

Jirani:= First Neighbour as TObeliskTile;

Jirani.Uharibifu(6);

Jirani:= NextNeighbour kama TObeliskTile;

mpaka Jirani = hakuna; // Mpaka majirani wakaisha

Mfano uko kwenye utepe wa "Enumerating Majirani". Utaratibu huu unahesabu mpira wa moto unaopiga seli na majirani zake wote.

Hii inavutia: kwa kazi yake haijalishi hata kidogo, tuna kimiani cha hexagonal au mraba.

Mara nyingi tunahitaji vigezo vingine, na kawaida darasa la vigae vinavyounda ramani ni mjukuu TLKITile. Kwa hivyo kwa mfano - TObeliskTile imerithiwa kutoka TLKITile.

Ni muhimu: Tukileta ramani iliyowekewa vigae kwenye skrini ya mchezo wetu, viwianishi, pamoja na mbinu zinazohusiana na umbali za TLKGameObject, kwa chaguomsingi anza kupima umbali katika vigae badala ya pointi. Kuratibu za vifungo, icons, nk. endelea kupimwa kwa saizi! Lakini hali hii inaweza kuzimwa - hii inaweza kuwa muhimu kwa mikakati ya wakati halisi.

Kuchagua kadi

Kwa hiyo, hebu tuanze na kimiani ya mstatili (TLKIRectMap), ramani ya isometriki (vigezo vya angular 0, 1.5). Hebu gridi ya taifa itolewe (mtindo wa tileBorder). Hebu tuambie injini kwamba ramani hii inapaswa kuonyeshwa. Hadi sasa, vitendo vyote muhimu vimekamilika bila kuandika mstari mmoja wa kanuni.

Operesheni hizi lazima zifanyike kabla uanzishaji wa injini, pamoja na tamko la fonti.

Tutatangaza takwimu, kama hapo awali, kama sprites.

Mhariri wa ramani

Ramani ya viraka, isometriki.

Kuna shida kadhaa hapa. Injini sawa kabisa, matamko ya kigae sawa... Kiolesura, kama vile kuchagua kigae, kupakia/kuhifadhi, n.k., kinaweza kufanywa kwa urahisi kwa kutumia zana za kawaida za Delphi: hakuna anayetulazimisha kuibadilisha hadi hali ya skrini nzima. Hatutachambua hii hapa - kila kitu kiko kwenye faili ya mfano. Nambari ya mfano hutumia kwa makusudi njia rahisi; Ikiwa unataka, unaweza, kwa mfano, kufanya palette ya kitu na palette ya tile graphic.

Mhariri ana vipengele viwili tu ambavyo hatuvifahamu. Ya kwanza ni rahisi sana: ni kipengele kipya cha kipanya kilichoundwa mahsusi kwa ajili ya ramani za vigae. Kazi TLKRectMap.ChaguaTile hurejesha kielekezi kwenye kigae halisi ambacho kilibofya, ili tuweze kushughulikia kwa urahisi kubofya.

Lakini bidhaa mpya ya pili inastahili kuzingatiwa kwa uangalifu zaidi.

Kwa kweli, kuna njia nyingi za kuhifadhi data na kusoma data kutoka kwayo. Tulichagua njia iliyosimbwa kwenye faili CannonBase. Cannon ni chombo cha kusoma na kuandika vitu vya kizazi TCannonObject na ukaguzi wa aina na huduma zingine.

Hebu tuangalie msimbo ("Andika kadi").

Kurekodi kadi

utaratibu TObeliskRamani.Hifadhi;

var i,j: nambari kamili;

InitSave(FName);

AndikaStr(Jina la Ramani);

Andika(Map.Width, SizeOf(Map.Width));

Andika(Map.Height, SizeOf(Map.Height));

kwa mimi:=0 kwa Ramani.Upana-1 fanya

kwa j:=0 kwa Ramani.Urefu-1 fanya

Andika(Map.Tiles.Code, SizeOf(integer);

Hivi ndivyo inavyofanya kazi. Kwanza unahitaji kufungua faili kwa kutumia utaratibu maalum InitSave, ambayo kigezo pekee ni jina la faili. Kisha tunahifadhi kichwa kwa udhibiti wa aina kwa kutumia utaratibu maalum AndikaHeader. Kisha tunaandika kila kitu tunachohitaji kwa kutumia utaratibu WriteStr kwa kamba, na kwa nyanja zingine zote - Andika(parameter yake ya pili ni ukubwa wa data iliyoandikwa katika bytes). Unaweza kuandika taratibu zako mwenyewe za sehemu za kitu kama inahitajika Hifadhi na rekodi ya kichwa. Hatimaye, tunafunga faili na utaratibu FinSave.

Vitu vyote vilivyo na kichwa chao lazima vitangaze tofauti. Katika sura Uanzishaji moduli (sehemu ya hiari inayokuja baada ya Utekelezaji, ambayo ina amri ambazo lazima zitekelezwe mwanzoni kabisa, wakati wa kuanza programu), unapaswa kuandika mstari ufuatao, kwa mfano:

RegisterUserName(tpMap, "TObeliskMap");

TpMap ni mara kwa mara ambayo lazima utangaze pia. Ilinganishe, sema, kwa 1. Na katika mjenzi wa kitu cha TObeliskMap, toa thamani ya hii mara kwa mara kwa parameta. TypeID.

Kwa nini fujo zote hizi? Kando na kulinganisha aina, unapata faida moja muhimu sana.

Ikiwa muundo wa faili unabadilika, sema, kutokana na kuongeza kwa mashamba mapya, hutahitaji kuandika "waongofu" wowote ambao hubadilisha faili za zamani kuwa mpya. Nambari yako itazisoma kiotomatiki.

Nambari hii itaanzisha kiotomatiki sehemu mpya kama tupu ikiwa haijahifadhiwa kwenye faili. Na unaweza kuandika faili kwa kuongeza tu AndikaStr(Jina) mstari hadi mwisho.

Maoni: Ikiwa bado hauelewi mchakato huu ni wa nini, usijali. Unaweza kutumia njia za kawaida za kurekodi na kuhifadhi. Lakini katika miradi mikubwa ya mchezo, njia hii hutoa faida kubwa.

Wacha tucheze

Kwanza kabisa, tunahitaji kuunda darasa jipya linalotokana na TLKGameObject. Tutakosa sifa za zamani. Katika darasa jipya, unahitaji kuongeza mashamba kwa sifa kuu: mbalimbali, harakati, na kadhalika.

Ni muhimu: Kigezo chetu cha kasi cha zamani kinabaki nasi, lakini kinaonyesha kasi ya kipande kinachosonga kwenye skrini, na sio umbali ambacho kitasafiri kwa kila zamu. Ikiwa tungekuwa tunatengeneza mkakati wa wakati halisi, hatungehitaji kigezo kipya, lakini vinginevyo tutalazimika kukitambulisha.

Kwenye skrini yetu tutatumia vifungo vya TLKIButton kwa namna ya wapiga upinde, wapiga panga, wachawi, vizuka, knights.

Kwanza tuna mpangilio. Wacha tufafanue eneo la uwekaji la upande mmoja kama "mistari" mitatu ya juu ya ramani, kwa nyingine - kama "mistari" mitatu ya chini.

Nambari inafanya kazi kama hii. Unapobofya vifungo vyovyote, ufungaji wa mpiganaji sambamba umeanzishwa; Kubofya kwenye mraba usio na mtu katika eneo la uwekaji huweka kielelezo hapo na kulemaza kitufe. Mara tu vifungo vyote vimezimwa, hatua hiyo inahamishiwa kwa adui.

Mwanzoni mwa kila hoja mpya, vifungo vyote vinawashwa tena: hii imefanywa ili iwe rahisi kwa mtu kutambua ambaye bado hajafanana. Ipasavyo, kubonyeza kitufe huchagua takwimu, na mara tu hoja inapofanywa, kifungo kinatoweka. Kitufe kingine - "Mwisho zamu" - inaonekana tu baada ya awamu ya uwekaji.

Mara ya mwisho tayari tulifanya shughuli za kuwezesha na kuzima vipengee vya kiolesura, kwa hivyo hatutachambua operesheni hii kwa undani - angalia msimbo wa mfano.

Hoja ya takwimu

// Ikiwa kiini kilichochaguliwa kinakaliwa na adui, tunashambulia,

// ikiwa ni bure, tunazunguka, ikiwa tunashughulika na yetu wenyewe

// au kikwazo - kupuuza kubofya

Tile:= Map.MouseTile(MouseX, MouseY);

kama(Tile = hakuna)// Bonyeza nje ya dirisha la mchezo

basi Utgång;

// Kusonga

kama(Tile.Objects.Count = 0)

na(Dist(Self)

na sio Imehamishwa basi

// Wacha tuangalie ikiwa tunaweza kufika huko

kama sivyo HasWay(Tile) basi Utgång;

MoveObj(ID, Tile.x, Tile.y);

// mchezo ni zamu - hoja mara moja

Imehamishwa:= kweli;

//

kama Kushambuliwa basi

Ikoni.Inaonekana:= uongo;

// Shambulio

kama(Tile.Objects.Count > 0)

na(Dist(Self)

na sio Kushambuliwa basi

Obj:= Tile.Vitu;

// Tunashambulia maadui tu

kama Obj.Side = Upande basi Utgång;

Obj.Uharibifu(dmg);

Kushambuliwa:= kweli;

// Ikiwa uhamishaji umekamilika, ondoa ikoni

kama Imehamishwa basi

Ikoni.Inaonekana:= uongo;

Uhamishaji unachakatwa kama ifuatavyo (angalia "Sogeza kipande"). Seli iliyobofya iko. Ikiwa kuna adui juu yake, na wako ndani ya safu, anajeruhiwa; ikiwa ni tupu na ndani ya safu, kipande kinasonga (ikiwa vizuizi vinaruhusu); ikiwa imekaliwa, lakini sio na adui, kubofya hupuuzwa. .

Pande zote mbili zilipokaribia, mazimwi walitenda. Hufanya kazi kwa urahisi sana: huchagua asiye joka aliye karibu ambaye yuko ndani ya miraba 7 kati yao na kushambulia. Tazama msimbo wa Vitendo vya Joka.

Vitendo vya Joka

// Kuangalia vigae ndani ya miraba 7 ya joka

kwa i:= Upeo (0, x - 7) kwa Kiwango cha chini (Ukubwa wa Juu, x + 7) fanya

kwa j:= Upeo (0, y - 7) kwa Min(Ukubwa wa Juu, y + 7) fanya

ikiwa (Map.Tiles.Objects.Count > 0) na

(Map.Tiles.Objects.Code>1)

// 0 - msimbo wa kikwazo, 1 - joka

basi kuanza

// Kuchagua mahali pa kusonga

kama x=i basi shoka:=i

mwingine ikiwa x>i basi shoka:=i+2

mwingine shoka:= i-2;

kama y=j basi ndio:=j

mwingine ikiwa j basi ay:=j+2

mwingine ay:= j-2;

MoveObj(HAPANA, shoka, ay);

// Tushambulie

Uharibifu.wa.Tiles.Ramani(12);

// Kuvunja mzunguko: hakuna zaidi ya shambulio moja

// kila joka kwa pande zote

Mwishowe, kilichobaki ni kuangalia ikiwa zaidi ya nusu ya obelisks zimekaliwa na askari wa upande mmoja - na ikiwa wako, basi acha mchezo na utangaze mshindi!


Kwa hivyo, tuna mchezo wa mkakati. Walakini, kwa furaha kamili, kinachokosekana, kwanza kabisa, ni akili ya bandia, ambayo itafanya iwezekanavyo kutoa mchezo kwa hali ya mchezaji mmoja (hatuzingatii utaratibu rahisi zaidi wa kudhibiti dragons). Hiyo ndiyo tutafanya wakati ujao. Tuonane baada ya mwezi mmoja!

Katika masuala yajayo

Katika masuala yafuatayo tutazungumzia:

  • mifumo ya chembe ya kuonyesha moshi, cheche, nk;
  • kufanya kazi kwa uwazi;
  • injini tatu-dimensional;
  • misingi ya AI;
  • kurekebisha programu;
  • kuunda mpango wa mchezo na hati,
  • kuandika hati ya kubuni;
  • usawa wa mchezo;
  • kufikiria kupitia wahusika wa mchezo na mistari yao;
  • kufanya kazi na Photoshop na vifurushi vya 3D;
  • uhuishaji;
  • muziki na uigizaji wa sauti;
  • na mengi zaidi.

Inawezekana kujifunza jinsi ya kufanya haya yote kwa mikono yako mwenyewe. Hivi karibuni utaona hii.

Tuandikie...

Kwa wale wanaofikiria kuwa kifurushi kinaweza kuongezewa na kitu: kwanza, usisahau kwamba kwenye diski yetu leo ​​bado hakuna toleo la mwisho la kifurushi, lakini ni moja tu inayotekelezea kazi zilizoelezewa katika nakala zetu. Labda baadhi ya mawazo yako tayari yametekelezwa na yanasubiri zamu yao (tazama utepe wa "Katika masuala yajayo"). Na kwa hali yoyote: unapotupa wazo, jaribu kuhalalisha kwa nini pendekezo lako ni muhimu kwa michezo mingi mara moja, na sio kwa moja yako maalum.

Kwa kazi ya kujitegemea

Unaposubiri toleo linalofuata, unaweza kufanya kazi kwenye mradi wako mwenyewe, au unaweza kujaribu kuboresha hili. Hapa kuna maoni kadhaa ya utekelezaji wako mwenyewe:

  • kugawanya vitu vya kizuizi katika uharibifu (miti na misitu) na isiyoweza kuharibika (miamba), na uhakikishe kuwa mipira ya moto na pumzi ya joka huwaka mimea;
  • kuunda mashimo (kiini cha kahawia) au moto unaowaka kwa zamu kadhaa (kiini nyekundu) mahali ambapo shambulio la moto lilichochewa;
  • kuruhusu wapiga panga na knights kufunika majirani zao, kuwapa +1 kwa ulinzi;
  • fanya harakati za takwimu kwenye skrini kuwa laini.

Nini kama katika muda halisi?

Sio ngumu zaidi kutengeneza mchezo wa mkakati wa wakati halisi ikiwa utawapa wachezaji njia tofauti za kuingiza. Njia rahisi zaidi ya kufanya hivyo ni juu ya mtandao - tutazungumza juu ya hili katika moja ya masuala yanayokuja. Mabadiliko yafuatayo pia yatahitajika:

  • hakuna shamba linalohitajika Kasi ya Mchezo darasani TObeliskObject- tumia Kasi kutoka kwa injini ya msingi (kasi ya harakati kwenye skrini ni sawa na kasi ya mchezo);
  • hesabu kamili ya umbali imezimwa;
  • msimbo wa harakati ya takwimu imeandikwa tena, kwa kuzingatia ukweli kwamba ni muhimu kuteka trajectory karibu na vikwazo;
  • Kitufe cha "mwisho wa kusonga" kinaondolewa.

Ni hayo tu. Je, utajaribu kuifanya mwenyewe?

Katika makala hii, siwezekani kugusa kitu chochote kisichojulikana. Mahesabu yote ni rahisi na yanaeleweka kwa mtu yeyote anayejua Ajax ni nini. Tayari nimeandika makala kuhusu jinsi ya kuchanganya mteja na seva katika michezo ya muda halisi (). Katika makala haya, ninashughulikia masuala sawa na yanavyotumika kwa michezo ya zamu.

Hivyo ni nini kugeuka msingi mchezo? Ufafanuzi ufuatao unaweza kupatikana kwenye Wikipedia mkakati wa zamu - ni aina ya michezo ya kompyuta ambayo sifa yake kuu ni kwamba wachezaji hupiga hatua kwa zamu, tofauti na mkakati wa wakati halisi.. Ningerahisisha ufafanuzi huu kidogo:

  • Mkakati wa hatua kwa hatua - ni mchezo mkakati wa zamu.
  • Mchezo wa mkakati - Hii ni aina ya michezo ambayo ufunguo wa kupata ushindi ni kupanga na kufikiria kimkakati..
  • Mchezo wa zamu - ni aina ya michezo ambayo sifa yake kuu ni kwamba wachezaji hupiga hatua kwa zamu.
Michezo ya zamu ni pamoja na:
  • Mikakati yenye zamu
  • Michezo ya kadi
  • Michezo ya bodi (chess, nenda, ukiritimba, nk)
Ninakumbuka kuwa michezo ya zamu huweka vikwazo vichache kwenye utata wa itifaki ya mwingiliano ikilinganishwa na michezo ya wakati halisi. Yaani, muda wa majibu kwa tukio fulani hauna jukumu muhimu. Mchezaji kawaida hupewa sekunde 10 kufanya uamuzi. Hata kama ping ni kubwa, sema sekunde 3, basi mchezaji bado ana sekunde 7 za kufikiria. Kwa kuongeza, ping inaweza kuruka na kuruka, lakini hatujali kuhusu hili kabisa (katika michezo ya wakati halisi, hali hii inaua itifaki yoyote).

Kwa kawaida (katika 95% ya michezo ya zamu) haswa mchezaji mmoja hufanya uamuzi wakati wowote. Kwa hivyo, idadi ya maombi ambayo lazima tujibu ipasavyo imepunguzwa.

Kwa hiyo, wakati wa kuunda itifaki, tutazingatia hasa urahisi wa utekelezaji na usaidizi wake. Hii itaturuhusu kupata faida zaidi kwa muda mfupi.

Hoja iliyo hapo juu inatokana na maendeleo ya miezi 2 ya mchezo fulani wa kadi.

Mteja mwerevu au mjinga?

Kwanza, hebu tuamue jinsi mteja wetu anavyoweza kuwa “mwerevu”. Ninajadili ikiwa inafaa kunakili mantiki ya programu (sheria za mchezo) kwenye mteja. Bila shaka, seva lazima iwe na akili ili kuzuia udukuzi unaowezekana wa programu. Lakini inafaa kufundisha mantiki ya biashara kwa mteja?

Hii inategemea moja kwa moja ni kiasi gani cha data kamili kuhusu hali ya mchezo wako ina uzito. Ikiwa kiasi hiki cha data ni kikubwa, inachukua muda mrefu kukusanya kwenye seva na kuhamishiwa kwa mteja, basi ni mantiki kutekeleza sehemu ya mantiki kwa mteja ili kupunguza seva. Kwa mfano, katika Ustaarabu kipimo cha kumbukumbu kinachotumika huwa hakipo kwenye chati. Unaweza kuunda kitu kama hicho, ukiacha UI tu kwenye mteja?

Kwa upande mwingine, mteja mwenye busara zaidi, maendeleo ya mchezo yatakuwa ghali zaidi. Acha nikumbuke kuwa wakati wa ukuzaji wa seva hautegemei kwa njia yoyote juu ya erudition ya mteja. Hata kama mteja ana akili ya juu-duper-mega, ikiwa mtumiaji anataka kupakia upya dirisha la kivinjari, seva italazimika kukusanya na kukusanya data yote kuhusu mchezo ili kuihamisha kwa mteja. A la "Kupakia mchezo uliohifadhiwa". Hitimisho: Mteja mahiri anaweza kuharakisha programu, lakini itahitaji rasilimali za ziada kila wakati kuunda programu.

Ninapendekeza yafuatayo mtihani:

1. Je, sauti ya kituo inaruhusu?

Kadiria uzito wa wastani wa kiasi kamili cha data ya hali ya mchezo. Ifuatayo, zidisha kwa wastani wa idadi ya maombi kwa seva kwa sekunde. Ikiwa nambari inayotokana inazidi uwezo wa kituo cha data kinachotoka, basi mteja mjinga haikubaliki. Ikiwa nambari hii inazidi 20% ya chaneli inayotoka, basi unapaswa kufikiria ikiwa itafanya kazi?

2. Je, ni kazi ngumu?

Kadiria utata wa algoriti ya ukusanyaji wa data ya mchezo (katika sehemu za sekunde). Hapa, zingatia maswali yote kwenye hifadhidata. Ifuatayo, zidisha kwa wastani wa idadi ya maombi kwa seva kwa sekunde. Ikiwa muda unazidi sekunde moja, basi mteja wa kijinga haikubaliki. Ikiwa nambari hii inazidi 200 ms, basi unapaswa kufikiria ikiwa itadumu?

Muendelezo: