Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 19.03.2011, 19:40   #1 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
Arrow Не могу доделать программу до конца

Опять не могу доделать... помогите пожалуйста! ) Программа, даже не знаю, как объяснить, что выполняющая )))
пародия на стрелялки =)

Здесь летают жёлтые монстрики "@", при приближении друг другу стреляют, теряют жизни и умирают красной точкой. Добавлен второй модуль с демоном, на экран выводится зелёным "%". НО всего Один, а надо чтобы их тоже было много. Никак не могу разобраться, что ещё я забыла прописать!

Сама программа:
Код:
Program dinner2;
 uses graph,crt,monsters,daemons;
const n=30;
 var
stado:array[1..n] of monstr;
stado2:array[1..n] of daemon;
x,y:array[1..n] of integer;

gd,gm:integer;
i,j:word;

begin
 gd:=detect;
initgraph(gd,gm,'...');
 If graphresult<>grOk then
begin
 writeln('Error - Ошибка инициализации графики');
exit
end;
 randomize;

for i:=1 to N do
 begin
stado[i].init(random(600),random(440),random(10), random(8));
stado[i].draw;

stado2[i].init(random(500),random(400),random(20), random(5),random(10));
stado2[i].draw;
 end;

repeat
 for i:=1 to n do
begin
 x[i]:=random(600);
 y[i]:=random(440);
 stado[i].move(x[i],y[i]);
 stado2[i].move(x[i]+5,y[i]+5);
end;

For i:=1 to n-1 do
 For J:=i+1 to n do
  If(abs(x[i]-x[j])<15) and (abs(y[i]-y[j])<15)
then begin
 Stado[i].hit;
 Stado[j].hit;
 Stado2[i].hit;
 Stado2[j].hit;
end;

delay(2000);
 until keypressed;
end.
Первый модуль:
Код:
unit monsters;
interface
uses Graph;
type monstr = object
		procedure init(x_, y_, health_, ammo_ : word);
		procedure attack; 
		procedure draw; 
		procedure erase; 
	  procedure hit;
		procedure move(x_, y_ : word);
		procedure getpos(var x_, y_ : word);
	private
		x, y		: word;
		health, ammo	: word;
		color		: word;
end;
implementation
procedure monstr.init(x_, y_, health_, ammo_ : word);
begin
	x	:= x_; 
	y	:= y_;
	health	:= health_;
	ammo	:= ammo_;
	color	:= yellow;
end;
 

procedure monstr.draw;
begin
	setcolor(color);	outtextXY(x, y, '@');
end;
procedure monstr.getpos(var x_, y_ : word);
begin
     x_ := x;      y_ := y;
end;
procedure monstr.attack;
begin
	if ammo = 0 then exit;
	dec(ammo); setcolor(color); 
	outtextXY(x + 15, y, 'Ba-Bax!');
end;

procedure monstr.erase;
begin 
	setcolor(black); outtextXY(x, y, '@'); 
end;

procedure monstr.hit;
 begin
If health = 0 then exit;
dec(health);
 If health = 0 then 
begin 
 color:=red;
 draw;
exit;
end;
attack;
end;

procedure monstr.move(x_, y_ : word);
begin
	if health = 0 then exit;
	erase;  x := x_; y := y_;  draw;
end; 
end.
uses graph, crt, monsters;
var	Vasia	: monstr; 
		x, y	: word;
		gd, gm	: integer;
begin
	gd := detect; 	initgraph(gd, gm, '...');
	Vasia.init(100, 100, 10, 10);
	Vasia.draw;    Vasia.attack; 	readln;
	
   x := 110;
	while x < 200 do begin
		Vasia.move(x, x);     inc(x, 7); 
 		delay(200);
	end;
readln;
end.
Второй модуль:
Код:
unit daemons;
interface
uses graph,monsters;
type daemon = object (monstr)
		procedure init(x_, y_, health_, ammo_, magic_ : word);
		procedure attack;
		procedure draw;
		procedure erase;
		procedure wizardry;
    procedure hit;
		procedure move(x_, y_ : word);
    procedure getpos(var x_, y_ : word);
private
    Demon: daemon
		magic : word;
    x,y,ammo,health,color:word;
end;
implementation

procedure daemon.init(x_, y_, health_, ammo_, magic_ : word);
begin
	inherited init(x_, y_, health_, ammo_);
	color := green;
  magic := magic_;
end;

procedure daemon.attack;
begin
	if ammo = 0 then exit;
	dec(ammo);
	 setcolor(color);
 	outtextXY(x + 25, y, 'Bu-Bux!');
end;

procedure daemon.draw;
begin 	setcolor(color); outtextXY(x, y, '%)');
end;

procedure daemon.erase;
begin 	setcolor(black); outtextXY(x, y, '%)');
end;

