Să facem un prototip un joc Trainpunk

Efectuarea rapidă a jocurilor prototip simple este o modalitate excelentă de a testa rapid ideile de joc noi, fără a se angaja să creați un joc plin de furie. Imi place sa folosesc Game Maker pentru acest lucru si in acest post voi impartasi un astfel de joc cu tine: Trainpunk, un joc de strategie bazat pe tren.

Nota editorului: Acesta este un nou tip de post pe care nu l-am mai încercat până acum. Spuneți-ne ce credeți și dacă doriți să vedeți postări similare în viitor!


Concept și demo de joc

Iată un videoclip despre mine, care schițează conceptul original pentru joc, și apoi despre mine, jucând jocul prototip în sine:

Mi-ar arăta desenul și artei, dar este atât de simplu încât nu există nici un motiv real.

În jocul final, două echipe de trenuri încearcă să atace baza inamicului în timp ce sunt împușcați de turle. Te joci aplicând upgrade-uri folosind butoanele din partea de jos.

Descărcați jocul final (plus codul sursă și spritele) și optimizați modul de joc cât doriți! Veți avea nevoie de o copie a Game Maker 8.


Construirea jocului

Iată o schemă detaliată a pașilor pe care i-am luat pentru a construi jocul. Puteți să urmăriți de la zero sau să folosiți acest lucru pentru a înțelege mai bine sursa completă.

Pasul 1

Descărcați Game Maker 8 și deschideți-l.

Pasul 2

Creaza un nou JOC obiect, cu următoarele proprietăți:

  • spiriduș: "Fără sprite"
  • Solid: fals
  • Vizibil: Adevărat
  • Adâncime: -999
  • Persistent: Adevărat
  • Mamă: (fără mamă)
  • Masca: (la fel ca sprite)

Dați-i aceste evenimente:

 #Create Event: execuție cod: alarmă [0] = 150; # Eveniment alarmă pentru alarmă 0: executați codul: alarmă [0] = 150; global.points + = 1; global.pointsB + = 1,25; Eveniment #Step: executați codul: if! Instance_exists (oUpgradeHP) if! Global.points = 0 global.points - = 1; instance_activate_object (oUpgradeHP); instance_activate_object (oUpgradeRA); instance_activate_object (oUpgradeSS); instance_activate_object (oUpgradeAS);  if! global.pointsB = 0 ID = alege (1,2,3,4); // dacă ID = 1 global.hp2 + = 1; dacă ID = 2 global.ra2 + = 4; dacă ID = 3 global.ss2 + = 1; global.as2 / 1.1; // global.pointsB - = 1;  dacă! instanță_există (oTurretA) instance_deactivate_all (true); somn (500); game_restart ();  dacă! instanță_există (oTurretB) instance_deactivate_all (true); somn (500); game_restart ();  # Alt eveniment: Joc Start: executați codul: // Train Team A global.hp1 = 5; // puncte de sănătate global.ra1 = 64; // Nivel global.ss1 = 6; // Shoot Speed ​​global.as1 = 30; // Viteza atacului // Echipa de tren B global.hp2 = 5; // puncte de sănătate global.ra2 = 64; // Nivel global.ss2 = 6; // Shoot Speed ​​global.as2 = 30; // Atacul de viteză global.points = 1; global.pointsB = 1; room_goto_next (); #Draw Event: execută codul: draw_set_color (c_black); draw_set_font (font0); // draw_text (x + 4, y + 4, "TEAM [PLAYER] - HP =" + string (global.hp1) global.ss1) + "- AS =" + șir (global.as1)); Draw_text (x + 4, y + 18, "TEAM [ENEMY_] - HP =" + șir (global.hp2) + "- RA =" + string (global.ra2) +. ss2) + "- AS =" + șir (global.as2));

Pasul 3

Creați un alt obiect nou, _Bloc, și să o facă solidă. Este doar pentru aspectul - nu se face prea mult.

Pasul 4

