Как сделать лабиринт на паскале
Эта программа на подобие 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) |.
Разработка компьютерных игр. С чего начать? Это просто! С нуля до разработчика игр: как начать создавать свою игру. Заказать создание игры.
Программа - генератор лабиринтов [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 он выдает ошибку а как только я убираю двоеточие перед слешем он все делает. Может проблема в этом?
Читайте также: