Crearea unei platforme pentru Pascal - crearea de jocuri - Articole Director

Cine dintre începători igrodelov predomină opinia că, pentru a scrie un arcade 2D tipic de pe PC-ul dvs. aveți nevoie pentru a obține un motor rece sau de designer, precum și un design robust, cunoscut sub numele de prestigiu C ++, deoarece pentru a găsi un articol util pe Pascal aproape imposibil. Dar astăzi am decis să încerc să rupă stereotipurile vechi scriind o lecție rapidă cu privire la dezvoltarea platformers nepretențioase. Deci Stai confortabil, „educație“ curs începe ...

1. De ce am nevoie?
Diverse mass-media, folosind ca limbaj de programare Pascal, set mare. Dar din toate acestea grămadă pentru lecție, am decis să-l folosească PascalABC.net. De ce? Răspunsul este simplu: în primul rând, acest mediu de programare nu utilizează net, Pascal, și modern și mai convenabil descendent - Object Pascal; în al doilea rând Paskal.Net este complet gratuit, astfel încât să nu fi aburit un crack sau cheltui bani pe licență.

2. Algoritmul.
Deci, avem zona de 640x480, care tind la ideea mea va fi împărțită la dimensiunea celulelor 8x8, care reprezintă link-uri matrice s. Astfel, prin variația valorii celulei, putem „liber“ sau „ocupat“ (de exemplu, să fie folosit ca un perete).

Ca urmare, putem determina în cazul în care jucătorul se poate deplasa fără manipulare inutile, și în cazul în care nu (vezi Fig.).

Crearea unei platforme pentru Pascal - crearea de jocuri - Articole Director

3. Variabile și module.
Pentru a finaliza lucrările de jocurile noastre viitoare, avem nevoie pentru a conecta toate fără un modul GraphABC vă permite să afișați primitivelor grafice de pe ecran.

În continuare, vom iniția variabilele necesare (a se vedea. Listarea 1).

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „> folosește GraphABC;

var
s. mulțime # 91;,] din întreg;
i, x, y, vspeed. întreg;
game_end. boolean;

4. apăsări de taste.
Deci, pentru a continua nu va trebui să urce pe scrierile sale de a modifica codul, de a crea două proceduri separate, responsabile pentru manipularea poziției player-ului.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „> // tastatura de prelucrare
Procedura de apăsare de tastă (cheie: char # 41 ;; începe

dacă (= cheie 'd' # 41; și (s # 91; (x div 8, # 41, +1, (y div 8 # 41] = 0 # 41, atunci // dacă este apăsată tasta D ...
x: = x + 8; //. Precum și există spațiu disponibil, atunci vom trece mai departe ...
// ... celulă înainte (valoarea x crește cu 8 # 41;

dacă (= cheie 'w' # 41; și (vspeed = 0 # 41; și (s # 91; (x div 8, # 41 ;, (y div 8, # 41, 1] = 1 # 41; atunci // Dacă există o „celulă de ocupat ...“
vspeed: = - 16; // ... sub picioarele lor, apoi sare.

Procedura KeyDown (cheie: număr întreg # 41 ;; începe
în cazul în care (tasta = vk_enter # 41; apoi game_end: = true; // Când apăsați ENTER ...
// valoarea variabilei este adevărată game_end
se încheie;

5. Gravity.
O parte integrantă a unei platforme care nu este, iar forța de gravitație. Deci, acum trebuie să scrie o procedură separată, care va ajuta in continuare jucatorul ajunge pe picioarele lor, literalmente.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „> // Gravity
Procedura Gravity (# 41 ;; începe

dacă vspeed = 0, apoi începe // În cazul în care viteza de salt este zero ...
dacă s # 91; (x div 8, # 41 ;, (y div 8, # 41, 1] = 0 atunci y + = 8; // ... apoi trece la "celula" în jos (cad # 41;
se încheie;

dacă s # 91; (x div 8, # 41 ;, (y div 8 # 41; + vspeed] = 0 atunci y + = vspeed; // Dacă în partea de sus există o celulă liberă, atunci ...
// ... apoi trece la vspeed în sus.

dacă vspeed<>0 atunci // în cazul în care viteza de salt nu este egal cu zero (în acest caz: mai mică decât zero # 41; ...
vspeed + = 2; // ... apoi încetini treptat în jos.

6. Desen.
atunci cred că este clar, fără cuvinte, dar de dragul, observ că jocul este împărțit în parte „vizual“ și „non-vizuale“. „Non-vizual“ este responsabil pentru tot ceea ce se întâmplă în joc, și „vizuală“, de fapt, pentru revenirea a ceea ce este pe ecran. Deci, având în vedere mai jos procedura este responsabil pentru numai o parte „vizuală“.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „> Procedura Draw (# 41 ;; începe

// Desenam un dreptunghi alb ...
setbrushcolor (clwhite # 41 ;; // ... 640 480
fillrectangle (0,0,640,480 # 41 ;;


setbrushcolor (clblack # 41 ;; // Desenați pereții negri ...
fillrectangle (0192640224 # 41 ;; // ... coordonatele ...
// ... 0-640 X; 192-224 prin Y
// (NOTĂ: Aceste manipulări fac pereți nu tangibile, ci numai ...
// ... crea imaginea grafică.

setbrushcolor (clred # 41 ;; // Desenați player-ul la coordonatele ...
fillrectangle (x, y, x + 8, y + 8 # 41 ;; // ... x și y

7. Corpul programului.
Așa că avem, de fapt, la program. Aici avem nevoie pentru a umple o serie de valori necesare pentru noi, și de a folosi proceduri scrise anterior.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „> Inceput // inceputul programului

// specifica valori pentru variabilele
game_end: = false;
x: = 0; // poziția de pornire jucător în X
y: = 0; // Începe poziția jucătorului pe Y

// Crearea unei matrice
s: = număr întreg nou # 91; 200,200];

// Crearea unei platforme pictate în procedură de tragerea la sorți
pentru i: = 0-79 do
s # 91; i, 24]: = 1;

în timp ce game_end = false nu începe // a crea o buclă ...
// ... care va abandona dacă game_end = false

// Desenam ecranul
Draw (# 41 ;;

// Gravity pentru player-ul
Gravity (# 41 ;;

Onkeypress: = keypress; // clicuri mâner ...
Onkeydown: = KeyDown; // ... chei

somn (30 # 41 ;; // Așteptați timp de aproximativ o jumătate de secundă pentru a juca ...
// ... Am lucrat la o rată normală

end. // sfarsitul programului

8. Concluzie.
Total, am transformat platformer simplu, cu un punct în rolul principal. Ne putem muta pe orizontală și sari:

Crearea unei platforme pentru Pascal - crearea de jocuri - Articole Director