Меню Рубрики

Как написать игру на паскале abc

Как написать игру на паскале abc

1. Что необходимо?
Различных сред, использующих в качестве языка программирования Pascal, превеликое множество. Но из всей этой кучи для урока я решил использовать именно PascalABC.net. Почему? Ответ прост: во-первых данная среда программирования использует не чистый Паскаль, а его современный и более удобный потомок – Object Pascal; во-вторых Паскаль.Нет абсолютно бесплатна, а значит вам не придется парится с кряками или тратить деньги на лицензию.

2. Алгоритм.
Итак, у нас есть площадь 640×480, которая по моей задумке будет делиться на клеточки размером 8×8, представляющие из себя звенья массива s. Таким образом, меняя значение клеточки, мы можем сделать ее «свободной», либо «занятой» (к примеру, использовать как стену).

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

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

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> uses GraphABC;

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

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> //Обработка нажатий клавиш
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;

if (key=’w’) and (vspeed=0) and (s[(x div 8),(y div 8)+1]=1) then //Если есть «занятая клеточка»…
vspeed:=-16; //… под ногами, то совершаем прыжок.

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

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> //Гравитация
procedure Gravity(); begin

if vspeed=0 then begin //Если скорость прыжка равна нулю…
if s[(x div 8),(y div 8)+1]=0 then y+=8; //… перемещаемся на «клеточку» вниз (падаем)
end;

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

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

6. Рисование.
Думаю тут понятно без лишних слов, но для галочки отмечу, что игра делится на «визуальную» и «невизуальную» части. «Невизуальная» отвечает за все происходящее в самой игре, а «визуальная», собственно, за отображение происходящего на экране. Так вот, данная ниже процедура отвечает за «визуальную» часть и только.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> 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. Тело программы.
Вот мы и добрались, собственно, до самой программы. Тут нам необходимо заполнить массив нужными нам значениями, а также задействовать ранее написанные процедуры.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> 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

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

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

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

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

Источник статьи: http://gcup.ru/publ/gamedev/sozdanie_platformera_na_pascal/1-1-0-419

Как создавать игры в паскале

Как создавать игры с нуля
Всем привет! Я хочу создавать игры, но низнаю как. Хочу создать свои собственные игры, но незнаю.

Как правильно создавать бота, для браузерной игры?
в програмирование я бум бум) недавно токо начал изучать весь этот мир) хотелось бы узнать как.

Написание игры: как создавать объекты с разными текстурами?
Спасибо всем, кто ответит мне. Вообщем я новичок, только начал Java изучать. И мне нужна помощь.

Вы можете подсказать,как создать игры в паскале?
Вы можете подсказать,как создать игры в паскале? сапер,судоку любую логическую игру

ну, нас в школе обучали программирования немного)) так что написать программу для вычисления каких либо величин я могу. И рисовать тоже пробовал:

Паровозик не мой, я только добавил пару переменных и в конце if keypressed then begin . end;
В этих строчках описано управление паровозиком. Если нажать любую символьную клавишу, то объект меняет направление движения; если нажать «пробел», то еще и скорость удвоит.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как научиться создавать на C++ простые приложения (очень простые игры)?
Помогите, я хочу научится создавать какието для начала очень простые игры, приложения. но я вооще.

Что нужно, чтобы создавать 2d игры
Подскажите нубу с чего начать что скачать,не понаслышке знаком с делфи, С++. Тока без матов, если.

Где лучше создавать 2d-3d игры QT или Builder?
Доброго времени суток, собственно вопрос в названии темы, вопрос немного не верный, все же я.

