Strategian luominen tyhjästä - yksityiskohtainen opas. Älykäs vai tyhmä asiakas? Luo vuoropohjainen strategia

huvipuisto:
Tarvitsemme:
rakennus sprite
sprite-valikko
ERI PAINIKKEET, KUTEN:
kirjoita tekstillä (rakennus, rakentaminen, rakentaminen jne.)
näkyviin tuleva ikkuna
rakennuspiirustus,
1) lisäämme loput itse
2) sana väärennös - itse luomani, koska meidän täytyy väärentää se vastaamaan lähdettämme)
Aloitetaan:
1) luo kaikki, mikä on kirjoitettu kohdassa I paitsi 1)
Luodaan globaali muuttuja nimeltä raha, aseta mikä tahansa alkuperäinen rahamäärä
Luomme myös hiiri- ja näppäimistöobjektin
Luodaan teksti, kutsutaan sitä infoksi, luodaan aina tapahtuma ja luodaan siihen toiminto:
valitse tiedot toiminnon valinnasta valitse aseta teksti tekstiin kirjoita tämä:
"raha: " &(global("raha".
2) lisää valikko, valikon päätehtävä ei ole häiritä, vaan auttaa pelaajaa navigoimaan (miten se voi häiritä? - se on helppoa, jos laitat sen keskelle peliä); ennen valikon tekemistä teemme Luo uuden kerroksen, jota kutsumme valikoksi, sen suhteissa (asetukset, asetukset) kirjoittamaamme näyttökohteeseen:


lisäämme siihen spriten ja otamme kuvan valikosta, joka oli esituotantomateriaaleissa (kohta I) ja asetamme ruokalistamme syrjäiseen paikkaan, jossa se ei häiritse, mutta näkyy näytöllä
Laitetaan myös esiviimeistelymateriaaleista tehty nappi (kohta I), jossa lukee BUILD (tai jotain vastaavaa)
laitetaan se valikkoon
Siirry nyt tapahtumataulukkoeditoriin
luo tapahtuma (#blah blah blah# - tämä on viestini (selitys) sinulle, vain bla bla blah sijasta tulee kommenttini sinulle; >> - toiminta; ll - ikkunoiden jako esimerkiksi:

hiiri&näppäimistö ll objektia klikattiin ll vasen napsautus vastustaaksesi #valikkopainikettasi, jossa on merkintä BUILD (tai jotain vastaavaa)##loput myöhemmin (katso kohta 3)#
3)nyt vaikein osa(Jaoin tämän kahteen kohtaan, jotta se ei olisi niin monimutkaista)
luo sprite esiviimeistelymateriaaleista "ikkuna, joka tulee näkyviin"
sitten luomme tyhjän spriten nimeltä p1, siirrämme ikkunan pois näytöltä ja laitamme p1:n paikkaan, johon ikkunasi pitäisi ilmestyä, kun painat rakennuspainiketta (tai jotain vastaavaa CHVER-painiketta)
hienoa! Siirry nyt tapahtumataulukon muokkausohjelmaan
Kirjoitetaan keskeneräinen tapahtuma loppuun:
Teksti ll asettaa teksti ll bla-bla-bla)
hiiri&näppäimistö ll objektia klikattiin ll vasen napsautus vastustaaksesi #your menu button BUILD (tai jotain vastaavaa)#>>
4)Vaikeimman osan toinen osa:
luodaan sprite, johon piirretään kuva rakennuksesta (esiviimeistelymateriaalit), kutsutaan sitä h1
luodaan tyhjä sprite, kutsutaan sitä p2:ksi, aseta se nyt paikkaan, jossa ikkunan pitäisi avautua,
Luodaan sprite, myös ikkuna (esiviimeistelymateriaalit), ikkunaan kirjoitetaan kauniisti rakennuksen nimi, hinta ja kuvaus (valinnainen) ja kutsutaan sitä i1
luodaan toinen tyhjä sprite nimeltä p3, aseta se p2:n viereen, vain niin, että se koskettaa p2:ta vain vasemmalla yläkulmalla
Luodaan nyt useita tapahtumia, mutta ensin tehdään edellisestä tapahtumasta yksi uusi toiminto:
hiiri&näppäimistö ll objektia klikattiin ll vasen klikkaa objektia #valikon painike, jossa on merkintä BUILD (tai jotain vastaavaa)#>> sistem luo objektin suhteessa objektiin ll #ikkunasi# #kerrosnumero nimen alla valikko# # X ;Y-älä muuta# objektiksi p1
>>järjestelmä luo objektin suhteessa objektiin ll #toinen ikkuna# #kerroksen numero nimen alla valikko# #X;Y-älä muuta# objektiin p2
Meidän on myös annettava hänelle tapahtuma takaisin:
kopioi tapahtuma ja käännä se
uusi tapahtuma
hiiri&näppäimistö ll on objektin ll päällä h1>>järjestelmä ll luo objektin suhteessa objektiin ll i1 #kerrosnumero nimen alla menu# #X;Y-älä muuta# objektiin p3
Tehdään rakennuksesta sprite (käytä esituotantomateriaaleja) ja kutsutaan sitä taloksi
Luodaan ikkuna, jossa rakennuksemme näkyvät, kun ne valitaan valikosta, kutsu sitä rlo
Tapahtumat:
hiiren&näppäimistö ll objektia klikattiin ll hiiren vasemmalla napsautuksella h1>>järjestelmä luo objektiin suhteessa objektiin ll talo #kerrosnumero nimen alla menu# #X;Y-älä muuta# objektiin rlo
>> järjestelmä vähentää arvosta ll #rahan määrä, joka pitäisi ottaa pois rakentamisen aikana#
Nyt tapahtuman rakentaminen oli mahdotonta
Kerron sinulle entisen kieltomenetelmäni (kun lopetan kirjoittamisen, tutkin toista menetelmää, joka sai minut siniseksi, kun muistin pelin teemapuistomaailman)
Tapahtumat:
talo ll törmäyksessä toiseen esineeseen ll taloon
>>talo tuhoutuu
>> sistem ll vähennä arvosta ll - #kaksinkertainen rahamäärä, joka otettiin pois rakentamisen aikana##huomaa, että sinun on laitettava - määrä#
periaatteessa kaikki.
III mitä haluan sanoa:

Olin erittäin järkyttynyt pelini romahtamisesta. Se oli strategiapeli ja tämä artikkeli on koottu sen kaavan mukaan. Pyydän teitä olemaan arvostelematta liikaa, kirjoitin pitkään, jos löydät puhevirheitä, kirjoita ja korjata ne
ja tässä on myös lähdekoodi katselun iloa varten, katso, periaatteessa kaikki on sama kuin täällä on kirjoitettu, vain tämä oli pelin demoversio. Pääasia, että älä muuta mitään, muuten se on buginen !
käytä sitä, kokeile, tarkista, tee mitä haluat, se sopii minulle

KaMiKaZa:
Kaikki "järjestelmä"-lausekkeet on sisällytettävä "Code"-tunnisteeseen.
Sitten luulen, että se on parempi.
Lisäksi minusta näyttää siltä, ​​​​että kuvakaappaukset eivät haittaisi täällä. Ja myös lähdekoodi aloittelijoille.

huvipuisto:
En tiedä kuinka ottaa kuvakaappauksia tapahtumista.

No, se ei ole välttämätöntä.

iamnp:
theme_park, näppäimistössä on erityinen painike - PrintScreen

huvipuisto:
Tiedän, että jotkut ihmiset vain tekevät sen eri tavalla. Lisäksi jokaisella on oma sprite
ja jos perustan kaikki nämä spritet, harvat ymmärtävät.
No, ehkä joku antaa plussan? Ei ihme, että minulla oli vaikeuksia?

burlacenko:
Jotta tällainen oppitunti kiinnostaisi ketään, se on muotoiltava vastaavasti, mutta tässä "se oli kuinka tahansa".
Ja kuitenkin, jos haluat, vähän kerrallaan, kun sinulla on aikaa, "kaunesta" se.

huvipuisto:
ok, tulen kotiin koulusta ja valmistaudun.
PS. lisätty lähde

Serega Lebedev:

iamnp, mihin nämä kuvakaappaukset menevät myöhemmin?

KaMiKaZa:

Leikepöydälle.
Mene mihin tahansa tekstieditori, ja suorita "Liitä"-toiminto tai paina Ctrl+V.

Tässä artikkelissa en todennäköisesti kosketa mitään tuntematonta. Kaikki laskelmat ovat yksinkertaisia ​​ja ymmärrettäviä kaikille, jotka tietävät mitä Ajax on. Olen jo kirjoittanut artikkelin asiakkaan ja palvelimen yhdistämisestä reaaliaikaisissa peleissä (). Tässä artikkelissa käsittelen samoja ongelmia kuin ne koskevat vuoropohjaisia ​​pelejä.

Joten mikä on vuoropohjainen peli? Seuraava määritelmä löytyy Wikipediasta vuoropohjainen strategia - on tietokonepelien genre, jonka pääominaisuus on, että pelaajat tekevät vuorotellen siirtoja toisin kuin reaaliaikaisessa strategiassa. Yksinkertaistaisin tätä määritelmää hieman:

  • Askel askeleelta strategia - on vuoropohjainen strategiapeli.
  • Strategia peli - Tämä on pelityyli, jossa avain voittoon on suunnittelu ja strateginen ajattelu..
  • Vuoropohjainen peli - on pelilaji, jonka pääominaisuus on, että pelaajat tekevät vuorotellen liikkeitä.
Vuoropohjaisia ​​pelejä ovat mm.
  • Vuoropohjaiset strategiat
  • Korttipelit
  • Lautapelit (shakki, go, monopoli jne.)
Huomaan, että vuoropohjaiset pelit rajoittavat vähemmän vuorovaikutusprotokollan monimutkaisuutta kuin reaaliaikaiset pelit. Nimittäin, reaktioajalla tiettyyn tapahtumaan ei ole avainasemaa. Pelaajalla on yleensä 10 sekuntia aikaa tehdä päätös. Vaikka ping olisi jättimäinen, vaikkapa 3 sekuntia, pelaajalla on silti 7 sekuntia aikaa ajatella. Lisäksi ping voi hypätä ja hypätä, mutta emme välitä tästä ollenkaan (reaaliaikaisissa peleissä tämä tilanne käytännössä tappaa minkä tahansa protokollan).

Yleensä (95 %:ssa vuoropohjaisista peleistä) täsmälleen yksi pelaaja tekee päätöksen kulloinkin. Näin ollen niiden pyyntöjen määrä, joihin meidän on vastattava asianmukaisesti, on kaventunut.

Siksi protokollaa luotaessa keskitymme ensisijaisesti sen toteuttamisen ja tuen helppouteen. Tämä antaa meille mahdollisuuden saada enemmän voittoa lyhyemmässä ajassa.

Yllä oleva päättely perustuu tietyn korttipelin 2 kuukauden kehitykseen.

Älykäs vai tyhmä asiakas?

Ensin päätetään kuinka "älykäs" asiakkaamme voi olla. Keskustelen, kannattaako sovelluslogiikkaa (pelisäännöt) kopioida asiakkaalle. Tietenkin palvelimen on oltava älykäs sovelluksen mahdollisen hakkeroinnin estämiseksi. Mutta kannattaako liiketoimintalogiikkaa opettaa asiakkaalle?

Tämä riippuu suoraan siitä, kuinka paljon koko tietomäärä pelisi tilasta painaa. Jos tämä tietomäärä on suuri, sen kerääminen palvelimelle kestää kauan ja siirretään asiakkaalle, on järkevää toteuttaa osa logiikasta asiakkaalle palvelimen vapauttamiseksi. Esimerkiksi Civilizationissa muistin käytetty mittari on aina poissa kartasta. Voitko luoda jotain vastaavaa jättämällä vain käyttöliittymän asiakkaalle?

Toisaalta mitä älykkäämpi asiakas, sitä kalliimmaksi pelikehitys tulee. Haluan huomioida, että palvelimen kehitysaika ei riipu millään tavalla asiakkaan oppimisesta. Vaikka asiakas olisi super-duper-mega-älykäs, jos käyttäjä haluaa ladata selainikkunan uudelleen, palvelimen on kerättävä ja koottava kaikki pelin tiedot siirtääkseen ne asiakkaalle. A la "Ladataan tallennettua peliä". Johtopäätös: Älykäs asiakas voi nopeuttaa sovellusta, mutta se vaatii aina lisäresursseja sovelluksen kehittämiseen.

Ehdotan seuraavaa testata:

1. Salliiko kanavan äänenvoimakkuus?

Arvioi pelin tilatietojen täyden määrän keskimääräinen paino. Kerro seuraavaksi palvelimelle lähetettyjen pyyntöjen keskimääräisellä määrällä sekunnissa. Jos tuloksena oleva luku ylittää lähtevän datakanavan kapasiteetin, tyhmää asiakasta ei voida hyväksyä. Jos tämä määrä ylittää 20% lähtevästä kanavasta, sinun pitäisi miettiä, toimiiko se?

2. Onko se työvoimavaltaista?

Arvioi pelin tiedonkeruualgoritmin monimutkaisuus (sekunnin murto-osissa). Ota tässä huomioon kaikki tietokantaan tehtävät kyselyt. Kerro seuraavaksi palvelimelle lähetettyjen pyyntöjen keskimääräisellä määrällä sekunnissa. Jos aika ylittää yhden sekunnin, tyhmää asiakasta ei voida hyväksyä. Jos tämä luku ylittää 200 ms, sinun pitäisi miettiä, kestääkö se?

Jatkoa:

Hei kaikki! Nyt kerron sinulle kuinka saada yksinkertainen RTS (RTS - Real Time Strategy, eli reaaliaikainen strategia) avaamaan riippumatto 8.1 (toimivuutta ei taata 8.0:ssa) luoda objControl-objekti, eli tämä on pääobjektimme, luo luomistapahtuma ( Luo) Lisää tapahtuma => Luominen (Lisää tapahtuma => Luo) luontitapahtuma tehdään vain kerran - luodessasi napsauta oikealla olevaa ohjausvälilehteä pystysuora valikko ja napsauta hiiren kakkospainikkeella Execute code ja kirjoita koodi (on parasta olla kopioimatta koodia, vaan kirjoittaa se itse, se on paljon helpompi muistaa):

200?"200px":""+(this.scrollHeight+5)+"px");">startx=0; //Ilmoita muuttuja x:n aloituspisteelle
aloitus=0; //Ilmoita pisteen alun muuttuja y:llä
draw_rect=false; //Älä piirrä valintasuorakulmiota


Muuttuja: Muistinpala, joka sisältää tietoa. Heillä on oma nimensä, jolla voit ottaa heihin yhteyttä. GML:n muuttujat voivat sisältää reaaliluvun tai merkkijonon. Esimerkiksi pöytä on muuttuja, puinen tai lasi on arvo
Nyt luomme vaihetapahtuman (Step, Add Event => Step) ja suoritamme toiminnon uudelleen (klikkaa hiiren kakkospainikkeella Execute code):

200?"200px":""+(this.scrollHeight+5)+"px");">
if mouse_check_button_pressed(mb_left) //Jos LMB on painettu
{
piirrä_oikea = tosi; //Piirrämme suorakulmion
startx=hiiri_x; //Aloita x sijainti = hiiren x paikka
starty=hiiri_y; //Aloituskohta = hiiren sijainti
kaikki valitut = false; //Tämä ei ole vielä ilmoitettu muuttuja, saamme tietää mitä se tekee myöhemmin
}

Jos mouse_check_button_released(mb_left) //Jos LMB on julkaistu
{
draw_rect=false; //Emme piirrä suorakulmiota
for(i=0;i<=instance_number(par);i+=1) //Читайте про цикл for ниже
{
ii=instanssi_etsi(par,i); //Etsimme esinettä, jota ei ole vielä tehty
if(collision_rectangle(startx,startty,mouse_x,mouse_y,ii,true,false)) //Tässä on törmäyssuorakulmiomme (kontakti)
{
ii.selected=true;
}
}
}

Koodi on suuri ja monimutkainen, kun opimme if-ehdollisen lausekkeen:
Koodi, jossa on if, suoritetaan seuraavasti:

200?"200px":""+(this.scrollHeight+5)+"px");">
jos (ehto)
{
toiminta
}

Se voi sisältää myös muun lausunnon (muuten), esimerkki:

200?"200px":""+(this.scrollHeight+5)+"px");">if (ehto)
{
toiminta
}
muu
{
toiminta 2
}

Ja koska se on silmukkaoperaattori, se suoritetaan seuraavasti:

200?"200px":""+(this.scrollHeight+5)+"px");">
varten (<переменная> ; <выражение> ;<действие переменной>)
{
<действия>
}


Operaattori on erittäin voimakas asia, se auttaa paljon vaikeissa tilanteissa

Operaattori - esimerkiksi kieleen sisäänrakennetut toiminnot, yleisimmät ovat int, if, else, string, switch, for, case, break, exit jne., jne.

Nyt luomme myös piirustustapahtuman (piirtämisen) ja kirjoitamme samalla tavalla:

200?"200px":""+(this.scrollHeight+5)+"px");">if draw_rect=true
{
alfa=.8;
piirrä_suorakulmio_väri(aloitusx,aloitus,hiiri_x,hiiri_y,c_vihreä,c_vihreä,c_vihreä,c_vihreä,tosi);
}

Täällä kaikki on helppoa, tässä sama asia vain venäjäksi:
jos meidän on piirrettävä suorakulmio, valitsemme läpinäkyvyyden ja piirrämme suorakulmion
tässä argumentit

200?"200px":""+(this.scrollHeight+5)+"px");">piirrä_suorakulmion_väri(x1,y1,x2,y2,väri 1, väri 2, väri 3, väri 4, ääriviiva)


ääriviiva - piirretäänkö vain reuna (tosi) vai täytetty suorakulmio (false).
Löysimme uuden sanan - vakio, tämä on numeerinen lauseke tai koodi, joka on korvattu sanalla, riippumatossa on sisäänrakennetut vakiot:

200?"200px":""+(this.scrollHeight+5)+"px");">true - 1
väärä - 0
pi - 3,1415...


No, me selvitimme sen, nyt meidän on luotava uusi objekti - pääobjekti, joka yhdistää lapsiinsa. Kutsutaan sitä pariksi (jos haluat muuttaa nimen, sinun on vaihdettava koodi ohjausobjektin vaihetapahtumassa), kirjoita luontitapahtumaan:

200?"200px":""+(this.scrollHeight+5)+"px");">selected=false; //Tässä on muuttujamme, onko objekti valittu

Tässä kaikki. Nyt tietysti tarvitsemme objektin, joka voi liikkua, kutsumme sitä objTestiksi ja kirjoitamme koodin luontitapahtumaan:

200?"200px":""+(this.scrollHeight+5)+"px");">gox=x; //Minne mennä...
goy=y; //v:n mukaan
valittu=false; //Meitä ei ole valittu =)
object_set_parent(self,par) //Tässä on vanhempien valinta

Uusi toiminta:

200?"200px":""+(this.scrollHeight+5)+"px");">object_set_parent(ind,obj)

Asettaa pääobjektin objektiksi nimeltä ind.
Ja uusi operaattori: itse, se tarkoittaa, että toiminta menee itsestään
Älä pelkää, step-tapahtumaa on vielä vähän jäljellä:

