Как сделать лабиринт на паскале

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Эта программа на подобие PAINT.

procedure keydown(key: integer);
begin

if key=Vk_up then S:=S+1;
if key=Vk_down then S:=S-1;

if key=Vk_left then A:=A-1;
if key=Vk_right then A:=A+1;

if A=0 then A:=A+1;
if A=11 then A:=A-1;

if S=0 then S:=S+1;
if S=10 then S:=S-1;

end;
procedure MouseDown(x,y,mb: integer);
begin
MoveTo(x,y);
end;
procedure MouseMove(x,y,mb: integer);
begin

if S=1 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clblack); setbrushcolor(clblack); circle(7,7,A); end;
if S=2 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clgreen); setbrushcolor(clgreen); circle(7,7,A); end;
if S=3 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clred); setbrushcolor(clred); circle(7,7,A); end;
if S=4 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clblue); setbrushcolor(clblue); circle(7,7,A); end;
if S=5 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clyellow); setbrushcolor(clyellow); circle(7,7,A); end;
if S=6 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clbrown); setbrushcolor(clbrown); circle(7,7,A); end;
if S=7 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clsilver); setbrushcolor(clsilver); circle(7,7,A); end;
if S=8 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(clpurple); setbrushcolor(clpurple); circle(7,7,A); end;
if S=9 then begin setbrushcolor(clwhite); circle(7,7,12); setpencolor(cllime); setbrushcolor(cllime); circle(7,7,A); end;

if mb=1 then circle(X,Y,A);
setbrushcolor(clwhite);
setpencolor(clwhite);
if mb=2 then circle(X,Y,A);
end;
begin
gotoxy(1,2);
write('меняйте цвет стрелками на клавиатуре вверх и вниз. стирать пкм, рисовать лкм.');
gotoxy(5,1);
write('менять размер кисти стрелками влево и вправо.');

Onkeydown:=keyDown;
OnMouseDown:=MouseDown;
OnMouseMove:=MouseMove
end.

В итоге мы сможем без лишних манипуляций определить, куда игрок может переместиться, а куда нет (см. рис).


3. Переменные и модули.
Для полноценной работы нашей будущей игры нам понадобится подключить всего-ничего один модуль GraphABC, позволяющий отображать графические примитивы на экране.

Далее инициируем необходимые нам переменные (см. листинг 1).

var
s : array [,] of integer;
i,x,y,vspeed : integer;
game_end : boolean;

4. Нажатия клавиш.
Итак, чтобы далее вам не пришлось лазать по своей писанине, чтобы модифицировать код, создадим две отдельные процедуры, отвечающие за манипуляции с положением игрока.

//Обработка нажатий клавиш
procedure KeyPress(key: char); begin

if (key='d') and (s[(x div 8)+1,(y div 8)]=0) then //Если нажата клавиша D…
x:=x+8; //. А также есть свободное место, то передвигаемся на…
//… клеточку вперед (значение x увеличивается на 8)

if (key='a') and (s[(x div 8)-1,(y div 8)]=0) then //см. комментарий выше
x:=x-8;

procedure KeyDown(key: integer); begin
if (key=vk_enter) then game_end:=true; //При нажатии ENTER…
//значение переменной game_end равно true
end;

5. Гравитация.
Неотъемлемой частью платформера является какая никакая, а сила тяжести. Поэтому сейчас мы должны написать отдельную процедуру, которая в дальнейшем поможет игроку встать на ноги в буквальном смысле.

//Гравитация
procedure Gravity(); begin

if s[(x div 8),(y div 8)+vspeed]=0 then y+=vspeed; //Если сверху есть свободная клеточка, то…
//… перемещаемся на vspeed вверх.

if vspeed<>0 then //Если скорость прыжка не равна нулю (в нашем случае: меньше нуля)…
vspeed+=2; //… то помаленьку ее сбавляем.

procedure Draw(); begin

//Рисуем белый прямоугольник…
setbrushcolor(clwhite); //… размером 640 на 480
fillrectangle(0,0,640,480);


setbrushcolor(clblack);//Рисуем черные стены…
fillrectangle(0,192,640,224);//… по координатам…
//… 0 – 640 по X; 192 – 224 по Y
//(ВНИМАНИЕ! Данные манипуляции не делают стены осязаемыми, а всего лишь…
//… создают их графический образ.