На каком движке лучше всего создавать квест-игры?
Я решил создать квест игру. Основа понимания программирования у меня есть(увлекаюсь.

Игры на паскале
есть у кого исходники игр на паскале скиньте хочу посмотреть как делать

Источник статьи: http://www.cyberforum.ru/pascalabc/thread1193921.html

Как написать игру на паскале abc

Эта программа на подобие 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.

Источник статьи: http://vk.com/topic-45356308_27530149

Очередная 2D игра-платформер

Доброго времени суток, товарищи.

В общем: Я не программист, но захотелось самому склепать 2д игру, художник есть. Полистал некоторые туториалы и мало что нашёл, так что принимал решения исходя из своих знаний.
Если кому интересно, я тут скину свои некоторые решения ниже. Прошу советов, возможно я что то вкорне делаю неверно.

В основном пишу тут, т.к. столкнулся с проблемами, решения которых сам найти не смог.
Начну с того, что решил.(или нашёл решение в нете).

1. Перемещение персонажа (соответственно и врагов по карте) — РЕШЕНО.
2. Анимация персонажей, врагов (спорно,но ..) — РЕШЕНО.
3. загрузка аудиофайлов в паскальАБС.нет(спорно, но. ) — РЕШЕНО.

.. а теперь понеслось:
4. Можно ли звуки загружать не построчно, а как картинки — в массив? вообще есть ли в паскале массив звуковых файлов?
5. Как бы мне сделать загрузку карты из текстовых файлов или просто прописать в паскале (буквенно, а к соответствующей букве приделать блок определённого размера, свойство которого я пропишу, и к этому блоку,т.е. букве смогу прописать картинку),
6. скроллинг карты — т.е. мир или уровень или карта -очень большой и выходит за рамки экрана. Как сделать так что бы экран перемещался вслед за персонажем по этой самой карте?
7. насколько знаю, цикл WHILE означает «пока, что. «. т.е. он выполняется, пока не выполнится его условие или мы его не пропустим. Но при выполнении условия цикла игра не переходит к следующему. Она повисает.
вопрос: как осуществить данный переход? (например смену уровней).
8. как привязать действие в цикле WHILE ко времени? как вообще объявить время? (смысл в том, что бы анимировать персонажа во времени, пока он стоит на месте, а так же, если долго стоит, то можно было бы приписать действия-анимацию).

пока на вскидку, все вопросы, какие хотел узнать. Если что то забыл, обязательно ещё обращусь.
игру хочу сделать сам, а не садиться на шею. Просто хотел узнать принципы действий, по которым буду двигаться дальше.

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

Источник статьи: http://www.cyberforum.ru/pascalabc-net/thread1786034.html

Приведите пример игры которая написана на Pascal ABC.

uses GraphABC, crt;
label metka,metka2;
var x,y: array [1..100] of integer;
n,i,x0,y0,dx,dy,r:integer;
ch,cp:char;
b,p:boolean;

procedure setting;
begin
SetFontColor(clBlue);
SetFontSize(32);
SetFontStyle(fsItalic);
SetBrushColor(ClWhite);
TextOut(WindowWidth-180,260,’Snake’);
SetFontColor(clBlack);
SetFontSize(10);
//SetPenColor(clBlack);
Line(WindowWidth-195,0,WindowWidth-195,WindowHeight);
TextOut(WindowWidth-180,20,’N=’);
TextOut(WindowWidth-180,40,’Клавиши управления: ‘);
TextOut(WindowWidth-180,60,’w,s,a,d’);
TextOut(WindowWidth-180,80,’p-пауза’);
end;

begin
metka2:
n:=3;
hidecursor;
SetWindowCaption(‘Snake’);
for i:=n downto 1 do
x[i]:=60+(n-i)*10;
for i:=1 to n do
y[i]:=110;
r:=5;
randomize;
x0:=(Random(WindowWidth-210) div 10)*10+10;
y0:=(Random(WindowHeight-10) div 10)*10+10;
dx:=10;
dy:=0;
SetBrushColor(clGreen);
for i:=1 to n do
Circle(x[i],y[i],r);
SetBrushColor(clYellow);
Circle(x0,y0,r);
metka:
repeat
sleep(150);
for i:=n downto 2 do
begin
x[i]:=x[i-1];
y[i]:=y[i-1];
end;
x[1]:=x[1]+dx;
y[1]:=y[1]+dy;
ClearWindow;
setting;
TextOut(WindowWidth-160,20,IntToStr(n-3));
SetBrushColor(clYellow);
Circle(x[1],y[1],r);
SetBrushColor(clGreen);
for i:=2 to n do
Circle(x[i],y[i],r);
SetBrushColor(clYellow);
Circle(x0,y0,r);
if (x[1]=x0)and(y[1]=y0) then
begin
n:=n+1;
x0:=(Random(WindowWidth-210) div 10)*10+10;
y0:=(Random(WindowHeight-10) div 10)*10+10;
end;
for i:=2 to n do
if (x[i]=x0)and(y[i]=y0) then
begin
x0:=(Random(WindowWidth-210) div 10)*10+10;
y0:=(Random(WindowHeight-10) div 10)*10+10;
end;
b:=false;
for i:=2 to n do
if (x[1]=x[i])and(y[1]=y[i]) then b:=true;
until (keypressed)or(x[1] WindowWidth-210)
or(y[1] WindowHeight-10)or(b);
SetBrushColor(clWhite);
if (n>=33) then
begin
ClearWindow;
TextOut(300,150,’Победа! ‘);
end;
if (x[1] WindowWidth-210)
or(y[1] WindowHeight-10)or(b) then
begin
TextOut(300,150,’Поражение’);
TextOut(280,170,’n-начать заново’);
ch:=readkey;
while (ch<>‘n’)and(ch<>‘т’) do ch:=readkey;
goto metka2;
end
else
ch:=readkey;
if ch = #0 then ch := ReadKey;
case ch of
‘s’,’ы’,#80: begin dx:=0; dy:=10; end;
‘w’,’ц’,#72: begin dx:=0; dy:=-10; end;
‘d’,’в’,#75: begin dx:=10; dy:=0; end;
‘a’,’ф’,#77: begin dx:=-10; dy:=0; end;
‘p’,’з’: begin
TextOut(300,150,’Pause’);
p:=true;
while (p) do
begin
cp:=readkey;
if (cp=’p’)or(cp=’з’) then p:=false;
end;
end;
end;
if (n 6 лет назад

uses GraphABC,Events,Utils; //необходимые библиотеки подключены
var pr,px,py,kx,ky,ku,pc,s: integer; //переменные: положение ракетки, координаты мяча, коэффициенты отражения, положение ракетки компьютера

procedure KeyDown(Key: integer); //процедура обработки нажтия клавиши
begin
case Key of
VK_Up: if pr>10 then pr:=pr-10; //если вверх, и если ракетка не достигла края экрана, сместить координаты ракетки на 10 вверх
VK_Down: if pr 490) then ky:=ky*(-1); //если достиг стенки верхней или нижней — поменять коэффициент смещения на противоположный
if px>590 then //если достиг правой (игрока) стенки, проверяем
if (py>pr-20) and (py

begin //иначе
showmessage(‘Вы упустили мячик!’); //выводим сообщение
inc(ku); //увеличиваем счетчик упущенных мячей
px:=15; //возвращаем мяч в исходную позицию у противоположной стенки
py:=250;
end;
px:=px+kx; //смещаем координаты на коэффициенты смещения
py:=py+ky;
end;

begin
lockdrawing; //запрет прорисовки в окне (мигание убираем)
setwindowsize(600,500); //размер окна
kx:=5; ky:=1; px:=15; py:=250; pr:=250; //задаем координаты смещения и позицию мяча
repeat //цикл с постусловием
clearwindow; //очистить окно
setbrushcolor(clgreen); //цвет кисти зеленый
rectangle(5,5,595,495); //прямоугольник — поле
Pm; //процедура определения координат мяча
setbrushcolor(clwhite); //цвет кисти — белый
circle(px,py,10); //мяч
OnKeyDown:=KeyDown; //процедура нажатия клавиши
pc:=py; //ракетка противника следует за мячом неотступно.
setbrushcolor(clblack); //цвет кисти — черный
rectangle(592,pr-20,597,pr+20); //ракетки
rectangle(3,pc-20,8,pc+20);
sleep(25); //задержка
redraw; //перерисовка
until ku=5; //цикл повторяется до 5 пропущенных мячей
end.
Что то типо тениса

const
clPlayer = Color.BurlyWood;

var
kLeftKey,kRightKey: boolean;
kSpaceKey: integer;
/// Игрок
Player: RectangleABC;
/// Таймер движения врагов
t: Timer;
/// Флаг конца игры
EndOfGame: boolean;
/// Количество неигровых объектов
StaticObjectsCount: integer;
/// Счетчик выигрышей
Wins: integer;
/// Счетчик проигрышей
Falls: integer;
/// Информационная строка
InfoString: RectangleABC;
/// Сообщение в начале игры
NewGame: RoundRectABC;

type
KeysType = (kLeft,kRight);

/// Класс пули
Pulya = class(CircleABC)
public
constructor Create(x,y: integer);
procedure Move; override;
end;

/// Класс врага
Enemy = class(RectangleABC)
public
constructor Create(x,y,w: integer);
procedure Move;

Источник статьи: http://otvet.mail.ru/question/164987781


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии