Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 16.04.2011, 22:42   #1 (permalink)
FPS
Member
 
Регистрация: 11.11.2010
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Нужна помощь с маленькой программой на Паскале

Всем привет, очень нужна помощь с небольшой графической программой. Суть её в том, что она выводит один символ, который можно двигать стрелками, а при нажатии Esc появляется второй символ и когда второй символ двигаем к первому, то первый исчезает. Нужно изменить программу так, чтобы когда второй символ приближался к первому, то он бы перепрыгивал первый символ. Ниже код программы. Заранее спасибо)
Цитата:
program dragging;
uses graph, crt, monsters;
var
Vasia : monstr;
Misha : daemon;
x,y : integer;
gd, gm : integer;
begin
gd := detect;
initgraph(gd, gm, 'c:/BP/BIN');
if graphresult <> grOk then begin
writeln('oshibka inicializacii grafiki'); readln; exit end;
Vasia.init(200,200,10,8);
Vasia.draw;
while vasia.drag do;Misha.init(400, 400, 10, 8 ,2); Misha.draw;
while misha.drag do;
end.
FPS вне форума   Ответить с цитированием

Старый 16.04.2011, 22:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Решение проблемы можно поискать по этим ссылкам

Помощь в Паскале
Помощь в Паскале
Помощь в Паскале
Помогите с программой на Паскале

Старый 17.04.2011, 21:44   #2 (permalink)
FPS
Member
 
Регистрация: 11.11.2010
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Забыл про подключаемый модуль "monsters", в нём менять ничего не надо, вот его код
Цитата:
unit monsters;
interface
uses graph,crt;

type monstr = object
constructor init(x_, y_, health_, ammo_ : word);
procedure attack ; virtual ;
procedure draw ; virtual ;
procedure erase ; virtual ;
procedure hit;
procedure move(x_,y_: word) ;
function drag :boolean;virtual;
private
x, y : word; health, ammo : word; color : word;
end;
daemon = object (monstr)
constructor init(x_, y_, health_, ammo_ ,magic_: word);
procedure attack ; virtual ;
procedure draw ; virtual ;
procedure erase ; virtual ;
procedure wizardry;
private
magic : word;
end;

implementation
{**************************realize method monster*********}
constructor monstr.init(x_,y_,health_,ammo_: word);
begin
x:= x_;
y:=y_;
health:= health_;
ammo:=ammo_;
color:=yellow;
end;
{*****************monstr.attack**********}
procedure monstr.attack;
begin
if ammo = 0 then exit;
dec(ammo); setcolor(color); outtextXY(x+15,y,'ba-bax!');
end;
{***********monstr.draw********}
procedure monstr.draw;
begin
setcolor(color); outtextXY(x,y,'@');
end;
{****************monstr.erase***********}
procedure monstr.erase;
begin
setcolor(black); outtextXY(x,y,'@');outtextXY(x+15,y,'ba-bax!');
end;
{***********monstr.hit************}
procedure monstr.hit;
begin
if health=0 then exit;
dec(health);
if health = 0 then begin color := red; draw;exit;end;
attack;
end;
{************************monstr.move*************}
procedure monstr.move(x_,y_:word);
begin
if health = 0 then exit;
erase; x:=x_;y:=y_; draw;
end;
{*********************monster.drag**************}
function monstr.drag : boolean;
var
key : char;
dx,dy : integer;
step : integer;
begin
step := 5;
key := readkey;
if key = chr(0) then key := readkey; dx := 0; dy := 0;
case ord(key) of
72 : dy := -step;
75 : dx := -step;
77 : dx := step;
80 : dy := step;
27 : begin drag := false; exit end; end;
monstr.move(x + dx, y + dy); drag := true;
end;

{realize method object deamon}
constructor daemon.init ( x_,y_,health_,ammo_,magic_:word);
begin
inherited init ( x_,y_,health_,ammo_);
color:=green;
magic:=magic_;
end;

{daemon.attack}
procedure daemon.attack;
begin
if ammo= 0 then exit;
dec(ammo);
if magic > 0 then begin
outtextXY(x+15,y,'BY-BYX!'); dec(magic); end
else
outtextXY(x+15,y,'by-byx!');
end;
{daemon.draw}
procedure daemon.draw;
begin
setcolor(color); outtextXY(x,y,'%');
end;
{daemon.erase}
procedure daemon.erase;
begin
setcolor(black); outtextXY(x,y,'%)');outtextXY(x+15,y,'by-byx!');outtextXY(x+15,y,'BY-BYX');
end;
{daemon.wizardry}
procedure daemon.wizardry;
begin
if magic = 0 then exit;
outtextXY(x+15,y,'Krible-krable-byms!'); dec (magic);
end;
end.
FPS вне форума   Ответить с цитированием
Старый 18.04.2011, 08:36   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Могу вам облегчить задачу

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

При этом вам не нужно будет писать сложные многострочные внешние модули
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 18.04.2011, 19:45   #4 (permalink)
FPS
Member
 
Регистрация: 11.11.2010
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А там не много получится писать, вы не подправите как надо?) А я то очень туго в этом соображаю) Щас бы дотянуть ещё полтора месяца до сессии и больше не будет программирования
FPS вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:33.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.