forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Помогите доделать игру!MidletPascal. (http://forum.boolean.name/showthread.php?t=7233)

Mark Castle 25.10.2008 15:50

Помогите доделать игру!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.

Смысл игры такой:мужик сверху экрана кидаецо всякими хренями,которые надо ловить с помощью платформы.
Проблема:
Не могу сделать так,чтобы при попадании на платформу предмета он исчезал,а если он пролетел мимо платформы то заканчиваецо игра.
Помогите плиз,очень нада!А то уже все сделал,а это не могу...

ABTOMAT 25.10.2008 16:31

Ответ: Помогите доделать игру!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;
ацки жжот

Почти что Почта России:


Выучить проверку на > и < не пробовал?

Romanzes 25.10.2008 17:18

Ответ: Помогите доделать игру!MidletPascal.
 
Аватар размером 1 Мб тоже жжот

Mark Castle 25.10.2008 17:30

Ответ: Помогите доделать игру!MidletPascal.
 
Блин!так кто то можеь помочь?я ж не виноват,чо недавно начал учить midletpascal!

ABTOMAT 25.10.2008 18:01

Ответ: Помогите доделать игру!MidletPascal.
 
Цитата:

Блин!так кто то можеь помочь?я ж не виноват,чо недавно начал учить midletpascal!
Тогда сначала приведи код в порядок а уже потом проси помочь.
В таком виде в ём никто не разберётся даже если захочет.

Цитата:

Аватар размером 1 Мб тоже жжот
Опера 9.хх - Клик правой кнопкой - Блокировать содержимое - Клик на неугодной аватаре и больше она тебя не будет беспокоить ;)

Romanzes 25.10.2008 18:30

Ответ: Помогите доделать игру!MidletPascal.
 
Меня беспокоит не аватара, а ее размер

Mark Castle 25.10.2008 19:32

Ответ: Помогите доделать игру!MidletPascal.
 
:''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''((
Блин,люди,ктото мне раскажет как сделать так,чтобы при попадании на платформу предмета он исчезал,а если он пролетел мимо платформы то заканчиваецо игра?И как вообще делаюца преграды в игре????!!!!!!!!!!!!!:''(( :''(( :''(( :''(( :''(( :''(( :''(( :''(( :''((

odd 26.10.2008 07:54

Ответ: Помогите доделать игру!MidletPascal.
 
Выложи свой исходник в архиве, а то не видно что там за мужик и что он там кидает.
А пока научись использовать операторы AND и OR.
Строки
PHP код:

if (i>0) and (i<45then H:=H-2;
или
if (i>44) and (i<92then H:=H+2;
или
if (z>0) and (z<6then u:=u+2

Не только намного сократят текст твоего исходника, но и убыстрят работу программы.

Mark Castle 26.10.2008 18:51

Ответ: Помогите доделать игру!MidletPascal.
 
:SOS: Все сделал...Но есть еще одна проблема...вот кусочик проги:
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;
Пожалуста разъясните почему оно не пашет,и как сделать,чтоб все работало!

Cliffe Snake 26.10.2008 19:33

Ответ: Помогите доделать игру!MidletPascal.
 
Цитата:

Сообщение от Mark Castle (Сообщение 89527)
:SOS:
procedure bombarding;
begin
q:=15;
u:=0;

if (q>x) and (q<(x+19)) and (u<43) and (u>38 ) then sledujushcajaprocedura;

end;
Пожалуста разъясните почему оно не пашет,и как сделать,чтоб все работало!

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

Program Bombardeer;
const 
fieldwidth 70
fieldheight 70;
var 
gameField: array[1..fieldWidth1..fieldHeightof integer
screenWidthscreenHeight integer
screenXscreenY             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:=25Y:=45
F:=0G:=0H:=90J:=4
O:=0P:=15Q:=25U:=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_RIGHTthen X:=X+3
if (
key=GA_LEFTthen X:=X-3
if (
key=GA_UPthen Y:=Y-0
if (
key=GA_DOWNthen Y:=Y+0
i:=i+1;
if (
i>0) and (i<45then H:=H-2;
if (
i>44) and (i<92then H:=H+2;
if 
i=92 then begin i:=0H:=90end;
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

:cool:
Только я не понял, что именно должна делать процедура bombarding.
И вообще если хочешь, чтоб тебе помогли, то
1) либо пиши код программы с пояснениями по каждой строке
2) либо выкладывай исходнег(заархив-ую папку с проектом)

Mark Castle 26.10.2008 20:01

Ответ: Помогите доделать игру!MidletPascal.
 
а как из процедуры bombarding вызвать другую процедуру?

Cliffe Snake 26.10.2008 20:52

Ответ: Помогите доделать игру!MidletPascal.
 
Цитата:

Сообщение от Mark Castle (Сообщение 89536)
а как из процедуры bombarding вызвать другую процедуру?

Вроде бы перед этими процедурами надо вставить Implementation; и тогда можно будет вызывать из процедуры другую процедуру.
Необходимость вложенных вызовов процедур, по-моему, минимальна, можно почти всегда обойтись последовательным вызовом процедур.
З.Ы.
Да скинь ты исходник, никто его у тебя не украдёт.

Romanzes 26.10.2008 21:10

Ответ: Помогите доделать игру!MidletPascal.
 
Вы что, ребята. implementation МП вообще не поддерживает. Процедуры можно вызывать друг из друга, единственная оговорка - нужно, чтобы объявление процедуры, которую вызывают, стояло до процедуры, из которой вызывают. Рекурсия вроде бы тоже не запрещена.

Cliffe Snake 26.10.2008 21:42

Ответ: Помогите доделать игру!MidletPascal.
 
Цитата:

Сообщение от Romanzes (Сообщение 89541)
Вы что, ребята. implementation МП вообще не поддерживает.

Вообщета она есть(правда я её не юзал), иди поройся в справке там чёто было про implementation.
Цитата:

Сообщение от Romanzes (Сообщение 89541)
Процедуры можно вызывать друг из друга, единственная оговорка - нужно, чтобы объявление процедуры, которую вызывают, стояло до процедуры, из которой вызывают.

На эту оговорку можно забить, если использовать forward; выглядит вот так:
PHP код:

Program Procedures;
var 
i,j,k,key integer;
/////////////////////////////////////////
///////// Procedures&Functions //////////
/////////////////////////////////////////
Procedure pervaja;
begin
  vtoraja
;
end;
Procedure vtorajaforward;
begin
//....
end;
{============================}
{============
MAIN============}
{============================}
begin
//........
 
pervaja;
//......
end

то есть, если вы хотите вызывать процедуру из других процедур, то вы должны при её объявлении использовать forward;
:tongue:

odd 27.10.2008 06:08

Ответ: Помогите доделать игру!MidletPascal.
 
Цитата:

Сообщение от Mark Castle (Сообщение 89527)
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 НИКОГДА не вызовется.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot