Създаване на платформа за Паскал - създаване на игри - членове Directory

Кой от начинаещи igrodelov преобладава мнението, че да напише типичен 2D аркадна на вашия компютър трябва да получите на хладно двигател или дизайнер, както и здрава конструкция, известна като престижния C ++, защото да се намери полезно статия на Паскал почти невъзможно. Но днес реших да опитам да се прекъсне остаряла стереотипи, като напишете кратък урок за развитието на непретенциозни с платформи. Така Седнете удобно, "образование" Разбира се започва ...

1. Какво е необходимо?
Различни медии, като се използват като Паскал език за програмиране, голям набор. Но от всичко това накуп за урока, реших да го PascalABC.net използвате. Защо? Отговорът е прост: на първо място, тази програмна среда не използва мрежата, Паскал и модерен и по-удобното си потомък - обект Pascal; второ Paskal.Net е напълно безплатна, така че не са задушени пукнатина или харчат пари за лиценз.

2. Алгоритъм.
Така че, ние имаме областта на 640x480, които са склонни на моята идея, ще бъде разделена на размера на 8x8 клетки, които представляват връзки масива с. По този начин, чрез промяна на стойността на клетката, можем да го направим "свободен" или "зает" (например, да се използва като стена).

В резултат на това ние можем да определим, където играчът може да се движи без ненужно манипулация, и където няма (виж фиг.).

Създаване на платформа за Паскал - създаване на игри - членове Directory

3. Променливи и модули.
За завършване на работата на нашите бъдещи игри, ние трябва да се свърже всички никой не GraphABC модул ви позволява да показвате графични примитиви върху екрана.

След това, ние ще предприеме необходимите променливи (вж. Обява 1).

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> използва GraphABC;

Var
с. масив # 91;], на цяло число;
I, X, Y, vspeed. цяло число;
game_end. булева;

4. клавиши.
Така че, за да продължите няма да се налага да се изкачи на неговите писания, за да промените кода, създаване на две отделни процедури, които отговарят за манипулирането на позицията на играча.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> // обработка клавиши
Процедура за натискане (ключ: Чар # 41 ;; започне

ако (ключови = 'г' # 41; и (и # 91; (х DIV 8, # 41; 1, (у DIV 8 # 41] = 0 # 41; след това // ако ключът е натиснат D ...
х: = х + 8; //. Както и има свободно място, а след това да преминем ...
// ... клетка напред (стойността на х увеличение от 8 # 41;

ако (ключови = "W" # 41; и (vspeed = 0 # 41; и (и # 91; (х DIV 8, # 41 ;, (у DIV 8, # 41, 1] = 1 # 41; след това // Ако има "зает клетка ..."
vspeed: = - 16; // ... под краката си, а след това скача.

процедура KeyDown (ключ: число # 41 ;; започне
ако (ключови = vk_enter # 41; след това game_end: = вярно; // Когато натиснете Enter ...
// стойност на променливата е вярно game_end
приключи;

5. Gravity.
Неразделна част от платформа, която не е и силата на тежестта. Така че сега ние трябва да се напише отделна процедура, което допълнително ще помогне на играча да получите на краката си, буквално.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> // Gravity
процедура Gravity (# 41 ;; започне

ако vspeed = 0 след това да започне // Ако скоростта на скок е нула ...
ако и # 91; (х DIV 8, # 41 ;, (у DIV 8, # 41, 1] = 0, тогава Y + = 8; // ... след това се премине към "клетка" надолу (падне # 41;
приключи;

ако и # 91; (х DIV 8, # 41 ;, (у DIV 8 # 41 + vspeed] = 0, тогава Y + = vspeed; // Ако горната има свободна клетка, тогава ...
// ... след това преминете vspeed нагоре.

ако vspeed<>0 след // ако скоростта на скок не е равно на нула (в този случай: по-малко от нула # 41; ...
vspeed + = 2; // ... тогава тя постепенно се забавя.

6. тираж.
След това мисля, че е ясно, без думи, но за по-голяма, ще отбележа, че играта е разделена на "визуален" и "не-визуална" част. "Non-визуална" е отговорен за всичко, което се случва в играта, както и "визуални", всъщност, за връщането на онова, което е на екрана. Така че, дадена по-долу процедура е отговорен за "визуален" само частично.

? 200 "200px ':' '+ (this.scrollHeight + 5) +' пиксела ');"> процедура Draw (# 41 ;; започне

// Начертайте бял правоъгълник ...
setbrushcolor (clwhite # 41 ;; // ... 640 480
fillrectangle (0,0,640,480 # 41 ;;


setbrushcolor (clblack # 41 ;; // Draw черните стени ...
fillrectangle (0192640224 # 41 ;; // ... координатите ...
// ... 0-640 X; 192-224 чрез Y
// (ЗАБЕЛЕЖКА: Тези манипулации Не материални стени, но само ...
// ... създадат свое графично изображение.

setbrushcolor (clred # 41 ;; // Draw на играча да координатите ...
fillrectangle (х, у, х + 8, Y + 8 # 41 ;; // ... х и у

7. Структурата на програмата.
Така че ние имаме, всъщност, в програмата. Тук трябва да попълните масив от стойности, необходими за нас, и да използват по-рано писмени процедури.

? 200 "200px ':' '+ (this.scrollHeight + 5) +' пиксела ');"> Започнете // начало на програмата

// уточни стойности за променливите
game_end: = фалшива;
х: = 0; // стартова позиция играч в X
Y: = 0; // Начална позиция на играча на Y

// Създаване на масив
S: = нов число # 91; 200 200];

// Създаване на платформа боядисани в процедура Draw
защото: = 0-79 направи
и # 91 I, 24]: = 1;

докато game_end = фалшива започвайте // създаване на контур ...
// ... който ще се откажем, ако game_end = фалшива

// Draw екрана
Draw (# 41 ;;

// Gravity за играча
Gravity (# 41 ;;

OnKeyPress: = натискане; // обработка на кликванията ...
OnKeyDown: = KeyDown; // ... ключове

сън (30 # 41 ;; // Изчакайте около половин секунда, за да играе ...
// ... Работил съм с нормална скорост

край. // край на програма

8. Заключение.
Общо сме се превърнали просто платформинг с точка в главната роля. Ние може да се движи хоризонтално и скочи:

Създаване на платформа за Паскал - създаване на игри - членове Directory