setbrushcolor(clred); //Рисуем игрока по координатам…
fillrectangle(x,y,x+8,y+8);//… x и y

7. Тело программы.
Вот мы и добрались, собственно, до самой программы. Тут нам необходимо заполнить массив нужными нам значениями, а также задействовать ранее написанные процедуры.

Begin //начало программы

//Указания значений для переменных
game_end:=false;
x:=0; //Стартовая позиция игрока по X
y:=0; //Стартовая позиция игрока по Y

//Создание массива
s := new integer[200,200];

//Создание платформы, нарисованной в процедуре Draw
for i:=0 to 79 do
s[i,24] := 1;

while game_end=false do begin //Создаем цикл…
//… который прервется, если game_end = false

//Рисование экрана
Draw();

//Гравитация для игрока
Gravity();

OnKeyPress:=KeyPress; //Обработка нажатий…
OnKeyDown:=KeyDown; //… клавиш

sleep(30); //Ждем примерно полсекунды, чтобы игра…
//… работала с нормальной скоростью

end. //конец программы

8. Заключение.
Итого у нас получился незамысловатый платформер с точкой в главной роли. Мы можем передвигаться по горизонтали и прыгать:


0

Объясните каждую букву, я понимаю это как - В массиве x считается целое от 8 и прибовлятся 1
- Вопрос: как это может равняться 0?(у меня выходит всегда 1 как я бы не считал ). | (s[(x div 8)+1,(y div 8)]=0) |.

Игровой форум GFAQ.ru


Разработка компьютерных игр. С чего начать? Это просто! С нуля до разработчика игр: как начать создавать свою игру. Заказать создание игры.

Программа - генератор лабиринтов [BGI Graphics]. Позволяет создавать лабиринты с различным размером клеток и уровнем сложности. В созданном лабиринте можно сразу поиграть - попробовать найти выход. Управление - стрелками, выход - X. При выходе показывается путь, который ведет к выходу.

Скачано: 3796 · Комментарии: 1 · Рейтинг:

Нужно съесть как можно больше яблок,убегая от пожирателя-бота.

Скачано: 3623 · Комментарии: 0 · Рейтинг:

Замечательная графическая игра "Арканоид". Поддержка мышки и Sound Blaster. К сожалению, комментарии в исходниках на итальянском языке

Скачано: 3415 · Комментарии: 0 · Рейтинг:

Простая реализация классической игры Packman

Скачано: 3388 · Комментарии: 0 · Рейтинг:

Первая нормальная игра Павла Анохина (не считая маленьких). Написана для соревнования по написанию игр и заняла 2-е место. Правда, тогда в игре не было еще музыки и многого другого. Эта игра - стратегия в реальном времени, но в несколько необычном 2D виде. В игре можно переключать Русский/Английский язык. К сожалению, в демо-версии не сделана настройка звуковой карты, так что если у вас ее нет, то придется поковыряться в исходниках для отключения звука - иначе скорее всего зависнет.

Скачано: 3233 · Комментарии: 0 · Рейтинг:

Графический ТЕТРИС. BGI графика. Управляющие клавиши: Left, Right, Up, Down, ESC

у тебя программа просто генерирует 2 мерный массив и while true то есть в вечном цикле проверяется если ты нажал вверх то если a[I-1, j] <> 9, а 9 это стенка то а с индексами итый джитый обнулить, и минус один и а с индексами итый джитый заполнить переменной size,
НО один вопрос, как сгенерировать такой массив типа
while I

Ярослав Чирков

Спасите ради бога пока я комп не разбил! У меня винда х64 и я что бы запустить скачал DosBox той же версии что и на видосе. Но этот гад не дает мне нормально все запустить тк не знает директории Z. ОК я создал ее и все вроде норм но он не видит абсолютно ничего на моем диске С и когда я пытаюсь зайти в папку с паскалем он говорит мол нет такой папки! Что делать подскажите пожалуйста! Так же когда я пишу mount c z:\lab он выдает ошибку а как только я убираю двоеточие перед слешем он все делает. Может проблема в этом?

Читайте также: