|
Основной форум Сюда все проблемы связанные с программированием. |
25.10.2008, 15:50
|
#1
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Помогите доделать игру!MidletPascal.
Люди!Помогит пожалуйста доделать игру на MidletPascal'e!Короче,у меня есть код почти законченой игры,вот он:
program pole;
const
fieldwidth = 70;
fieldheight = 70;
var gameField: array[1..fieldWidth, 1..fieldHeight] of integer;
screenWidth, screenHeight: integer;
screenX, screenY: integer;
play,exit:command;
pig:image;
X,Y:integer;
key:integer;
fon:image;
F,G:integer;
bomber:image;
H,J:integer;
i:integer;
stn:image;
O,P:integer;
bomb:image;
Q,U:integer;
z:integer;
procedure bombarding;
var
z:integer;
begin
z:=z+1;
if z=1 then u:=u+2;
if z=2 then u:=u+2;
if z=3 then u:=u+2;
if z=4 then u:=u+2;
if z=5 then u:=u+2;
end;
begin
stn:=LoadImage('/stn.png');
bomb:=LoadImage('/bomb.png');
bomber:=LoadImage('/bomber.png');
fon:=Loadimage('/fone.png');
pig:=LoadImage('/pig.png');
X:=25;
Y:=45;
F:=0;
G:=0;
H:=90;
J:=4;
O:=0;
P:=15;
Q:=25;
U:=5;
while (key<>KE_KEY0) do
begin
DrawImage(fon,F,G);
DrawImage(stn,O,P);
DrawImage(bomber,H,J);
DrawImage(pig,X,Y);
DrawImage(bomb,Q,U);
SetColor(140,0,140);
fillrect(0,50,150,90);
if x<0 then x:=0;
if y<0 then y:=0;
if x>84 then x:=84;
delay(100);
key:=keyToAction(GetKeyPressed);
if (key=GA_RIGHT) then X:=X+3;
if (key=GA_LEFT) then X:=X-3;
if (key=GA_UP) then Y:=Y-0;
if (key=GA_DOWN) then Y:=Y+0;
i:=i+1;
if i=1 then H:=H-2;
if i=2 then H:=H-2;
if i=3 then H:=H-2;
if i=4 then H:=H-2;
if i=5 then H:=H-2;
if i=6 then H:=H-2;
if i=7 then H:=H-2;
if i=8 then H:=H-2;
if i=9 then H:=H-2;
if i=10 then H:=H-2;
if i=11 then H:=H-2;
if i=12 then H:=H-2;
if i=13 then H:=H-2;
if i=14 then H:=H-2;
if i=15 then H:=H-2;
if i=16 then H:=H-2;
if i=17 then H:=H-2;
if i=18 then H:=H-2;
if i=19 then H:=H-2;
if i=20 then H:=H-2;
if i=21 then H:=H-2;
if i=22 then H:=H-2;
if i=23 then H:=H-2;
if i=24 then H:=H-2;
if i=25 then H:=H-2;
if i=26 then H:=H-2;
if i=27 then H:=H-2;
if i=28 then H:=H-2;
if i=29 then H:=H-2;
if i=30 then H:=H-2;
if i=31 then H:=H-2;
if i=32 then H:=H-2;
if i=33 then H:=H-2;
if i=34 then H:=H-2;
if i=35 then H:=H-2;
if i=36 then H:=H-2;
if i=37 then H:=H-2;
if i=38 then H:=H-2;
if i=39 then H:=H-2;
if i=40 then H:=H-2;
if i=41 then H:=H-2;
if i=42 then H:=H-2;
if i=43 then H:=H-2;
if i=44 then H:=H-2;
if i=45 then H:=H+2;
if i=46 then H:=H+2;
if i=47 then H:=H+2;
if i=48 then H:=H+2;
if i=49 then H:=H+2;
if i=50 then H:=H+2;
if i=51 then H:=H+2;
if i=52 then H:=H+2;
if i=53 then H:=H+2;
if i=54 then H:=H+2;
if i=55 then H:=H+2;
if i=56 then H:=H+2;
if i=57 then H:=H+2;
if i=58 then H:=H+2;
if i=59 then H:=H+2;
if i=60 then H:=H+2;
if i=61 then H:=H+2;
if i=62 then H:=H+2;
if i=63 then H:=H+2;
if i=64 then H:=H+2;
if i=65 then H:=H+2;
if i=66 then H:=H+2;
if i=67 then H:=H+2;
if i=68 then H:=H+2;
if i=69 then H:=H+2;
if i=70 then H:=H+2;
if i=71 then H:=H+2;
if i=72 then H:=H+2;
if i=73 then H:=H+2;
if i=74 then H:=H+2;
if i=75 then H:=H+2;
if i=76 then H:=H+2;
if i=77 then H:=H+2;
if i=78 then H:=H+2;
if i=79 then H:=H+2;
if i=80 then H:=H+2;
if i=81 then H:=H+2;
if i=82 then H:=H+2;
if i=83 then H:=H+2;
if i=84 then H:=H+2;
if i=85 then H:=H+2;
if i=86 then H:=H+2;
if i=87 then H:=H+2;
if i=88 then H:=H+2;
if i=89 then H:=H+2;
if i=90 then H:=H+2;
if i=91 then H:=H+2;
if i=92 then
begin
i:=0;
H:=90;
end;
bombarding;
repaint;
end;
end.
Смысл игры такой:мужик сверху экрана кидаецо всякими хренями,которые надо ловить с помощью платформы.
Проблема:
Не могу сделать так,чтобы при попадании на платформу предмета он исчезал,а если он пролетел мимо платформы то заканчиваецо игра.
Помогите плиз,очень нада!А то уже все сделал,а это не могу...
Последний раз редактировалось ViNT, 26.10.2008 в 22:20.
|
(Offline)
|
|
25.10.2008, 16:31
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Не знаю, про что игра, но этот код:
if i=1 then H:=H-2;
if i=2 then H:=H-2;
if i=3 then H:=H-2;
if i=4 then H:=H-2;
if i=5 then H:=H-2;
if i=6 then H:=H-2;
if i=7 then H:=H-2;
if i=8 then H:=H-2;
if i=9 then H:=H-2;
if i=10 then H:=H-2;
if i=11 then H:=H-2;
if i=12 then H:=H-2;
if i=13 then H:=H-2;
if i=14 then H:=H-2;
if i=15 then H:=H-2;
if i=16 then H:=H-2;
if i=17 then H:=H-2;
if i=18 then H:=H-2;
if i=19 then H:=H-2;
if i=20 then H:=H-2;
if i=21 then H:=H-2;
if i=22 then H:=H-2;
if i=23 then H:=H-2;
if i=24 then H:=H-2;
if i=25 then H:=H-2;
if i=26 then H:=H-2;
if i=27 then H:=H-2;
if i=28 then H:=H-2;
if i=29 then H:=H-2;
if i=30 then H:=H-2;
if i=31 then H:=H-2;
if i=32 then H:=H-2;
if i=33 then H:=H-2;
if i=34 then H:=H-2;
if i=35 then H:=H-2;
if i=36 then H:=H-2;
if i=37 then H:=H-2;
if i=38 then H:=H-2;
if i=39 then H:=H-2;
if i=40 then H:=H-2;
if i=41 then H:=H-2;
if i=42 then H:=H-2;
if i=43 then H:=H-2;
if i=44 then H:=H-2;
if i=45 then H:=H+2;
if i=46 then H:=H+2;
if i=47 then H:=H+2;
if i=48 then H:=H+2;
if i=49 then H:=H+2;
if i=50 then H:=H+2;
if i=51 then H:=H+2;
if i=52 then H:=H+2;
if i=53 then H:=H+2;
if i=54 then H:=H+2;
if i=55 then H:=H+2;
if i=56 then H:=H+2;
if i=57 then H:=H+2;
if i=58 then H:=H+2;
if i=59 then H:=H+2;
if i=60 then H:=H+2;
if i=61 then H:=H+2;
if i=62 then H:=H+2;
if i=63 then H:=H+2;
if i=64 then H:=H+2;
if i=65 then H:=H+2;
if i=66 then H:=H+2;
if i=67 then H:=H+2;
if i=68 then H:=H+2;
if i=69 then H:=H+2;
if i=70 then H:=H+2;
if i=71 then H:=H+2;
if i=72 then H:=H+2;
if i=73 then H:=H+2;
if i=74 then H:=H+2;
if i=75 then H:=H+2;
if i=76 then H:=H+2;
if i=77 then H:=H+2;
if i=78 then H:=H+2;
if i=79 then H:=H+2;
if i=80 then H:=H+2;
if i=81 then H:=H+2;
if i=82 then H:=H+2;
if i=83 then H:=H+2;
if i=84 then H:=H+2;
if i=85 then H:=H+2;
if i=86 then H:=H+2;
if i=87 then H:=H+2;
if i=88 then H:=H+2;
if i=89 then H:=H+2;
if i=90 then H:=H+2;
if i=91 then H:=H+2;
|
ацки жжот
Почти что Почта России:
Выучить проверку на > и < не пробовал?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
25.10.2008, 17:18
|
#3
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Аватар размером 1 Мб тоже жжот
|
(Offline)
|
|
25.10.2008, 17:30
|
#4
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Блин!так кто то можеь помочь?я ж не виноват,чо недавно начал учить midletpascal!
|
(Offline)
|
|
25.10.2008, 18:01
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Блин!так кто то можеь помочь?я ж не виноват,чо недавно начал учить midletpascal!
|
Тогда сначала приведи код в порядок а уже потом проси помочь.
В таком виде в ём никто не разберётся даже если захочет.
Аватар размером 1 Мб тоже жжот
|
Опера 9.хх - Клик правой кнопкой - Блокировать содержимое - Клик на неугодной аватаре и больше она тебя не будет беспокоить
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
25.10.2008, 18:30
|
#6
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Меня беспокоит не аватара, а ее размер
|
(Offline)
|
|
25.10.2008, 19:32
|
#7
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
|
(Offline)
|
|
26.10.2008, 07:54
|
#8
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Выложи свой исходник в архиве, а то не видно что там за мужик и что он там кидает.
А пока научись использовать операторы AND и OR.
Строки
if (i>0) and (i<45) then H:=H-2; или if (i>44) and (i<92) then H:=H+2; или if (z>0) and (z<6) then u:=u+2;
Не только намного сократят текст твоего исходника, но и убыстрят работу программы.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.10.2008, 18:51
|
#9
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Все сделал...Но есть еще одна проблема...вот кусочик проги:
if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then bombarding;
кароче,этот кусок делает то,что при попадании предмета на платформу вызываецо процедура,котороя дает предмету новые координаты,и он снова падает.Здесь проблем нет.Но когда я поймал предмет в процедуре,я не могу перейти к следующей:
procedure bombarding;
begin
q:=15;
u:=0;
if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then sledujushcajaprocedura;
end;
Пожалуста разъясните почему оно не пашет,и как сделать,чтоб все работало!
|
(Offline)
|
|
26.10.2008, 19:33
|
#10
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Сообщение от Mark Castle
procedure bombarding;
begin
q:=15;
u:=0;
if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then sledujushcajaprocedura;
end;
Пожалуста разъясните почему оно не пашет,и как сделать,чтоб все работало!
|
Ты пытаешься вызвать процедуру из самой себя (вроде рекурсией называется)
Вынеси жирную строку из процедуры в игровой цикл.
Выглядеть будет примерно так:
Program Bombardeer; const fieldwidth = 70; fieldheight = 70; var gameField: array[1..fieldWidth, 1..fieldHeight] of integer; screenWidth, screenHeight : integer; screenX, screenY : integer; X,Y,key :integer; Q,U,z,O,P,i,H,J,F,G :integer; pig,fon,bomber,stn,bomb :image; play,exit :command; //........... procedure bombarding; begin q:=15; u:=0; end; //......... begin stn:=LoadImage('/stn.png'); bomb:=LoadImage('/bomb.png'); bomber:=LoadImage('/bomber.png'); fon:=Loadimage('/fone.png'); pig:=LoadImage('/pig.png'); X:=25; Y:=45; F:=0; G:=0; H:=90; J:=4; O:=0; P:=15; Q:=25; U:=5; repeat //Начало игрового цикла DrawImage(fon,F,G); DrawImage(stn,O,P); DrawImage(bomber,H,J); DrawImage(pig,X,Y); DrawImage(bomb,Q,U); SetColor(140,0,140); fillrect(0,50,150,90); if x<0 then x:=0; if y<0 then y:=0; if x>84 then x:=84; key:=keyToAction(GetKeyPressed); if (key=GA_RIGHT) then X:=X+3; if (key=GA_LEFT) then X:=X-3; if (key=GA_UP) then Y:=Y-0; if (key=GA_DOWN) then Y:=Y+0; i:=i+1; if (i>0) and (i<45) then H:=H-2; if (i>44) and (i<92) then H:=H+2; if i=92 then begin i:=0; H:=90; end; if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then bombarding; repaint; delay(100);//Лучше использвать именно здесь(т.е. после repaint;) until (key=KE_KEY0);// выходим из цикла по нажатию "0" end.
Только я не понял, что именно должна делать процедура bombarding.
И вообще если хочешь, чтоб тебе помогли, то
1) либо пиши код программы с пояснениями по каждой строке
2) либо выкладывай исходнег(заархив-ую папку с проектом)
Последний раз редактировалось Cliffe Snake, 26.10.2008 в 19:56.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.10.2008, 20:01
|
#11
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
а как из процедуры bombarding вызвать другую процедуру?
|
(Offline)
|
|
26.10.2008, 20:52
|
#12
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Сообщение от Mark Castle
а как из процедуры bombarding вызвать другую процедуру?
|
Вроде бы перед этими процедурами надо вставить Implementation; и тогда можно будет вызывать из процедуры другую процедуру.
Необходимость вложенных вызовов процедур, по-моему, минимальна, можно почти всегда обойтись последовательным вызовом процедур.
З.Ы.
Да скинь ты исходник, никто его у тебя не украдёт.
|
(Offline)
|
|
26.10.2008, 21:10
|
#13
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Вы что, ребята. implementation МП вообще не поддерживает. Процедуры можно вызывать друг из друга, единственная оговорка - нужно, чтобы объявление процедуры, которую вызывают, стояло до процедуры, из которой вызывают. Рекурсия вроде бы тоже не запрещена.
|
(Offline)
|
|
26.10.2008, 21:42
|
#14
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Сообщение от Romanzes
Вы что, ребята. implementation МП вообще не поддерживает.
|
Вообщета она есть(правда я её не юзал), иди поройся в справке там чёто было про implementation.
Сообщение от Romanzes
Процедуры можно вызывать друг из друга, единственная оговорка - нужно, чтобы объявление процедуры, которую вызывают, стояло до процедуры, из которой вызывают.
|
На эту оговорку можно забить, если использовать forward; выглядит вот так:
Program Procedures; var i,j,k,key : integer; ///////////////////////////////////////// ///////// Procedures&Functions ////////// ///////////////////////////////////////// Procedure pervaja; begin vtoraja; end; Procedure vtoraja; forward; begin //.... end; {============================} {============MAIN============} {============================} begin //........ pervaja; //...... end.
то есть, если вы хотите вызывать процедуру из других процедур, то вы должны при её объявлении использовать forward;
Последний раз редактировалось Cliffe Snake, 26.10.2008 в 21:50.
|
(Offline)
|
|
27.10.2008, 06:08
|
#15
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Помогите доделать игру!MidletPascal.
Сообщение от Mark Castle
procedure bombarding;
begin
q:=15;
u:=0;
if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then sledujushcajaprocedura;
end;
|
Продолжаем разбор кода. Накой х проверять переменные q и u если они строкой раньше были изменены на 15 и 0? Переменная u со значением 0 никогда не будет одновременно <43 и >38. Так что ничего странного нет, что sledujushcajaprocedura НИКОГДА не вызовется.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:19.
|