În fiecare zi, jocurile devin din ce în ce mai complicate și captivante. Mii dintre ele sunt publicate pe Steam în fiecare an. Sunt distribuite pe diferite platforme și categorii. Audiența jucătorilor crește rapid. Numărul de dezvoltatori este, de asemenea, în creștere rapidă. A fi un indie, sau mai degrabă un dezvoltator de jocuri solo, a devenit dificil. Dar romantismul independenței te face să începi să dezvolți un joc indie din nou și din nou. În articol, vom vorbi despre cum să supraviețuiești pe această cale și despre cum să dezvolți jocuri cool în condiții grele de competiție.
Mai multe despre subiect: Programe gratuite pentru dezvoltarea jocurilor
Deși există tehnologii noi pentru crearea jocurilor, în fiecare an dezvoltarea lor devine din ce în ce mai dificilă. Există trei motoare de top: Unity, Unreal Engine 4, CryEngine 5. Se vorbește constant despre ele și sunt folosite de diferiți dezvoltatori pentru a dezvolta diferite proiecte. Cu toate acestea, complexitatea acestor instrumente a trecut granița imaginabilă. Sunt uriași, funcționalitatea lor a atins proporții cosmice. Toate aceste posibilități pot fi folosite de studiourile mari, dar pentru un dezvoltator solo este personal excesiv, nu are nevoie de el, deoarece implementarea lui necesită resurse suplimentare, pe care indienii oricum nu le au (și-a ipotecat casa pentru a-și dezvolta jocul de vis) . Și dacă acesta nu este un joc AAA, atunci implementarea acestor funcții este inutilă.
Când începeți să creați un joc indie, trebuie să calculați bugetul cu aproximativ un an în avans și să economisiți destui bani pentru a dezvolta jocul visat. Este mai bine să începeți în timp ce lucrați într-un loc de muncă obișnuit de birou. După ce ai ales un subiect pentru joc, scrie un dizdok. Este chiar necesar să se creeze prototipuri arătând animații GIF pentru comunitatea de internet. Și numai atunci când următorul prototip primește aprobarea publică, dezvoltarea completă poate începe.
Conţinut
De asemenea, funcția resetPlayers oprește și dezactivează toate proiectilele trase de tancuri, resetează parametrii tancurilor la valorile lor inițiale.
Apoi, în funcția de foc are loc activarea, poziționarea, atribuirea vectorului de mișcare și viteza proiectilului. La începutul jocului, am creat 20 de proiectile și le-am ascuns în afara ecranului, făcându-le inactive, astfel încât la momentul potrivit să nu pierdem timpul creând și inițialând proiectilul, ci, după ce îl poziționăm, îl lansăm imediat. Prin urmare, în această funcție, în ciclul de la 1 la 20, verificăm prezența unui proiectil liber inactiv. Când este găsit, devine activ, ca și părinte i se atribuie numărul care a tras tancul, proiectilul revine în același mod ca și tancul-mamă, poziția corespunzătoare este atribuită tancului. Folosindoperațiuni cu sinus și cosinus, i se atribuie un vector de zbor, apoi în funcția setankfiredest, recurgând la o expresie matematică subtilă, calculăm punctul de aterizare al proiectilului.
În ciclul funcției moveFire, parcurgem toate proiectilele și pentru acelea dintre ele care sunt active, creștem poziția în funcție de vector și viteză. Dacă proiectilul iese din zona de joc, pur și simplu îl facem inactiv, cu alte cuvinte, îl punem în lista gata de utilizare.
Funcția checkHit verifică dacă un proiectil lovește vreun tanc. Ciclul exterior trece prin rezervoare, ciclul interior trece prin scoici. Primul lucru din interior este că se verifică posibilele coliziuni ale proiectilului cu celula de podea, sunt 192 în total, iar numerotarea lor începe cu 200. Dacă a avut loc o coliziune cu celula de podea (racheta a ajuns la destinație) , nu este nevoie să facem verificări suplimentare, facem proiectilul inactiv. Următoarea verificare se asigură că racheta trasă nu aparține tancului care a tras-o. Dacă trece, verificăm ciocnirea proiectilului cu tancul inamic. Dacă se înregistrează coliziunea, reducem numărul de vieți ale tancului lovit, oprim racheta, o punem în lista disponibilă pentru următoarea lovitură. Această funcție returnează numărul rezervorului eliminat.
Funcția makeLevel, după cum sugerează și numele, creează o hartă de nivel. În primul rând, parcurgem toate cele 192 de „cărămizi” într-un ciclu dublu, făcându-le invizibile și inactive. În continuare, facem vizibile doar câteva obstacole.
Ultimele trei funcții sunt de natură auxiliară. Funcția wrapAngle, bazată pe valoarea unghiului primită, returnează valoarea sa echivalentă, care nu iese din intervalul 0-360. GetDistance primește patru parametri — coordonatele a două puncte și returnează rădăcina extrasă din expresia calculată de teorema lui Pitagora; deci funcția returnează distanța dintredouă puncte. Și în sfârșit, findAngle, primind coordonatele a două puncte, returnează diferența dintre cele două unghiuri.
Jocul este gata, codul este scris, poate fi rulat pentru execuție. Dar nu uitați să copiați materialele artistice necesare în articol (din subfolderul media al directorului jocului). Arta pentru joc constă din șapte fișiere.
Pregătirea și distribuția construcției
Testare pe dispozitive mobile
Nu vom putea juca acest joc pe un smartphone, deoarece are comenzi de la tastatură și, desigur, nu are pe telefon, dar putem rula aplicația pe dispozitiv pentru a o testa.
Atunci când dezvoltați jocuri cu ajutorul AGK, nu numai că le puteți testa instantaneu pe un desktop, dar le puteți testa și pe un dispozitiv mobil în același mod, fără să vă deranjați cu instalarea SDK-ului și pregătirea build-ului. Pentru a face acest lucru, trebuie să descărcați și să instalați utilitarul AGK Player pe dispozitivul dvs.
Cum se creează un joc. AGK Player
Am testat pe o tabletă Android, dar există o versiune echivalentă a playerului pentru iOS. Când utilitarul este instalat, trebuie să conectați dispozitivul la computer (prin un cablu USB sau Wi-Fi), să lansați AGK Player și să faceți clic pe pictograma Broadcast de pe desktop în AGK IDE. AGK se conectează la dispozitiv, va transfera date și jocul tău va începe în player.
Exportați versiunea
Când jocul este testat și remediat, trebuie creată o versiune pentru publicarea sa în magazin. Pentru a face acest lucru, utilizați comanda de meniu File ? Export proiect „Tanki”? Ca Android Apk, deschideți fereastra Export Android APK, care vă oferă să setați proprietățile pachetului creat.
Cum să creezi singur un joc. Exportați Android APK
În zona Setări APK, în lista derulantă Tip APK, vi se solicită să selectați platforma țintă Google, Amazon, Ouya. Nume aplicație — numele programului din sistemul de operare, Numele pachetului — numele pachetului,de exemplu com.yazevsoft.Tanki. Pictogramă aplicație — o pictogramă de program, Pictogramă de notificare — o pictogramă de mesaj, Oaya Large Icon — o pictogramă în versiunea Android pentru consola de jocuri Oaya. Mai jos este orientarea și versiunea Android minim acceptată. Permisiunile sunt setate în zona de permisiuni - acces la componentele sistemului pe care va rula jocul nostru: înregistrare pe medii externe, acces la cameră, înregistrare audio, vibrații și altele. Zona Game Google Services/GameCircle Integration vă permite să setați un identificator pentru utilizarea serviciilor Google. În zona Ieșire, este specificată calea în care va fi salvat pachetul final. Zona Signing vă permite să configurați proprietățile pentru semnarea pachetului pentru plasarea lui în magazine: setați versiunea, fișierul de semnătură.
Povești alternative
La finalul articolului, voi adăuga că nu trebuie să vă opriți și să vă distribuiți programele/jocurile doar în magazinele de top - App Store, Google Play. Acolo, toate locurile sunt ocupate de mari editori, iar cumpărătorii se uită în primul rând la produsele lor.
Acordați atenție poveștilor alternative: Amazon AppStore, Opera Mobile Store, Yandex.Store și multe altele. Au mai puțini utilizatori, mai puțin trafic și mai puțină concurență. Nu recomand să vă limitați la cele trei enumerate, uitați-vă mai pe larg. Platforma Android este lider, între timp, pe lângă Apple AppStore, există platforme de distribuire a aplicațiilor iOS.
Apariția site-urilor alternative nu este legată doar de dorința inițiatorilor lor de a face bani, ci este și o chestiune de preferințe naționale. Vorbim despre țările lumii a treia și despre tovarășii estici - acestea sunt India, China, Vietnam și așa mai departe. Dispozitivele Android învechite predomină acolo, iar utilizatorii acestor dispozitive sunt gata să facă plăți mici pentru divertisment digital destul de des. Trebuie doar să înțelegeți corect această piață. Prin urmare, are sens să lansați programe/jocuri acolocooperarea cu distribuitorii locali. Un suflet estic subtil, înțelegi. Necesitatea de a vă localiza jocurile pentru utilizatorii locali este pe primul loc. În plus, jocurile de alte genuri pot fi populare în aceste țări: la fel ca peste tot, jocuri casual, puzzle-uri diverse, jocuri de acțiune, curse. Priviți următoarea imagine despre cercetarea de piață. Va ilustra clar cele de mai sus.
Concluzie
Să rezumam. Articolul a început cu o descriere a motivelor apariției motoarelor alternative și o prezentare generală a celor mai populare dintre ele. Apoi am discutat despre sursele de artă și alte lucruri pentru jocuri. Apoi, după ce am ales unul dintre motoare, am luat în considerare elementele de bază și am început să codificăm cu el un joc simplu 2D - tancuri clasice. Am dezvoltat o arcade simplă cu obstacole, inteligență artificială minimă, doi inamici și arme. După aceea, ne-am depanat jocul direct pe dispozitivul care rulează Android și, când totul a fost gata, am asamblat un pachet pentru instalarea jocului pe orice Android. Și toate acestea în cadrul unui articol.
Industria jocurilor de noroc în ansamblu, și cu atât mai mult scena indie, este în continuă mișcare, în continuă evoluție. Același lucru este valabil și pentru setul de instrumente al dezvoltatorilor indie. Progresează: apar instrumente noi, cele vechi se îmbunătățesc. Dacă mai devreme mă uitam la instrumentele de dezvoltare a jocurilor cu un zâmbet ironic, acum unele instrumente au ajuns într-o stare foarte impresionantă. Și, folosindu-le, puteți crea jocuri destul de interesante și cu aspect modern.
Scena indie a extins industria jocurilor de noroc. Ea a arătat că nu numai proiectele 3A cu grafică avansată pot fi interesante. Ea a diluat foarte mult acest stereotip. Acum jucăm jocuri cu pixel art, și jocuri cu design în tonuri închise, și jocuri în care întregul proces constă în citirea documentelor și pronunțarea unor judecăți pe baza acestora, ne uităm la monitor, interogând un presupus infractor,pentru a înțelege dacă este sau nu vinovat. Pentru că toate aceste jocuri au o semnificație profundă. Jucăm jocuri clasice vechi, cu grafică îmbunătățită, cu moduri noi și pe dispozitive moderne. Toate acestea au fost posibile prin indie. Jocurile indie poartă idei profunde, sunt jocuri pentru suflet pe care chiar vrei să le joci.
Dezvoltarea jocului cu AGKMotoare alternative
Înțeleg că există jocuri indie de toate genurile care se potrivesc tuturor gusturilor în zilele noastre (și asta este de fapt un lucru bun), dar prin jocuri indie în acest context înțelegem jocuri mici, 2D, orientate spre dispozitive mobile, realizate de creațiile unui dezvoltator solo (de care sunt marea majoritate), așa că utilizarea Unity, UE4 pentru prototipare va fi inutil de dificilă. Există o selecție largă de motoare alternative, sunt mai ușor de folosit și vă permit să obțineți rezultate impresionante în mai puțin timp, minus efectele speciale pe care un indie oricum nu le-ar pune în jocul lor. Uneori, aceste motoare nu necesită scriere de cod pentru a crea un joc cu drepturi depline pentru toate platformele. Am fost deosebit de emoționat la tema motoarelor alternative după participarea la conferința de la Moscova a dezvoltatorilor de jocuri video White Nights 2017, care a avut loc în octombrie. Am abordat dezvoltatorii indie, le-am arătat proiectele și am întrebat despre instrumentele folosite. În multe cazuri, nu au chemat deloc Unity, ci Construct 2 sau GameMaker Studio.
Ambele produse sunt designeri de jocuri bidimensionale care nu necesită abilități de programare (!). În Construct 2, creați un joc definind evenimentele jocului și reacționând la acestea. Jocurile finale sunt portate pe toate platformele populare. Programul vine cu documentație detaliată, un număr mare de exemple și șabloane, astfel încât este ușor de stăpânit. Este recomandat să cumpărați Raja pe Steam, acolo costul său pentru versiunea personală este de 6399 de ruble.
Cum să creați singur un joc. Construiți 2 cuun proiect deschisGameMaker Studio este un designer de jocuri popular, cu două opțiuni pentru construirea unui joc (similar cu UE4): prima este prin glisare și plasare, iar a doua este să scrie codul în limba proprie a sistemului. În funcție de platforma țintă, jocurile create cu GameMaker Studio sunt redate folosind OpenGL sau DirectX folosind tehnologiile de shader corespunzătoare. Motorul Box2D este acceptat pentru procesarea fizică. Sunt acceptate o gamă largă de dispozitive de intrare. Versiunea desktop a Steam costă 1.599 de ruble, exportatorii pentru alte platforme trebuie achiziționați suplimentar: da, exportatorul pentru web costă 2.579 de ruble, pentru UWP — 6.396 și aceeași sumă pentru sistemele mobile.
Cum să creezi singur un joc. GameMaker Studio
Al treilea motor alternativ care merită atenție este AppGameKit. Spre deosebire de cele două anterioare, atunci când dezvoltați un joc cu acesta, trebuie să scrieți cod într-un limbaj de scripting. În multe privințe, datorită acestui lucru, el m-a interesat mai mult decât pe alții. Costul acestui motor în Steam este de 2059 de ruble, inclusiv exportatorii pentru toate platformele acceptate. Frumoasa investitie. Pentru o descriere mai detaliata a componentei arhitecturale a motorului va trimit la articolul mentionat.
Obișnuiam să privesc cu mândrie aceste tulze, dar acum văd în ele o putere care se poate egală cu motoarele de top. Este timpul să le acordați atenție și să obțineți un set de joacă în platou.
De unde să obțineți artă și alte lucruri?
Dacă ești programator și desenezi/modelezi prost pe tine însuți, toate lucrurile necesare pentru prototip pot fi cumpărate din magazinele de motoare de top și alternative (de exemplu). Artă, sunete, shadere și alte lucruri pot fi găsite și pe Steam. Nu sunt atât de scumpe. Pot exista câteva mii de imagini într-un singur set, dar toate sunt pentru jocuri diferite, așa că le puteți avea pentru un prototip și va fi suficient, dar pentru un joc cu drepturi depline.eliberare – cu greu. Și atunci poate vei găsi artiști independenți care vor fi impresionați de jocul tău. Și acest lucru este corect, pentru că atunci când lucrezi cu arta achiziționată, ești forțat să-ți adaptezi intriga la arta existentă, și nu invers.
Dezvoltarea jocului cu AGK
Am ales AGK din trei motive:
- dezvoltarea jocului se bazează pe scrierea codului de două niveluri (Nivelul 1, 2); ca programator, îmi este mai ușor să mă obișnuiesc cu noul API decât cu noua interfață de editor;
- pretul este democratic;
- Am cumpărat acest motor acum doi ani, toate actualizările vin imediat ce apar.
Caracteristici suplimentare: AGK acceptă multe tipuri de controlere, da, pe lângă gamepad-uri, acceptă controlerul fără atingere Leap Motion. În plus, suportul VR este inclus în AGK.
Editor vizual
După rularea AGK, vedem doar editorul de cod fără niciun ajutor vizual cu care sunt bogate alte motoare. Cu toate acestea, în august, The Games Creator a lansat o aplicație, un fel de supliment pentru AGK, instrumentul Visual Editor. Se achiziționează separat pentru 899 de ruble). Acest editor vă permite să ajustați vizual conținutul scenei și nivelul jocului dvs., să importați imagini și modele 3D, să le plasați în scenă ca obiecte de joc, să ajustați poziția, dimensiunea, unghiul de rotație, culoarea și alte proprietăți folosind inspectorul de obiecte. . Puteți vedea cum arată scenele pe dispozitive cu diferite dimensiuni de ecran fără a părăsi editorul. În cele din urmă, scena poate fi salvată și conectată la AGK. Acesta va executa calm codul ca și cum acest fișier a fost creat chiar acolo. Editorul vizual face posibilă crearea de jocuri folosind drag & drop (nu complet, ci parțial), la fel ca ceilalți constructori discutați mai sus. Dar, să fiu sincer, aceasta nu este alegerea noastră.
Jocul poate consta din mai multe scene (de exemplu, principalameniu, teren de joc, ecran de victorie, ecran de înfrângere) și toate pot fi configurate în editor. Pot fi folosite casete de text, puncte de ancorare, crearea de animații și multe altele.
Cum se creează un joc. Editor vizual
Tancuri clasice
Motorul AGK este la fel de potrivit pentru crearea de jocuri 2D și 3D. Vom rămâne cu 2D din motive evidente: popularitatea pe mobil, platformele țintă, este una dintre ele.
Vom testa AGK pe tancuri, vom încerca să recreăm „tancurile clasice” din consola de jocuri NES din 1985 cu o grafică nouă. Cine nu este familiarizat cu subiectul, jocul se numește Battle City, în care a devenit prototipul pentru jocurile moderne despre războaiele cu tancuri (World of Tanks, „Tanks Online”). Prin urmare, lumea noastră va fi, de asemenea, bidimensională cu o vedere de sus.
Bazele AGK
Vom realiza dezvoltarea pe Tier 1 (Tier 1) - un limbaj de scripting similar cu BASIC modernizat pentru nevoile unui jucător. Primul lucru de reținut despre BASIC este că nu trebuie să puneți un punct și virgulă la sfârșitul unei instrucțiuni. Relaxează-te și bucură-te: nu există indicii și rătăciți de nivel scăzut, nici cursuri. Rolurile lor sunt îndeplinite de structuri. Puteți crea o instanță a unei structuri care se leagă de o constantă numerică. În viitor, la această copie se va face referire prin numărul care i-a fost atribuit. La executarea unei funcții, pentru a indica pe ce obiect se operează, numărul corespunzător trebuie trecut în primul parametru. Practic, există doar trei tipuri de date în AGK: întreg, real, șir. În general, acesta este tot ce trebuie să știți înainte de a începe să codificați jocuri pe AGK.
Să începem să codificăm
Nu vom folosi Editorul Vizual, vom scrie singuri tot codul (vezi exemplul din materialele articolului). Nu voi da listele de jocuri în articol, pentru că întotdeaunale gasesti in materiale. Voi scrie doar instrucțiuni scurte pentru codul executabil. Să creăm un nou proiect în AGK și să începem codificarea. Mai întâi, să inițializam fereastra de ieșire: setați titlul ferestrei, setați dimensiunea acesteia, specificați capacitatea de a schimba dimensiunea. Apoi vom seta rezoluția, posibila orientare a dispozitivului, frecvența de redesenare, vom seta utilizarea întregii zone a ecranului, ultima acțiune de inițializare va include utilizarea de fonturi vectoriale avansate în locul celor raster. Acest cod este inclus în șablonul de proiect. Mai jos este bucla principală a jocului: do … bucla. Afișează FPS și redesenează ecranul.
După inițializarea jocului se determină tipul de date pentru tanc, nu contează dacă este inamicul nostru, toate câmpurile sunt la fel. O declarație de tip începe cu cuvântul cheie Type, urmat de identificatorul de tip, în cazul nostru TTank. În primul rând, fiecare rezervor are nevoie de coordonate. În AGK, declarația este următoarea: x ca float. Rețineți că punct și virgulă nu este plasat la sfârșit. Al doilea mod de a declara variabile este pur și simplu de a le descrie. De exemplu, o variabilă de tip Integer poate fi declarată astfel:
1 | x = 4, real: x# = 4,4, șir: x$ = „patru” |
Adică se adaugă un caracter după identificator. În tipul șir, ghilimele simple sau duble pot fi folosite în mod egal pentru sarcina șir, principalul lucru este că închiderea este chiar și pentru deschidere. Apoi, setăm identificatorii pentru sprite, coliziuni, pentru steagul pentru a determina de care parte îi aparține tancul: jucătorului sau AI. Viteza, cadența de foc, numărul de vieți, steagul înfrângerii, cronometrul care măsoară numărul de secunde când tancul a fost învins, steagul setat când tancul a ajuns la un obstacol (necesar pentru II), două variabile sunt implicate în întoarcerea tancului: steagul setat la începutul rândul său, și numărullaturile virajului (necesar pentru II). Definiția tipului se termină cu cuvântul cheie EndType.
Apoi vom declara tipul obiectului proiectil. Are nevoie de: coordonatele locației, coordonatele destinației, id-ul pentru sprite, steag de activitate, steag de membru și viteză.
Să creăm două matrice: unul pentru tancuri, celălalt pentru obuze. Ceva de genul acesta: Dim tanks[6] ca jucător. La fel și cu al doilea.
Acum trebuie să încărcăm texturile. Acest lucru se face folosind funcția LoadImage, primul parametru trecând numărul la care va fi fixată imaginea, iar al doilea calea și numele fișierului. Toate resursele jocului sunt descărcate din subfolderul media al folderului jocului. Dosarul media este creat după prima compilare reușită. În același mod, încărcăm imaginea proiectilului. Vom crea toate cochiliile din ciclu. Descrierea buclei începe cu For makebullets = 1 la 20 și se termină cu incrementul variabilei buclei: Next makebullets. În corpul buclei, este creat un sprite (CreateSprite cu parametri: ID sprite, numărul texturii întins pe sprite), poziția acestuia este setată (SetSpritePosition), adâncimea stratului este setată (SetSpriteDepth), originea buclei. sprite-ul este deplasat (SetSpriteOffset).
După aceea, resetăm toți parametrii rezervorului la valorile lor implicite, acest lucru se face prin funcția noastră de resetare a jucătorilor. Funcția CreateTank este apelată de la aceasta. Ca parametri, primește: numărul tancului (index în matricea tancurilor), coordonatele, coeficienții de culoare, unghiul de rotație, aparținerea jucătorului sau AI. CreateTank creează un rezervor, determină poziția, viteza de mișcare, rata de tragere, unghiul de rotație. De asemenea, creează sprite-uri pentru rezervor, le ajustează culorile, numerele straturilor. Apoi, vom descărca textura de fundal și vom crea un sprite pentru ea, plus că vom avea nevoie de eatextura obstacolului. Să setăm tipul obstacolului - cărămizi. Acesta va conține doar două câmpuri: numărul de sprite și activitate. Poziția este setată la creare în bucla de mai jos.
Pentru joc, trebuie să încărcăm două sunete: o lovitură și o lovitură. Acest lucru se realizează prin funcția LoadSound, care acceptă un ID numeric și un nume de fișier. Pe desktop, AGK poate funcționa cu trei formate audio: WAV, MP3, Ogg, iar pe mobil cu alte două formate decât MP3, datorită faptului că acest format nu este gratuit. Creăm mai multe variabile globale: ora curentă, numărul nivelului curent. Apelăm funcția pentru a crea un nivel. Tot codul se află în spațiul global și va fi executat la lansarea jocului.
Apoi, ne scufundăm în bucla centrală a jocului nostru, al cărui corp este executat de 30 de ori pe secundă (depinde de frame rate, pe PC poate fi de 60). Aici, în primul rând, trebuie să obținem numărul de milisecunde (GetMilliseconds) care au trecut de la lansarea jocului. Apoi rulăm un ciclu prin toate obiectele jocului - tancuri. Dacă rezervorul nu se rotește, nu este doborât și poate fi controlat (pentru aceasta numim funcția controlplayer), pe de altă parte, îi creștem unghiul de rotație. Întoarcem un anumit rezervor în direcția vectorului mișcării sale. Dacă rezervorul se rotește mai mult de două secunde și a rămas fără vieți, resetați-i starea (resetați jucătorii). Apoi, pozițiile tuturor proiectilelor sunt actualizate în funcția movefire și se face o verificare pentru detonarea oricărui tanc - în lovitură de tanc. Acesta returnează numărul tancului lovit, care începe să se rotească în jurul axei sale, iar sunetul loviturii unui proiectil este de asemenea redat. Aceasta din urmă se numește funcția de reîmprospătare a ecranului.
Alt cod de program descrie funcțiile utilizate. Ele reprezintă partea cea mai interesantă - algoritmi de comportament de joc „în direct”.
Funcția controlplayer, în care este trecut numărul unui anumit rezervor,reacționează la intrarea utilizatorului, producând acțiuni adecvate. Fiecare cheie corespunde numărului său în sistemul ASCII, așa că mai întâi trebuie să declarăm constantele corespunzătoare cheilor:
1234 | #constant KEY_LEFT 37#constant KEY_UP 38#constant KEY_RIGHT 39#constant KEY_SPACE 32 |
Când jucătorul apasă tasta „Sus”, variabila Forward ia valoarea 1, când „Dreapta” turnarea variabilă ia 1, „Stânga” este -1. Când apăsați pe bara de spațiu, dacă rezervorul nu se rotește, se trage un foc (apelarea funcției makefire cu transferul numărului rezervorului), ținând cont că rezervorul poate trage la un interval de 500 de milisecunde.
În continuare, ne vom ocupa de gestionarea tancurilor II. Dacă tancul inamic este la cea mai apropiată distanță, AI-ul nostru simplu urmărește pur și simplu tancul jucătorului. Apropiindu-se de țintă, trage. Prin urmare, în primul rând, trebuie să găsiți unghiul dintre rezervoare. Acest lucru se face folosind funcția FindAngle. Coordonatele primului și celui de-al doilea obiect sunt transferate la acesta. Dacă al doilea rezervor este mai mic decât primul, atunci variabila viraj ia valoarea -2, dacă este mai mare, atunci 2. Următorul pas este să găsiți diferența de unghi. Apoi trebuie să știți distanța dintre rezervoare. Dacă este mai mare de 100 de pixeli virtuali, atunci tancul inamic se deplasează spre țintă. Apropo, în AGK, măsurătorile se fac în unități virtuale; dacă după începerea jocului sunt lăsate implicit, dimensiunea terenului de joc va fi 100 cu 100. Mărimea poate fi schimbată arbitrar, în acest caz va afecta doar locația și dimensiunea obiectelor. Tancul inamic trage în următoarele condiții: o lovitură o dată la două secunde, unghiul relativ dintre tancuri este mai mic de 20 de grade, iar distanța este mai mică de 500 de unități. În plus, în această funcție, este necesar să interziceți tancului să părăsească zona de joc.
Verificarea finală plasată în această funcție este o coliziune cu