Creați încă un alt obiect nou, numit _BaseA, cu aceste proprietăți:

  • spiriduș: _BaseA
  • Solid: Adevărat
  • Vizibil: Adevărat
  • Adâncime: -1
  • Persistent: fals
  • Mamă: (nici unul)
  • Masca: (nici unul)
  • Sprite este doar un bloc de 16x16. Acum, dați-i aceste evenimente:

     #Create Event: executați codul: hp = 100; Eveniment #Step: executați codul: dacă hp < 0.9 instance_destroy();

    Pasul 5

    Iată o imagine a jocului final, pentru referință:

    De data aceasta, creați un obiect nou pentru a reprezenta unul dintre trenurile jucătorului (un dreptunghi alb pe piste). Sună-l _TrainA și dați-i aceste proprietăți:

    • spiriduș: _TrainA
    • Solid: fals
    • Vizibil: Adevărat
    • Adâncime: 0
    • Persistent: fals
    • Mamă: Faceți-i părintele _BaseA
    • Masca: (nici unul)

    Sprite ar trebui să fie un tren de 16x16, îndreptat spre dreapta. Dați obiect aceste evenimente:

     #Create Event: executați codul: // Train Team A // Setează statisticile la variabilele globale hotărâte de upgrade-uri. hp = global.hp1; // puncte de sănătate ra = global.ra1; // Domeniul ss = global.ss1; // viteza de tragere ca = global.as1; // Atac Direcție viteză = 360; viteza = 2; # Eveniment de alarmă pentru alarmă 0: ieșire din acest eveniment # Event Stadiu: executați codul: n = instanță_exemplu (x, y, oBaseB); dacă distance_to_point (n.x, n.y) < ra  if alarm[0] < 1  i=instance_create(x,y,oBulletA); i.speed = ss; alarm[0] = as; speed = 0;   else speed = 2; if hp < 0.9 instance_destroy(); /* hp = global.hp1; // Health Points ra = global.ra1; // Range ss = global.ss1; // Shoot Speed as = global.as1; // Attack Speed */

    Pasul 6

    Vom face acum turletele jucătorului. Creați un obiect nou numit _TurretA, și dați-i aceste proprietăți:

    • spiriduș: _TrainA
    • Solid: fals
    • Vizibil: Adevărat
    • Adâncime: 0
    • Persistent: fals
    • Mamă: oBaseA
    • Masca: (nici unul)

    Am folosit același sprite ca și pentru trenul jucătorului, dar nu ezitați să îl schimbați într-un turret real. Ar trebui să fie 16x16px. Adăugați evenimentele:

     #Create Event: executați codul: hp = 25; // puncte de sănătate ra = 128; // Domeniul ss = 15; // viteza de tragere ca = 20; // Viteza atacului # Eveniment de alarmă pentru alarmă 0: ieșire din acest eveniment # Eveniment de etapă: execuție cod: n = instanță_excursie (x, y, oBaseB); dacă distance_to_point (n.x, n.y) < ra  if alarm[0] < 1  i=instance_create(x,y,oBulletA); i.speed = ss; alarm[0] = as;   if hp < 0.9 instance_destroy();

    Pasul 7

    Turnuletele trebuie să tragă gloanțe, așa că creați un obiect nou pentru a le reprezenta. Sună-l oBulletA, și dați-i aceste proprietăți:

  • spiriduș: _BulletA / Un subțire
  • Solid: fals
  • Vizibil: Adevărat
  • Adâncime: 1
  • Persistent: fals
  • Mamă: (fără mamă)
  • Masca: (la fel ca sprite)
  • Sprite ar trebui să fie un glonț subțire (1px înălțime de 16px lățime, într-un pătrat transparent de 16x16px), orientat spre dreapta. Iată evenimentele sale:

     #Create Event: executați codul: n = instance_nearest (x, y, oBaseB); direcția = direcția punctului (x, y, n.x, n.y); Evenimentul #Step: executați codul: image_angle = direcția; #Collision Eveniment cu obiect o_Block: distruge instanța #Collision Eveniment cu obiect oBaseB: executa cod: #instance_destroy (); other.hp - = 1;  

    8. Creați un obiect nou (oSpawnerA)
    Informatii despre obiect: oSpawnerA Sprite: _TrainA // Inca foloseste spatele trenului Solid: false Vizibil: false Adancime: 0 Persistent: fals Parent: Masca: Creați un eveniment: executați codul: alarmă [0] = 180; instance_create (x, y, oTrainA); Alarmă Eveniment pentru alarmă 0: executați codul: alarmă [0] = 180; instance_create (x, y, oTrainA);

    Pasul 9

    Când playerul își poate actualiza HP, butonul relevant se aprinde:

    Vom crea acest buton acum. Creați un obiect nou numit oUpgradeHP, și dați-i aceste proprietăți:

    • spiriduș: _UpgradeHP
    • Solid: fals
    • Vizibil: Adevărat
    • Adâncime: -99
    • Persistent: fals
    • Mamă: (fără mamă)
    • Masca: (la fel ca sprite)

    Dați-i și aceste evenimente:

     #Create Event: executați codul: image_alpha = 0.5; Activitatea mouse-ului pentru stânga lansată: executați codul: global.hp1 + = 1; instance_deactivate_object (oUpgradeHP); instance_deactivate_object (oUpgradeRA); instance_deactivate_object (oUpgradeSS); instance_deactivate_object (oUpgradeAS); Experiența mouse-ului pentru mouse Introduceți: executați codul: image_alpha = 1; Experiența mouse-ului pentru mouse-ul Lasă: executați codul: image_alpha = 0.5;

    Pasul 10

    Duplicat oUpgradeHP de trei ori, astfel încât să aveți patru obiecte - câte un buton pentru upgradarea HP, RA, SS și AS. (oUpgradeHP, oUpgradeRA, oUpgradeSS, oUpgradeAS).

    Schimba Stânga eliberată codul evenimentului pentru fiecare:

     oUpgradeHP -> global.hp1 + = 1; oUpgradeRA -> global.ra1 + = 4; oUpgradeSS -> global.ss1 + = 1; oUpgradeAS -> global.as1 = global.as1 / 1.1;

    Pasul 11

    Duplicat oBaseA, oTrainA, oTurretA, oSpawnerA și oBulletA a crea oBaseB, oTrainB, oTurretB, oSpawnerB și oBulletB.

    Modificați părinții lor (de la "A" la "B") și modificați tot codul lor de la:

     n = instanța cea mai apropiată (x, y, oBaseB);

    … la:

     n = instanța cea mai apropiată (x, y, oBaseA);

    ... după cum este necesar.

    De asemenea, setați oTrainB să aibă direcția = 180; în evenimentul de creare, în loc de direcția = 360;. În sfârșit, alegeți spritele orientate spre stânga pentru fiecare, dacă este cazul.

    Pasul 12

    Adăugați toate tilesets dvs., sprites, arta și așa mai departe și de a crea două camere noi: unul este rm_intro, unde ar trebui să puneți doar obj_Game, iar cealaltă este camera principală (rm_main).

    Construiți-vă rm_main ca astfel:

    1. Plasați bazele pe fiecare parte.
    2. Puneți piste de tren care rulează de la baze (puteți utiliza tilesetul în descărcarea sursei).
    3. Plasați turle pentru apărare; când toate turlele sunt moarte, cealaltă echipă câștigă.
    4. Așezați icre de reproducere, care intersectează trenuri noi.
    5. Plasați cele patru butoane de upgrade.

    Ați putea încerca să faceți camera simetrică, astfel încât să fie oarecum corectă sau să plasați mai multe turnulete pe partea Enemy pentru un joc mai greu. Depinde de tine - intregul punct al unui prototip este acela de a testa lucrurile!

    Acum jucați jocul. Pe măsură ce jucați, luați în considerare ceea ce trebuie schimbat. Ar trebui trenurile să fie mai repede sau mai lent? În cazul în care upgrade-urile vin mai frecvent? În cazul în care computerul are un avantaj nedrept? În cazul în care jucătorul are mai multe intrări decât să aplice actualizările? Așteptați-vă departe!

    Sper că ați învățat ceva despre realizarea de jocuri - dar mai important, sper că ați învățat cum orice idee poate fi împărțită rapid într-un prototip.

    Nota editorului: Acesta este un nou tip de post pe care nu l-am mai încercat până acum. Spuneți-ne ce credeți! Există ceva ce ați dori să ne vedeți diferit în funcție de format în viitor? V-ar plăcea mai multe detalii în videoclip sau un set mai detaliat de instrucțiuni pentru construirea efectivă a jocului?