200?"200px":""+(this.scrollHeight+5)+"px");">jos etäisyys_pisteeseen(gox,goy) > 20
{
mp_potential_step(gox,goy,6,kiinteä);
}
if(selected=true) && hiiren_tarkistus_painike_painettu(mb_oikea)
{
gox=hiiri_x;
goy=hiiri_y;

Strategian muodostuminen
Amatööreihin ei voi luottaa:
heidän suunnitelmansa voivat yllättäen toteutua,
eikä kukaan ole valmis tähän.

(A. Cuningham)

Kahdessa edellisessä numerossa opimme tehdä yksinkertaisia ​​2D-pelejä, ohjaa spritejä, rullaa pelinäyttöä, seuraa peliobjektien törmäyksiä, rakenna käyttöliittymä (painikkeet, hiiri, näppäimistö, tekstialueet) ja työskentele koko näytön ja ikkunan tilassa. Kaikki tämä tehtiin käyttämällä esimerkkinä arcade-peliä.

Tällä kertaa siirrymme pelihallipeleistä "vakavampaan" genreen - strategioihin. Täällä meidän on hallittava koko joukko uusia mekanismeja, mutta tässäkään ei ole mitään monimutkaista. Tässä artikkelissa me Tutkitaan vuoropohjaisen strategian rakennetta(ja myös reaaliaikainen strategia- se on vielä helpompi tehdä LKI-Creatorilla) ja teemme pelin esimerkkinä, joka on kuitenkin suunniteltu vain monen käyttäjän tila (ja myös karttaeditori häntä varten). Käsittelemme yksinpelitilaa kolumnimme seuraavassa numerossa - omistettu tekoälyn perusteet.

Koska tämä on jo kolmas oppitunti, emme mene yksityiskohtiin kaikki esimerkkikoodi - onneksi paljon on tehty täsmälleen samalla tavalla kuin kaksi edellistä kertaa. Viitteeksi on esimerkkiohjelma (sissa on paljon kommentteja) ja aiempia artikkeleita.

No, löydät materiaalit aiemmilta kursseiltamme CD, "Tee se itse -peli" -osiossa, joka on erityisesti luotu tätä tarkoitusta varten.

Ongelman muotoilu

Kirjoitetaan strategiapeli, joka koostuu kahden fantasiaarmeijan taistelusta. Taistelun tavoitteena on vangita useita obeliskit, sijoitettu kartalle. Ennen taistelua lähetämme joukkomme, jotka koostuvat 6:sta miekkamiehet, 4 jousimiehet, 2 ritarit, 2 taikurit ja 1 aave, meille osoitetulla alueella. Niiden lisäksi kartalla on neutraaleja Lohikäärmeitä.

Taistelijoiden ominaisuudet
Taistelija Liike Osumat Alue Vahingoittaa Suojaus Ominaisuudet
Miekkamies4 8 1 7 2 -
Jousimies4 5 7 5 1 -
Ritari3 15 1 9 4 Paraneminen, Knight's Strike
velho3 12 5 6 0 Tulipallo
Aave4 7 2 5 5 Uusiutuminen
Lohikäärme6 30 2 12 5 Lento

Taistelijoiden ominaisuudet on esitetty taulukossa. Hoito- Tämä on oikeus parantaa naapurisoturi (paitsi haamu) täyteen terveyteen kerran taistelussa. Knight's Strike- oikeus aiheuttaa kolminkertainen vahinko kerran peliä kohden. Tulipallo- Taikurin hyökkäys poistaa osumapisteet paitsi välittömästä kohteesta, myös ympäröiviltä ruuduilta. Uusiutuminen- 1 iskun palautus per kierros. Lento- oikeus liikkua esteiden yli.

Peliä pelataan moninpelitilassa, Hot Seat -versiossa (pelataan yhdeltä tietokoneelta, kierrokset yksi kerrallaan). Kun pelaajat kääntyvät, neutraalit lohikäärmeet tekevät vuoronsa ja hyökkäävät kaikkiin vihollisiin 7 solun säteellä.

Juhla päättyy, kun toinen puoli joko vangitsee yli puolet kartalla olevista obeliskeistä tai kuolee kokonaan.

Kartta asetettiin alun perin karttaeditoriin. Siellä on obeliskejä, lohikäärmeitä ja esteitä (esineitä, joiden läpi ei voi liikkua tai hyökätä).

Valmistautuminen työhön

Ennen kuin aloitamme, meidän on asennettava paketti uudelleen LKI-Luoja. Tosiasia on, että edelliseen kertaan verrattuna siihen on tehty monia muutoksia ja lisäyksiä.

(Toivon että Delfoi olet jo asentanut; jos ei, niin lue suosituksia tästä aiheesta edellisestä artikkelistamme - lehden kesäkuun numerosta tai tämän numeron CD-levyltä tai verkkosivustolta.)

On tärkeää: LKI-Creatorin edellisessä versiossa oli joitain yhteensopivuusongelmia Delphin uusien versioiden kanssa. Tässä versiossa ne on poistettu.

Ota tiedosto ohjelmateksteineen ja kuvineen CD:ltämme (osio ”Peli omin käsin”) ja pura se projektihakemistoon.

Nyt voit ladata tarvittavat tiedostot täältä .

Meillä pitäisi olla kolme alihakemistoa. Yksi - Yksiköt - tallentaa LKI-Creator-paketin DirectX-kirjastot ja -moduulit. Toisessa - Projektissa - työskentelemme; tarvitsemamme kuvat laitetaan sinne etukäteen, ja aiempi versio meidän pelihalli. Kolmannessa - Escort - valmis ohjelma, jossa meidän pitäisi menestyä.

Nyt asennetaan (uudelleenasenna) LKI-Creator. Avaa Delphi-valikosta Komponentti-kohde ja valitse Asenna komponentti. Jos olet jo asentanut tämän paketin, pysy Olemassa olevaan pakettiin -välilehdellä, muussa tapauksessa mene uuteen pakettiin -välilehdelle ja täytä tyhjät rivit kuvan osoittamalla tavalla (ylirivillä helpoin tapa on valita LKI2dEngine. pas-tiedosto Selaa-painikkeella ja kirjoita alareunaan LKI). Napsauta sitten OK ja valitse Asenna. Sinun pitäisi nyt nähdä LKI-välilehti Delphin yläpaneelissa.

Nyt ei jää muuta kuin ladata projektimme. Valitse Tiedosto-valikosta Avaa, avaa tiedosto Project\Obelisk.dpr…

Missä kartta on, Billy? Tarvitsemme kartan!

Ennen kuin pääsemme isoihin asioihin, meidän on kuitenkin työstettävä hieman enemmän grafiikkamoottoria.

Edellisessä projektissamme Star Escortissa "kartalla" ei ollut merkitystä: tähdet asetettiin satunnaisesti eivätkä ne vaikuttaneet mihinkään, ja muiden kohteiden sijainti oli joko määritetty suoraan koodissa tai määrätty sattumalta. Tämä ei sovi kaikkiin projekteihin. Tämä tarkoittaa, että meidän on aika lisätä moottoriamme alueen kartta.

Voit luultavasti jo arvata, miltä se näyttää - laitamme karttaobjektin projektiikkunaan ja rekisteröimme sen sitten omaisuuteen Kartta meidän moottorimme.

Näin se on... mutta meillä on useampi kuin yksi korttiluokka. Katsotaanpa tarkemmin...

Korttien tyypit

Kartta koostuu jostain maisema Ja esineitä asennettuna siihen. Maisema on useimmiten (mutta ei aina) jaettu soluihin nimeltä laatat- laatat.

Kuten tiedämme koulun geometriakurssilta, taso voidaan peittää ilman aukkoja tai päällekkäisyyksiä kolmen tyyppisillä säännöllisillä monikulmioilla: kolmio (tasasivuinen), neliö, kuusikulmio. Kolmiomaiset kentät eivät ole erityisen käteviä, joten neliömäisiä soluja tai kuusikulmioita käytetään useammin.

Tietyssä mielessä neliöiden kanssa eläminen on helpompaa: jos meillä on kaksiulotteinen solujoukko, on heti selvää, kuinka löytää tietyn solun viereiset solut. Nämä ovat +1 ja -1 kummallekin indeksille. Kuusikulmioiden kanssa kaikki on hieman monimutkaisempaa... mutta kuusikulmiolla on erittäin arvokas ominaisuus: kaikki suunnat siinä ovat samat. Näin ei käy neliöruudukossa: lävistäjät eroavat merkittävästi vaaka- ja pystysuorasta. Siksi vakavissa strategisissa laskelmissa kuusikulmiot voivat olla parempia kuin neliöt.

On myös laatoimattomia kortteja. LKI-Creator tukee kahta tyyppiä: kaaviota ja tilkkutyötä.

Kaaviokartta on kartta, jossa vain muutamalla avainpisteellä on merkitys, sekä ehkä erityisalueita (esimerkiksi läpäisemättömiä), ja loput ovat vain kuvioita, joilla ei ole pelivaikutusta. Näin tehdään usein tähtikarttoja, kuten esimerkiksi Master of Orionissa: tähdet ja mustat aukot ovat avainpisteitä, loput taustaa. Tässä tilassa he tekevät joskus globaaleja karttoja esimerkiksi roolipeliä varten.

Tilkkukartta on jaettu alueisiin, ja alueen sisällä kaikki pisteet ovat samat, et voi liikkua "tilkkutyötä" pitkin. Tämä on hyvä globaaleille strategioille, joissa maakunta on alueen vähimmäisyksikkö.

Kuvissa on esimerkkejä eri pelien korteista, joissa on tyyppi.

Enemmistö siis kaksiulotteinen kartat (kolmiulotteiset - erikoisartikkeli) voidaan jakaa neljään luokkaan:

  • Suorakulmainen- TLKIRectMap. Tämä on laatoitettu kartta, solut ovat neliöitä. Tällainen kartta esimerkiksi Civilization III:ssa.
  • Kuusikulmainen- TLKIHexMap. Laatoitettu kartta kuusikulmaisilla soluilla. Käytetään monissa sotapeleissä, eikä vain: näin on esimerkiksi perinteisesti tehty Heroes of Might & Magic -taistelukartta.

    Nämä kaksi korttityyppiä ovat yleisen luokan jälkeläisiä TLKITileMap.

  • Graphovaya- TLKIGraphMap. Tällä kortilla on tausta (taustaominaisuus) ja siinä korostetut avainkohdat ovat staattisia objekteja. Muiden kohteiden sijainti tällä kartalla ilmaistaan ​​joko tavallisilla koordinaateilla (kuten avaruusalus tähtienvälisessä avaruudessa) tai viittaamalla kohteeseen (sama laiva planeetan kiertoradalla). Nämä ovat Master of Orion, Arcanum (global) ja niin edelleen kortit.
  • Patchwork- TLKIClusterMap. Sillä on taustaominaisuus, kuten kaavio yksi, ja toinen ominaisuus - naamio, joka määrittää, mikä piste kuuluu mille alueelle, ja ominaisuuden Rajat, joka määrittelee "silppurien" väliset yhteydet. Näin kartat on järjestetty esimerkiksi Medieval: Total Warissa tai Victoriassa.

On tärkeää: karttaluokkia ei kuvata LKI2dEngine-moduulissa, vaan LKI2dMapissa.

Kallistuskulmat

Mutta jos luulet, että tämä tyhjentää LKI-Creatorin mahdollisuudet karttojen näyttämiseen, olet hyvin väärässä.

Kartta voidaan esittää ylhäältä tai isometrinen- katso kulmassa pystysuoraan nähden. Esimerkiksi Civilization III:n tai Heroes of Might & Magic IV:n kartta on isometrinen, mutta Civilization I ottaa käyttöön ylhäältä alas -näkymän.

Tyypillisesti isometriaa käytetään ruutukartoissa, kun taas kaaviokarttoja käytetään ylhäältä katsottuna, koska kaaviokarttojen mittakaava on yleensä pienempi. Mutta poikkeuksiakin on: esimerkiksi Medieval: Total Warissa on tilkkumainen isometrinen kartta.

Karttaominaisuus vastaa isometrisyydestä Isisometrinen ja kaksi parametria, jotka määrittävät kulman, josta kameramme näyttää: Phi Ja Theta.

Ensimmäinen vastaa kartan pyörimisestä pystyakseliin nähden: jos esimerkiksi asetat sen 45 asteeseen (se mitataan asteina), suorakaiteen muotoinen ruudukon solu suunnataan ylöspäin kulmassa, kuten Civilizationissa. . Kun Phi=0, yksi solun sivuista on vaakasuora.

Toinen ohjaa kameran kallistusta pystysuoraan nähden. Mukavuuden vuoksi se on annettu vaaka- ja pystysuuntaisten pituusyksiköiden suhteena. Oletetaan, että jos haluamme, että solumme piirretään puolet niin korkeaksi kuin se on leveä, meidän on asetettava Theta arvoon 2.

Kaakeloidulla kartalla emme saa valita näitä kulmia mielivaltaisesti: meillä ei loppujen lopuksi ole (vielä) 3D:tä. Ne riippuvat suoraan laattojen parametreista. Esimerkiksi, jos meillä on vinoneliön muotoinen akseli, jonka kulma on ylöspäin, ja pystyakseli on puolet vaaka-akselin koosta, meidän on asetettava parametrit 45 ja 2.

Mutta kaavio- ja tilkkukartat antavat sinulle oikeuden määrittää nämä parametrit haluamallasi tavalla (ja jopa halutessasi muuttaa niitä prosessin aikana), mutta sinun ei pidä innostua tästä - sen lisäksi, että tällaiset käännökset vievät paljon aikaa, ne eivät myöskään näytä kovin siistiltä. Ja älä unohda, että jos karttasi on taiteellinen, jossa on kuvia, kirjoituksia jne., niin ne kääntyvät sen mukana... Yleensä joskus on helpompi piirtää tilkkukartta ottaen huomioon tarvittava kierto - onneksi etäisyydet eivät usein näytä mitään roolia siellä.

Liitokset

Patchwork kartta, ylhäältä katsottuna.

Laattakartoilla on toinen ongelma - laattojen liittäminen. Sitä ohjataan parametrilla TileBorderStyle. Useimmiten tämä laattaSuora, tila, jossa laatat vain sopivat yhteen ilman reunavaikutuksia, tai tileBorder, johon piirretään viivat, jotka erottavat ruudun toisesta - solujen rajat (jälkimmäisessä tapauksessa älä unohda määrittää väri hilat parametrissa TileBorderColor).

Mutta on ovelampi vaihtoehto, kun identtiset laatat ovat vierekkäin ilman muutoksia, ja erilaisia ​​käytetään erityisellä "siirtymävaiheen" laatalla. Tämä tehdään yleensä, jos kartta koostuu pääosin laajoista tietyntyyppisistä alueista, esimerkiksi suurista viheralueista, ja yksittäinen solu ei ole tärkeä eikä pelaajan tulisi huomata sitä. Tämä on Heroes of Might Magic -kortti. Mutta jos jokainen solu käsitellään erikseen, kuten Civilizationissa, tämä menetelmä ei sovellu, ja on parempi erottaa solut selvästi toisistaan. "Fused"-tekniikka (kutsutaan myös naamio) on määritetty TileBorderStyle-arvolla, joka on yhtä suuri kuin laattaNaamioitu. Puhumme niiden rakenteesta toisen kerran - tämä on melko monimutkainen aihe.

Laatta

Karttaelementti - luokkaobjekti TLKITile- on yksinkertainen rakenne. Se sisältää aluksi: koordinaatit, spriten, joka piirtää sen, laattatyyppikoodin (joka määrittää, mitä meillä on täällä - kukkula, autiomaa, tie, meri?) ja maastohiihtokyvyn (tämä koskee useimmissa peleissä). Viimeinen on tämän ruudun läpi liikkumiseen käytettyjen siirtoyksiköiden määrä maa joukkue. Läpäisemättömille laatoille tämä on negatiivinen luku.

Toinen parametri - Objektit, luettelo tässä ruudussa sijaitsevista objekteista (tyyppi TLKIGameObject).

Kartalla on menetelmä selvittääksesi, mitä solua napsautettiin MouseTile(x,y) palauttaa valitun ruudun.

Laattamenetelmiä ovat mm Onko Naapuri(laatta, etäisyys). Tämä funktio palauttaa tosi, jos ruutu on korkeintaan Etäisyys soluja annetusta ruudusta (oletusarvoisesti tämä parametri on yhtä suuri kuin yksi, eli jos kirjoitat vain IsNaapuri(Tile), funktio palauttaa true välittömästi viereiselle ruudulle Neliöruudukossa diagonaalisesti rajaavia laattoja pidetään myös "naapureina".

Toiminnot Ensimmäinen Naapuri Ja SeuraavaNaapuri käytetään tarkistamaan kaikki tietyn solun vieressä olevat solut. Ensimmäinen niistä osoittaa johonkin naapurisoluun, ja toinen voidaan kutsua vasta ensimmäisen kutsumisen jälkeen, ja se antaa seuraavat naapurit yksi kerrallaan.

Naapureiden luettelointi

// Vaurioittaa solua

menettelyä TObeliskTile.Damage(dmg: kokonaisluku);

jos(Objects.Count > 0) ja// Meillä saattaa olla

// ei enempää kuin yksi objekti solua kohden

(Objects.ID > 0) // Passiiviset esineet

// ei vaurioitunut

Dec(Objects.Hits,

// Vähennä suojaus vaurioilta automaattisesti

Max(0,dmg-(Objektit kuten TObeliskGameObject).Puolustus);

jos Objects.Hitshen Die; // Poistamme kuolleet

// Tulipallon hyökkäys

menettelyä TObeliskTile.Fireball;

var Naapuri: TObeliskTile;

Naapuri:= FirstNeighbour nimellä TObeliskTile;

Naapuri.Vahinko(6);

Neighbor:= NextNeighbour nimellä TObeliskTile;

siihen asti kun Naapuri = nolla; // Kunnes naapurit loppuvat

Esimerkki on "Naapureiden luettelointi" -sivupalkissa. Tämä menettely laskee tulipallon, joka osuu soluun ja kaikkiin sen naapureihin.

Tämä on mielenkiintoista: työlleen sillä ei ole mitään väliä, meillä on kuusikulmainen hila tai neliömäinen hila.

Usein tarvitsemme joitain muita parametreja, ja yleensä kartan muodostavien laattojen luokka on jälkeläinen TLKITile. Joten esimerkissä - TObeliskTile on peritty TLKITilestä.

On tärkeää: Jos tuomme pelinäyttöön laatoitetun kartan, koordinaatit sekä etäisyyteen liittyvät TLKIGameObject-menetelmät alkavat oletusarvoisesti mitata etäisyyttä laatoissa pisteiden sijaan. Painikkeiden, kuvakkeiden jne. koordinaatit. mitataan edelleen pikseleinä! Mutta tämä tila voidaan kytkeä pois päältä - tästä voi olla hyötyä reaaliaikaisissa strategioissa.

Kortin valinta

Aloitetaan siis suorakaiteen muotoisesta hilasta (TLKIRectMap), isometrisestä kartoituksesta (kulmaparametrit 0, 1.5). Piirretään ruudukko (tileBorder-tyyli). Kerrotaan moottorille, että tämä tietty kartta pitäisi näyttää. Toistaiseksi kaikki tarvittavat toimet on suoritettu kirjoittamatta yhtään koodiriviä.

Nämä toiminnot on suoritettava ennen moottorin alustus sekä fontin ilmoitus.

Julkistamme hahmot kuten ennenkin spriteiksi.

Karttaeditori

Patchwork kartta, isometrinen.

Tässä on melkoisesti vaikeuksia. Täsmälleen sama moottori, samat ruutuilmoitukset... Käyttöliittymä, kuten ruudun valinta, lataus/tallennus jne., voidaan tehdä helposti standardi tarkoittaa Delphi: kukaan ei pakota meitä kääntämään sitä koko näytön tila. Emme analysoi tätä tässä - kaikki on esimerkkitiedostossa. Esimerkkikoodia on käytetty tarkoituksella yksinkertaisin tapa; Halutessasi voit esimerkiksi tehdä objektipaletista ja laattapaletista grafiikkaa.

Editorissa on vain kaksi ominaisuutta, jotka ovat meille tuntemattomia. Ensimmäinen on melko yksinkertainen: se on uusi hiiriominaisuus, joka on suunniteltu erityisesti laattakarttoja varten. Toiminto TLKIRectMap.SelectTile palauttaa osoittimen täsmälleen napsautettuun ruutuun, jotta voimme helposti käsitellä napsautusta.

Mutta toinen uusi tuote ansaitsee tarkemman harkinnan.

Itse asiassa on monia tapoja tallentaa tietoja ja lukea tietoja siitä. Valitsimme tiedostoon koodatun menetelmän CannonBase. Cannon on työkalu jälkeläisten esineiden lukemiseen ja kirjoittamiseen TCannonObject tyyppitarkistuksen ja joidenkin muiden ominaisuuksien kanssa.

Katsotaanpa koodia ("Kirjoita kortti").

Kortin tallentaminen

menettelyä TObeliskMap.Save;

var i,j: kokonaisluku;

InitSave(FName);

WriteStr(KartanNimi);

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

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

varten i:=0 to Kartta.Leveys-1 tehdä

j:lle = 0 to Kartta.Korkeus-1 tehdä

Write(Map.Tiles.Code, SizeOf(kokonaisluku);

Näin se toimii. Ensin sinun on avattava tiedosto erityisellä menettelyllä InitSave, jonka ainoa parametri on tiedoston nimi. Sitten tallennamme otsikon tyypin hallintaa varten erityisellä menettelyllä WriteHeader. Sitten kirjoitamme ylös kaikki mitä tarvitsemme menettelyn avulla WriteStr merkkijonoille ja kaikille muille kentille - Kirjoittaa(sen toinen parametri on kirjoitetun tiedon koko tavuina). Voit kirjoittaa omat proseduurisi objektikenttiin tarpeen mukaan Tallentaa otsikkotietueen kanssa. Lopuksi suljemme tiedoston menettelyllä FinSave.

Kaikki objektit, joilla on oma otsikko, on ilmoitettava erikseen. Luvussa Alustus moduuli (valinnainen osa, joka tulee sen jälkeen Toteutus, joka sisältää komennot, jotka on suoritettava heti alussa, ohjelmaa käynnistettäessä), kirjoita esimerkiksi seuraava rivi:

RekisteröidyKäyttäjänimi(tpMap, "TObeliskMap");

TpMap on vakio, joka sinun on myös ilmoitettava. Yhdistä se vaikkapa 1:een. Ja TObeliskMap-objektin konstruktorissa määritä tämän vakion arvo parametrille TypeID.

Miksi kaikki tämä meteli? Tyyppivastaavuuden lisäksi saat yhden erittäin tärkeän edun.

Jos tiedostomuoto muuttuu esimerkiksi uusien kenttien lisäämisen vuoksi, sinun ei tarvitse kirjoittaa mitään "muuntimia", jotka muuntavat vanhat tiedostot uusiksi. Koodisi lukee ne automaattisesti.

Tämä koodi alustaa automaattisesti uuden kentän tyhjäksi, jos sitä ei tallenneta tiedostoon. Ja voit kirjoittaa tiedoston lisäämällä WriteStr(Name)-rivin aivan loppuun.

Kommentti: Jos et vieläkään ymmärrä, mitä varten tämä prosessi on tarkoitettu, älä huoli. Voit käyttää tavanomaisempia tallennus- ja tallennusmenetelmiä. Mutta todella suurissa peliprojekteissa tämä polku tarjoaa merkittäviä etuja.

Pelataan

Ensinnäkin meidän on luotava uusi luokka, joka on johdettu TLKIGameObjectista. Tulemme kaipaamaan vanhan ominaisuuksia. Uudessa luokassa sinun on lisättävä kenttiä pääominaisuuksille: kantama, liike ja niin edelleen.

On tärkeää: Vanha nopeusparametrimme jää meille, mutta se ilmaisee palan nopeuden näytön poikki, ei matkaa, jonka se kulkee kierrosta kohti. Jos tekisimme reaaliaikaisen strategian, emme tarvitsisi uutta parametria, mutta muuten meidän on otettava se käyttöön.

Näytöllämme käytämme TLKIButton-painikkeita jousimiesten, miekkamiesten, taikureiden, haamujen, ritarien muodossa.

Ensin meillä on järjestely. Määritellään sijoitteluvyöhyke yhdelle puolelle kartan kolmeksi ylimmäksi ”viivaksi”, toiselle kolmeksi alimmaksi ”viivaksi”.

Koodi toimii näin. Kun painat mitä tahansa painiketta, vastaavan hävittäjän asennus aktivoidaan; Napsauttamalla tyhjää ruutua sijoittelualueella, kuva asetetaan sinne ja painike poistetaan käytöstä. Heti kun kaikki painikkeet on poistettu käytöstä, siirto siirretään viholliselle.

Jokaisen uuden liikkeen alussa kaikki painikkeet kytketään uudelleen päälle: tämä tehdään niin, että henkilön on helpompi huomata, ketä hän ei vielä muistuta. Vastaavasti painikkeen napsauttaminen valitsee hahmon, ja heti kun liikettä tehdään, painike katoaa. Toinen painike - "End turn" - ilmestyy vasta sijoitusvaiheen jälkeen.

Viime kerralla teimme jo operaatioita käyttöliittymäelementtien käyttöönottamiseksi ja poistamiseksi käytöstä, joten emme analysoi tätä toimintoa yksityiskohtaisesti - katso esimerkkikoodi.

Figuurin liike

// Jos vihollinen miehittää valitun solun, hyökkäämme,

// jos vapaa, niin liikumme, jos kiire omamme kanssa

// tai este - ohita klikkaus

Tile:= Kartta.HiiriTile(HiiriX, HiiriY);

jos(Laatta = nolla)// Napsauta peliikkunan ulkopuolella

sitten poistua;

// Liikkuva

jos(Tile.Objects.Count = 0)

ja(Dist(itse)

ja ei Siirretty sitten

// Katsotaan pääsemmekö perille

jos ei HasWay (laatta) sitten poistua;

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

// Peli on vuoropohjainen - siirry välittömästi

Siirretty:= tosi;

//

jos Hyökkäsi sitten

Icon.IsVisible:= väärä;

// Hyökkäys

jos(Tile.Objects.Count > 0)

ja(Dist(itse)

ja ei Hyökkäsi sitten

Obj:= Tile.Objects;

// Hyökkäämme vain vihollisia vastaan

jos Obj.Side = Side sitten poistua;

Obj.Vahinko(dmg);

Hyökkäsi:= tosi;

// Jos siirto on valmis, poista kuvake

jos Siirretty sitten

Icon.IsVisible:= väärä;

Siirto käsitellään seuraavasti (katso ”Palojen siirto”). Napsautettu solu sijaitsee. Jos siinä on vihollinen ja he ovat kantaman sisällä, hän loukkaantuu; jos se on tyhjä ja kantaman sisällä, nappula liikkuu (jos esteet sallivat); jos se on miehitetty, mutta ei vihollinen, napsautus jätetään huomiotta. .

Kun molemmat osapuolet lähestyivät, lohikäärmeet toimivat. Ne toimivat hyvin yksinkertaisesti: he valitsevat lähimmän ei-lohikäärmeen, joka on 7 ruudun säteellä niistä, ja hyökkäävät. Katso Dragon Actions -koodi.

Lohikäärmeen toimet

// Tarkastetaan laattoja 7 ruudun sisällä lohikäärmeestä

varten i:= Max(0, x - 7) to Min(maksimikoko, x + 7) tehdä

varten j:= Max(0, y - 7) to Min(maksimikoko, y + 7) tehdä

jos (Map.Tiles.Objects.Count > 0) ja

(Map.Tiles.Objects.Code>1)

// 0 - estekoodi, 1 - lohikäärme

sitten alkaa

// Siirrettävän pisteen valitseminen

jos x=i sitten ax:=i

muu jos x>i sitten ax:=i+2

muu ax:= i-2;

jos y=j sitten voi:=j

muu jos y>j sitten ay:= j+2

muu ay: = j-2;

MoveObj(EI, ax, ay);

// Hyökkäämme

Map.Tiles.Damage(12);

// Kierteen katkaiseminen: enintään yksi hyökkäys

// jokainen lohikäärme kierrosta kohti

Lopuksi on vain tarkistettava, ovatko yli puolet obeliskeistä yhden puolen joukot miehittäneet - ja jos ovat, lopeta peli ja julista voittaja!


Meillä on siis strategiapeli. Täydelliseen onnellisuuteen puuttuu kuitenkin ensinnäkin tekoäly, joka mahdollistaa pelin yhden pelaajan tilan (emme pidä yksinkertaisinta toimenpidettä lohikäärmeiden hallitsemiseksi). Näin teemme ensi kerralla. Nähdään kuukauden päästä!

Tulevissa numeroissa

Seuraavissa numeroissa puhumme:

  • hiukkasjärjestelmät savun, kipinöiden jne. näyttämiseen;
  • työskennellä avoimuuden kanssa;
  • kolmiulotteiset moottorit;
  • Tekoälyn perusteet;
  • ohjelman virheenkorjaus;
  • pelisuunnitelman ja käsikirjoituksen luominen,
  • suunnitteluasiakirjan kirjoittaminen;
  • pelin tasapaino;
  • pelihahmojen ja niiden linjojen miettiminen;
  • Photoshop- ja 3D-pakettien kanssa työskentely;
  • animaatiot;
  • musiikki ja ääninäyttelijät;
  • ja paljon enemmän.

On täysin mahdollista oppia tekemään kaikki tämä omin käsin. Pian näet tämän.

Kirjoittakaa meille…

Niille, jotka ajattelevat, että pakettia voidaan täydentää jollakin: ensinnäkin älä unohda, että ei ole olemassa Viimeinen versio paketti, mutta vain se, joka toteuttaa artikkeleissamme kuvatut toiminnot. Ehkä osa ideoistasi on jo toteutettu ja odottaa vuoroaan (katso sivupalkki ”Tulevissa numeroissa”). Ja joka tapauksessa: kun tarjoat meille ideaa, yritä perustella, miksi ehdotuksesi on hyödyllinen useille peleille kerralla, ei vain sinun omalle pelillesi.

Itsenäiseen työhön

Seuraavaa numeroa odotellessa voit työstää omaa projektiasi tai yrittää parantaa tätä. Tässä muutamia ideoita omaan toteutukseen:

  • jakaa esteet tuhoutuviin (puut ja pensaat) ja tuhoutumattomiin (kivet) ja varmista, että tulipallot ja lohikäärmeen hengitys polttavat kasvillisuutta;
  • luoda kuoppia (ruskea solu) tai useita kierroksia leimaava tuli (punasolu) palon syttymispaikkaan;
  • anna miekkamiesten ja ritarien peittää naapurinsa ja antaa heille +1 puolustukseen;
  • tehdä hahmojen liikkeestä näytöllä sujuvaa.

Entä jos reaaliajassa?

Reaaliaikaisen strategiapelin tekeminen ei ole sen vaikeampaa, jos vain annat pelaajille erilaisia ​​syöttötapoja. Helpoin tapa tehdä tämä on verkon kautta - puhumme tästä yhdessä tulevista numeroista. Myös seuraavat muutokset ovat tarpeen:

  • kenttää ei tarvita Pelin nopeus luokassa TObeliskObject- käytä perusmoottorin nopeutta (liikkeen nopeus näytön poikki on yhtä suuri kuin pelin nopeus);
  • etäisyyksien kokonaislukulaskenta ei ole käytössä;
  • hahmon liikekoodi kirjoitetaan uudelleen ottaen huomioon, että esteiden ympärille on piirrettävä lentorata;
  • Siirron lopetuspainike poistetaan.

Siinä kaikki. Yritätkö tehdä sen itse?

Nykyään voit löytää helposti monia kaupankäyntistrategioita, ainoa ongelma on, että useimmat niistä eivät joko toimi tai eivät ole tarpeeksi tehokkaita. Tällaisessa tilanteessa strategian luominen tyhjästä on erinomainen ratkaisu ongelmaan.

Ja vaikka jokaisessa erityistilanteessa ajoneuvon luominen on erilaista, päävaiheet pysyvät samoina. Eli voit luoda jotain universaalin oppaan kaltaista, käymällä peräkkäin kaikki vaiheet läpi, ja lopussa saamme täysin toimivan järjestelmän.

Vaikka harkitsemmekin vaihtoehtoa luoda strategia alusta alkaen ideasta ja päättyen suodattimen käyttöönottoon ja ajoneuvon lopulliseen kehittämiseen, tämä ei tarkoita, että kaikki valmiit järjestelmät pitäisi heti hylätä, koska ne ovat ilmeisen tehottomia. . Useita TS:itä voidaan käyttää perustana ja yksinkertaisesti lisätä muutama suodatin väärien signaalien karsimiseksi.

Strategian luomisen päävaiheet

Jos otat 5-7 osoitinta satunnaisesti ja yrität luoda niistä toimivan ajoneuvon, jotain hyödyllistä ei todennäköisesti tule ulos. Ensin sinun on mietittävä strategian pääidea ja vasta sitten siirryttävä työkalujen valintaan. Voidaan ehdottaa seuraavaa toimintosarjaa:

  • jos järjestelmä on luotu tyhjästä, niin ensimmäinen askel on työstää ideaa. Tässä vaiheessa sinun on vain päätettävä, mikä on kaupankäyntityylisi, esimerkiksi tehdäänkö liiketoimia trendin mukaan vai sitä vastaan, vai ehkä strategia on suunniteltu yksinomaan purkamista varten. Emme vielä ajattele yksityiskohtia;
  • Kun olet valinnut sopivan kaupankäynnin tyylin, voit alkaa miettiä yksityiskohtia. Ennen välineiden valintaa sinun on määritettävä selkeästi toimivat valuuttaparit ja aikakehykset, kaupankäyntiaika jne.;

Tärkeä! Aikakehystä valittaessa ei kannata mennä liian pieneksi, varsinkin jos kauppiaalla ei ole kokemusta pienillä aikaväleillä spekuloinnista. Aloittelijoille on yleensä parempi olla alle H1-H4, voit lukea lisää optimaalisen aikavälin valitsemisesta.

  • seuraava vaihe on sopivien instrumenttien valinta, ja tässä valinnan runsaus voi pilata elinkeinonharjoittajaa julman vitsin, sillä hänellä on käytössään kymmeniä indikaattoreita, kyky käyttää kynttilänjalkaa, aalto-, teknistä ja perusanalyysiä. Kaikesta tästä valikoimasta sinun on valittava useita instrumentteja, jotka sopivat parhaiten aiottuun kaupankäyntityyliisi;
  • Yksi minkä tahansa strategian pääsäännöistä on, että vastaanotettu signaali on vahvistettava useilla suodattimilla, mutta niiden määrää on suositeltavaa rajoittaa. Esimerkiksi indikaattoristrategioissa ei ole toivottavaa, että indikaattoreiden lukumäärä ylittää 3-4, muuten signaaleissa on hämmennystä, ja jos aiot työskennellä teknisen analyysin avulla, indikaattoreilla on tukirooli;
  • asennon tukemista koskevia sääntöjä on kehitetty, tuloksena tulisi olla toimialgoritmi minkä tahansa skenaarion mukaan;
  • viimeinen vaihe on käyttää ajoneuvoa ensin historiatilillä ja sitten demotilillä, tai vielä parempi, oikealla sentin tilillä. Päätavoitteena on testata strategian toimivuutta todellisissa olosuhteissa, ja oikealla tilillä (jopa sentin) voit kokea kaikenlaisia ​​tunteita euforiasta tappioiden katkeruuteen.

Voit myös neuvoa, ettet jää kiinni ajoneuvon monimutkaisuudesta. Käytäntö osoittaa, että liiallinen monimutkaisuus ei ole ollenkaan osoitus tehokkuudesta. Miten yksinkertaisempi järjestelmä, sitä helpompi on käydä kauppaa.

Mitä ajoneuvoon pitäisi sisällyttää

Strategian luominen on vähän kuin rakennussarja; sinun tarvitsee vain valita oikeat osat. Kun luot ajoneuvoa, voit ja sinun tulee käyttää:

  • indikaattoreita. Lisäksi sinun ei pidä jahtaa niiden määrää tai liiallista monimutkaisuutta, jopa täysin mekaanisissa ajoneuvoissa 3-5 kappaletta riittää;
  • graafiset kuviot - tunnetut liput, viirit, kolmiot, pää ja olkapäät, kaksoispohjat ja topit toimivat edelleen hyvin;
  • graafiset rakenteet;
  • Fibo tasot;
  • perusanalyysin elementit - nyt on vaikea ansaita rahaa pelkästään uutisilla, mutta kaupankäynnissä on otettava huomioon talouskalenteri. Ainakin vain siirrä liiketoimet nollatulokseen ennen tärkeiden Yhdysvaltojen tai Euroopan tilastojen julkistamista tai jopa sulkee voiton kokonaan.

On myös useita tekniikoita, joiden edut ovat kyseenalaisia:

  • Martingale on alun perin kannattamaton taktiikka, ainoa onnistumismahdollisuus on, että ennen tappiota pystyt palauttamaan talletuksen ja ansaitsemaan vähän;

  • Ei myöskään ole toivottavaa käyttää lukitusta, ellei se ole ehdottoman välttämätöntä; silloin on melko vaikeaa poistua linnasta;
  • On myös parempi olla käyttämättä ulkopuolelta tulevia signaaleja. Ulkopuolelta tulevat signaalit tarkoittavat esimerkiksi myyjien/ostajien lukumäärän vertailua, erilaisia ​​kauppiaiden enemmistön mielialan indeksejä jne. Mutta on myös useita resursseja, joita voit kuunnella, esimerkiksi Autochartist antaa hyviä signaaleja graafisten kuvioiden perusteella;
  • On myös parempi olla käyttämättä aaltoanalyysin elementtejä (ainakin aloittelijoille). Vaikka tässä on poikkeuksia, esimerkiksi kauppa Wolfe Wavesilla perustuu juuri aaltoanalyysiin, mutta se ei ole erityisen monimutkaista.

Yksinkertaisen indikaattoristrategian kehittäminen

Oletetaan, että strategian pääideana on käydä kauppaa yksinomaan trendin suuntaan. Lisäksi tulet markkinoille ei trendin ilmaantumisen hetkellä, mikä on melko riskialtista, vaan pienen korjauksen jälkeen.

Strategian pitäisi toimia melkein kaikilla valuuttaparilla; tämä on välttämätöntä, koska suuren aikakehyksen vuoksi signaaleja ei esiinny kovin usein. Tilannetta siis arvioidaan 5-7 valuuttaparilla samanaikaisesti. Aikakehyksen osalta D1 sopii; lähdemme siitä, että Forex alkuvaiheessa on vain lisäys päätyöhön, joten käymme kauppaa päivittäisillä kynttilöillä.

Nyt sinun on päätettävä, kuinka sisäänpääsyn hetki määritetään. Trendin tunnistamiseen on monia vaihtoehtoja:

  • visuaalisesti - mutta katselu ei anna sinun kehittää selkeitä kaupankäyntisääntöjä;
  • käyttämällä yhtä tai useampaa liukuvaa keskiarvoa;
  • ADX-indikaattorin arvon mukaan, jos yli 30, niin on vahva trendi, alle 20, markkinat ovat rauhalliset;
  • graafisten rakenteiden käyttö;
  • Bollinger Bands antaa sinun arvioida trendin voimakkuutta kanavan ylä- ja alarajojen välisen etäisyyden perusteella.

Yleensä vaihtoehtoja on monia, mutta koska strategian tulee olla mahdollisimman yksinkertainen, keskitymme liikkuviin keskiarvoihin. Tai pikemminkin yksi MA, arvioimme trendin suunnan hinnan sijainnin perusteella. Voit aloittaa jaksoilla, jotka muodostavat keskihinnan kokonaisen ajanjakson aikana (viikko, kuukausi, vuosineljännes jne.), esimerkiksi 20 on viimeisen kuukauden keskihinta. Vaikein asia on valita sopiva MA-jakso, mutta tässä sinun on edettävä yrityksen ja erehdyksen avulla.

Kaupankäynnin pääidea on seuraava: odotamme trendiliikkeen ilmestymistä, sitten seuraa korjaus yhden päivän sisällä, sen päätyttyä kauppa solmitaan. Jos kaikki tämä esitetään selkeiden sääntöjen muodossa, toimintojen algoritmi näyttää tältä (ostojen esimerkin avulla):

  • ensin tarkistamme hintaaseman suhteessa MA:han, hinnan tulee olla viivan yläpuolella;
  • Seuraavaksi meidän on löydettävä trendiliike, tarvitsemme kynttilän, jolla on suuri runko ja pienet varjot (on suositeltavaa, että varjon arvo ei ylitä 10-15% kynttilän rungon koosta);
  • sen jälkeen tulisi kynttilä, jolla on pieni päivittäinen vaihteluväli (etäisyys korkeasta läheiseen). Sulkemishinnan ei pitäisi saavuttaa 50 % edellisen päivän tasoa - tänä päivänä tapahtuu hinnankorjaus.

Tässä tapauksessa korjaus voi tapahtua kahdella skenaariolla:

  • Kun kynttilä, jonka alla on pitkä varjo, muodostuu, voit avata kaupan heti päivän päätteeksi. Tämä kynttilän muoto osoittaa, että korjaus on jo suoritettu;
  • mahdollinen vaihtoehto on, kun korjauskynttilä sulkeutuu minimissä, ts. palautus ei ole vielä valmis, tässä tapauksessa sinun on odotettava, kunnes seuraava kynttilä sulkeutuu; jos se on valkoinen, voit avata pitkän asennon.

Asennon säilyttämisen ja suojakäskyjen osalta stop loss tulisi sijoittaa vähintään suuren rungon kynttilän keskikohdan ulkopuolelle. Tavoitetason saamiseksi riittää, että laitat saman kynttilän arvon ostotasolta syrjään, voit käyttää loppupysähdystä.

Strategian säännöt on muotoiltu, jäljellä on vain testata sitä toiminnassa. Käytäntö osoittaa, että jopa tällainen yksinkertainen algoritmi tuottaa yli puolet kannattavista kaupoista (ja jos siirrät kaupan nollaan aikaisin, tappion todennäköisyys pienenee).

Sisäänpääsy trendin alussa

Yllä ehdotettu TS ohittaa osan trendiliikkeestä, mutta se ei vaadi paljon aikaa markkina-analyysiin. Jos on mahdollista seurata päivän hinnan käyttäytymistä, voit yrittää ajaa trendiä sen muodostumisen alussa. Strategian pääideana on siis päästä markkinoille sen jälkeen, kun hinta alkaa poistua horisontaalisesta kanavasta.

Ja tässä on erittäin tärkeää saada luotettava signaali ajoissa, trendin alussa. Liukuvat keskiarvot voivat jälleen tulla apuun, mutta niitä tullaan käyttämään hieman eri tavalla kuin edellisessä strategiassa. Voit ottaa useita MA:ita eri ajanjaksoilla ja arvioida trendin muodostumista niiden sijainnin perusteella suhteessa toisiinsa.

Tämä ei ole vallankumouksellinen lähestymistapa; Bill Williams käytti jotain vastaavaa kuuluisassa alligaattorissaan. Tämä indikaattori voidaan siis ottaa jopa TS:n perustana.

Jos lisäämme H1:een Alligaattorin vakioasetuksilla, voimme nähdä, että se antaa paljon vääriä signaaleja, meidän tehtävämme on karsia ne pois. Tätä varten tulemme markkinoille odottavalla tilauksella, jonka sijoituksen taso määritetään Fractalsin avulla.

Tämän seurauksena työnkulku näyttää tältä (ostojen esimerkin avulla):

  • Etsimme tasaista aluetta kartalta (kaikki alligaattoriviivat kietoutuvat kaoottisesti toisiinsa);
  • Seuraavaksi tarvitset fraktaalikynttilän (ja sen tulisi sijaita viivojen yläpuolella, koskematta niitä edes alemmalla varjolla);
  • osto-stop-määräys tehdään juuri maksiminsa yläpuolelle ja suojamääräys konsolidointivyöhykkeen alarajan yli;
  • TP on joko kiinteä (50-70 p) tai käytä loppupysähdystä. Yleensä trendiliikkeen voimakkuutta on melko vaikea ennustaa, joten on parempi käyttää perässä olevaa pysähdystä kuin kiinteää TP:tä tai määrittää tavoitetaso käyttämällä samaa teknistä analyysiä.

Tämä esimerkki ei ole strategian kehittäminen tyhjästä, vaan ennemminkin jo tunnetun strategian lievä mukauttaminen nykyaikaisille markkinoille.

Esimerkki yksinkertaisesta yhdistetystä järjestelmästä

Ajatus on edelleen sama - merkintä korjauksen lopussa, mutta ratkaisemme tämän ongelman eri tavalla. Tavoite pysyy samana - määrittää korjauksen valmistumishetki ja mennä trendin suuntaan, mutta jos aiemmin käytimme liukuvaa keskiarvoa, niin nyt käytämme Fibo-tasoja ja oskillaattoria määrittämään palautuksen valmistumisen.

Tulemme olemaan kiinnostuneita selvästä trendiliikkeestä, joka voidaan määrittää myös visuaalisesti. Tämän jälkeen sinun tarvitsee vain venyttää Fibo-tasot siihen, tämä on tarpeen mahdollisten tasojen määrittämiseksi korjauksen suorittamiseksi. Merkittävin korjaustaso on 38,2 %, levypalloilla saa käydä kauppaa 50 %:sta 61,8 %:iin.

Mutta se, että hinta koskettaa Fibo-tasoa, ei riitä, vaan tarvitaan vahvistus. Stochastic selviytyy tästä tehtävästä melko hyvin (voit kokeilla RSI:tä samaan tarkoitukseen). Esimerkiksi ostotapahtumassa hinnan tulee olla lähellä korjaustasoa ja stokastisen senhetkisen on oltava ylimyytyvyöhykkeellä.

Kun hinta koskettaa tasoa, odotamme kunnes Stochastic poistuu ylimyytyvyöhykkeeltä ja ostaa. Pysäytys voidaan sijoittaa seuraavan korjaustason yli, ja TP voidaan sijoittaa vähintään viimeaikaiseen huippuun ennen takaisinvedon alkamista.

Fibo-tasot ja oskillaattori ovat vain vähimmäisvaatimus signaalin vastaanottamiseen. Halutessasi voit monimutkaistaa järjestelmää ottamalla käyttöön lisäsuodattimia.

Tekniseen analyysiin perustuvat strategiat

Jos teknistä analyysiä käytetään puhtaassa muodossaan, tehtävästä tulee jonkin verran yksinkertaisempi, eikä ajoneuvoa enää tarvitse kehittää tyhjästä. On olemassa useita tekniikoita ja työkaluja, joiden toimivuutta on testattu vuosien varrella, ja kauppias voi vain valita sopivat ja käyttää niitä rakentamisessa.
Periaatteessa onnistuneeseen kaupankäyntiin riittää:

  • trendiviivat - rakennamme ne eri aikaväleille alkaen korkeimmasta ja laskemalla vähitellen toimivaan;
  • Fibo-tasot, ne pitäisi venyttää historian merkittäviin hintaliikkeisiin. Korjaustasot 38,2, 50 ja 61,8 % ovat avainasemassa, käytäntö osoittaa, että korjaus päättyy useimmiten näihin pisteisiin;
  • MT4 toteuttaa myös useita muita teknisiä analyysityökaluja, kuten Andrews pikihaarukat, joukon Gann-työkaluja, monenlaisia ​​kanavia jne.

Mutta melko tarkkaan ennusteeseen riittää Fibo-tasot ja trendiviivat, tasojen ja viivojen keskittymäalueet toimivat yleensä tukena/vastuksena. Kaupankäynti voidaan suorittaa sekä purkamista varten että palautusta tasoilta ja linjoilta.

Mitä tulee lisäsuodattimiin, voit lisätä kynttilänjalkakuvioita ja jonkinlaisen indikaattorin erojen etsimiseen (sama Stochastic tai MACD). Voit lukea lisää teknisen analyysin käytöstä.

Suodattimet kaupankäyntijärjestelmiin

Mikä tahansa kaupankäyntiväline, vaikka idea toimisi ja kaupankäynti on yleensä kannattavaa, tuottaa paljon signaaleja ja osa niistä on kannattamattomia. Kun järjestelmäsäännöt on muodostettu, voit käyttää useita yleisiä suodattimia, jotka auttavat parantamaan kannattavien ja kannattamattomien tapahtumien suhdetta.

On olemassa useita suodattimia, jotka sopivat melkein kaikkiin strategioihin:

  • tilanne korkeammilla aikaväleillä. Jos strategia toteutetaan esimerkiksi H1:llä mekaanisen strategian mukaisesti, ei olisi väärin katsoa, ​​mitä H4:llä ja D1:llä tapahtuu;
  • keskimääräinen päiväväli, mikä tarkoittaa etäisyyttä, jonka hinta kulkee keskimäärin päivässä; kun käydään kauppaa päivän sisällä, tämä auttaa suodattamaan useita signaaleja. Kuvitellaan, että päivän aikana hinta liikkuu keskimäärin 100-120 pistettä, jos jonakin päivänä hinta oli iltaan mennessä jo ylittänyt 90-100 pistettä yhteen suuntaan ja TS antaa signaalin tulla markkinoille samaan suuntaan, niin on järkevää jättää se huomiotta , tilastot sanovat, että liikenne ei todennäköisesti jatku tänä päivänä;

Tärkeä! Tämän säännön noudattaminen johtaa siihen, että jotkut kannattavat kaupat jäävät väliin, mutta kannattavien/tappiollisten kauppojen suhde kasvaa.

  • Myös kynttilöiden määrällä signaalin muodostuksen jälkeen on väliä, siellä on jopa 5 kynttilän suodatin, jota käsittelemme tarkemmin.

Kun TS antaa signaalin, niin ihannetapauksessa tilanteen pitäisi alkaa kehittyä eduksemme melkein heti kaupan tekemisen jälkeen (eli seuraavilla 1-3 kynttilällä). Jos näin ei tapahdu, niin mitä enemmän aikaa on kulunut kaupan tekemisestä, sitä pienempi vaikutus markkinoihin on niillä tekijöillä, joilla oli merkitystä kauppiaan tullessa markkinoille. Niiden vaikutus hiipuu ajan myötä.

Voit ottaa 5 kynttilää kriteeriksi, jos hinta ei ole kaupan tekemisen jälkeen liikkunut kannattavaan suuntaan 5 kynttilän kohdalla, niin on parempi tehdä kauppa manuaalisesti. Tämä tarkoittaa skenaariota, jossa kaavio pysyy paikallaan, mutta jos hinta on mennyt kannattamattomalle puolelle, tätä suodatinta ei käytetä.

Tämä ehto koskee lähes kaikkia aikajaksoja (poikkeuksena m1-m5). Tietysti on vielä mahdollisuus, että hinta yhden markan ympärillä liikkuu oikeaan suuntaan, mutta valintamme on vakaus. On parempi uhrata pari kannattavaa kauppaa, mutta välttää 3-5 kannattamatonta.

Yhteenveto

Työn aloittaminen ilman kaupankäyntijärjestelmää on kuin kuolema, jokaisen kauppiaan tulisi muistaa tämä. Tässä tapauksessa talletuksen menettäminen on vain ajan kysymys.

Sopivan ajoneuvon valitseminen ei ole vaikeaa, lisäksi voit löytää hyviä toimivia järjestelmiä julkisesti. Voit myös murehtia oman strategian luomista, varsinkin kun se ei vaadi ohjelmointikielten osaamista, tarvitset vain käsityksen ja vähintään perustiedot siitä, miten markkinat toimivat ja mitä indikaattoreita mihin tarkoituksiin käytetään.

Itse prosessi muistuttaa rakennussarjan kokoamista - ensin asetamme ongelman ja sitten valitsemme vain tarvittavat työkalut sen ratkaisemiseksi. Kun olet tarkistanut historian, voit jatkaa TS-testiä demo- tai senttitilillä.


Ylös