procedure daemon.wizardry;
begin
if magic=0 then exit;
outtextXY(x+15,y,'Fire Ball!');
dec(magic);
end;

procedure daemon.hit;
 begin
If health = 0 then exit;
dec(health);
 If health = 0 then 
begin 
 color:=blue;
 draw;
exit;
end;
attack;
end;

procedure daemon.move(x_, y_ : word);
begin
	if health = 0 then exit;
	erase;  x := x_+1; y := y_+1;  draw;
end; 
end.

uses graph, crt, monsters;
var	Demon: daemon;
		x, y	: word;
		gd, gm	: integer;
begin
	gd := detect; 	initgraph(gd, gm, '...');
Demon.init(100, 100, 10, 10);
Demon.draw;    Demon.attack; 	readln;
	
   x := 110;
	while x < 200 do begin
		Demon.move(x, x);     inc(x, 7);
 		delay(200);
	end;
readln;
end.

end.
Хелен вне форума   Ответить с цитированием

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

Если решение проблемы затянулось, можете пролистать аналогичные темы

Не могу найти программу...
Не могу найти программу в компе
Не могу найти программу для востановления Kingston 4gb
Не могу правильно написать программу
Помогите доделать задачу. Строки.
Не могу удалить программу, компьютер выдает ошибку.

Старый 19.03.2011, 19:53   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
Никак не могу разобраться, что ещё я забыла прописать!
Лена, может я и не прав, но я с таким не встречался. Во втором модуле Вы, как положено, описываете часть "Implementation", за которой, как положено, следует команда "end." (с точкой!). Я всегда полагал, что дальнейшее, т.е. всё, что после "end.", транслятором просто не воспринимается - у Вас же там идет некая программа, тоже заканчивающаяся "end.", после чего следует еще один "end." - как видно, заключительный. А разве так можно? Нет, может быть и можно, просто я такого не видел (а уж модулей, и своих и чужих, я видел сотни).
Vladimir_S вне форума   Ответить с цитированием
Старый 19.03.2011, 20:23   #3 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

а тоже самое в первом модуле вас не смутило?))
на самом деле... дали модуль из учебника, сказали, чтоб работало, подправила - работает. сказали сделать "много" - сделала... сказали присоединить "зелёного" - (с)...
теперь снова надо сделать много зелёных, а в них я как то не догоняю...
И стада везде добавила и модуль через модуль подключила, и точки сдвинула, чтоб не затирали одни других. и всё равно чего-то недопонимаю...
Хелен вне форума   Ответить с цитированием
Старый 19.03.2011, 21:06   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
а тоже самое в первом модуле вас не смутило?))
А, да - недосмотрел. То же самое. Интересно - надо будет попробовать такие конструкции. Я о них даже нигде не читал.
Воистину - век живи, век учись, а... ну да - этим самым и помрешь!

Название: offtopic.gif
Просмотров: 139

Размер: 925 байт А вообще, как я посмотрю - у вас там какой-то жутко прогрессивный метод обучения: сажают как щенят в корзину, да и вытряхивают в воду, а на мелководье или в омут - тут уж как повезет. Я под этим подразумеваю сложность задач.
Не знаю, может быть так и надо. Ну посмотрим, что в итоге получится...
Vladimir_S вне форума   Ответить с цитированием
Старый 19.03.2011, 21:52   #5 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

а мне этот метод обучения напоминает книжку из детства "пойди туда, не знаю куда, возьми то, не знаю что"...
Хелен вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 19.03.2011, 22:07   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
а мне этот метод обучения напоминает книжку из детства "пойди туда, не знаю куда, возьми то, не знаю что"...
А Вы никогда не забывайте конца этой сказки: преодолев кучу трудностей, герой всё-таки справляется с заданием и получает достойную награду. Чего и Вам желаю!
Vladimir_S вне форума   Ответить с цитированием
Старый 20.03.2011, 13:48   #7 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

одними напутствиями сыт не будешь
Хелен вне форума   Ответить с цитированием
Старый 20.03.2011, 14:31   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
одними напутствиями сыт не будешь
Между прочим, Ваш код для начала просто не транслируется. Так, в модуле Daemons в строке
Цитата:
Demon: daemon
отмечается отсутстве разделителя (;),
дальше ругается, что процедура
Цитата:
procedure getpos(var x_, y_ : word);
заявлена, но не описана. Так чего же Вы от нас хотите, если там даже синтаксические ошибки прут?
Vladimir_S вне форума   Ответить с цитированием
Старый 20.03.2011, 14:34   #9 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

не поверите, но у меня при всём этом работает как надо.
Возможно вы мне подскажете процедуру умножающую демонёнка?
Хелен вне форума   Ответить с цитированием
Старый 20.03.2011, 14:38   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
Возможно вы мне подскажете процедуру умножающую демонёнка?
Увы - вряд ли.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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