Версия для печати темы
Форум «Всё о Паскале» _ Написание игр _ Игра - Шарики с пластинами
Автор: Kio 31.05.2004 18:28
Здравствуйте!
Помогите пожалуйста написать игру или найти исходник для нее!
Я не знаю как она действительно называется, но суть такова : пользователь управляет шариком(вправо-влво),небольшие пластины движутся вверх; шарик должен перемещаться по этим пластинам так, чтобы не упасть в "бездну" и не дойти до верней точки игрового поля.
Спасибо за внимание!
Автор: BlackShadow 31.05.2004 19:09
Не думаю, что для кого-то кроме тебя это так уж важно
Возникли вопросы:
1). Режим: графика или текст (псевдографика).
2). Умеет ли шарик двигаться влево-вправо или только вверх/вниз.
3). Решение на Pascal'е? На каком?
4). До когда тебе это надо?
Автор: Kio 1.06.2004 15:10
Спасибо Вам большое! Вы единственный кто откликнулся!
1)-графический режим
2)-пользователь может двигать шарик только влево-вправо, а сам по себе арик, когда находится на пластине, двигается вместе с пластиной вверх...
3)-да! решение только на паскале! 7.0 вроде бы
4)-вообще ето надо до четверга-пятницы..., а там уж как повезет
Автор: BlackShadow 1.06.2004 15:20
Только я чего-то недопонял. Если пластины движутся вверх, то шарику достаточно стать на пластину, чтобы добраться до верхней точки. Или надо с одного угла в другой дойти?
Автор: Kio 1.06.2004 15:33
Так... Сейчас все попробую обьяснить!
@
-------
------ -------
--------
---------
Пластины движутся вверх! (игра заканчивается, если шарик достигает либо верхней либо нижней границы игрового поля) Шарик располагается на пластине в начальный момент времени(и движется вместе с пластиной вверх). Юзер может двигает шарик влево-вправо. Шарик, достигая границы пластины падает вниз, если под ним есть пластина, то он падает на нее и дальше аналогично...
Понятней или попробовать обьяснить подругому?
Автор: BlackShadow 1.06.2004 16:19
Изящно ты меня тупым назвал
Посмотрю сегодня, что можно сделать. Тебе по-проще?
Автор: Kio 1.06.2004 20:17
Ой... Извените пожалуйста, если так со стороны показалось!!!!
Мне многие говорят, что я очень резко изьясняюсь...но я так совсем не считаю...
И я эта... девушка...
Ну как сказать попроще... наверно да...
СПАСИБО
Автор: GLuk 1.06.2004 22:28
Что-то меня зацепило... ;) Взялся без особого интереса, но...
Сделано все плохо, но стандартными паскалевскими средствами! Никакого асма. + до кучи подсчет дырок.
Только без пинков по поводу шлейфа около круга, это не от кривых рук, а для красотищи..
И еще, товарищи, давайте обойдемся без тупых вопросов, графика не инициализируется и все такое... <_<
Код
Uses
Graph,Crt;
Const
LineCount = 10;
HoleSize = 30;
Step = 01;
LineC = White;
R = 10;
Pause = 4500;
Var
i,j:Word;
Gd,Gm:Integer;
S:String;
LineH:Word;
A:array[1..LineCount,1..3] of Word;
Process,MustMove:Boolean;
X,Y:Word; {Љ®®а¤Ё вл и аЁЄ }
C:Char;
HC:LongInt;
Procedure OutLine(N:Word);
begin
If (A[N,1]>0) and (A[N,1]<641) then
begin
Line(1,A[N,1],A[N,2],A[N,1]);
Line(A[N,2]+HoleSize,A[N,1],A[N,3],A[N,1]);
Line(A[N,3]+HoleSize,A[N,1],640,A[N,1]);
end;
end;
Begin
Randomize;
Gd:=Detect;
InitGraph(Gd,Gm,'');
{‚ᥠЁ§ з «м® ®ЇвЁ¬Ё§Ёа®ў ® Ї®¤ а §аҐиҐЁҐ 640е480}
LineH:=640 DIV (LineCount+5);
For i:=1 to LineCount do
begin
A[i,1]:=i*LineH;
A[i,2]:=Random(320)+10;
A[i,3]:=Random(200)+320;
OutLine(i);
end;
Y:=LineCount;
X:=((A[i,3]-A[i,2]+HoleSize) DIV 2) + HoleSize + A[i,2];
Circle(X,A[Y,1]-R,R);
Process:=True;
MustMove:=False;
{j:=1; {‘зҐвзЁЄ ®в®бЁвҐ«м®Ј® ᬥ饨п}
ReadLn;
HC:=0;
While Process do
begin
If KeyPressed then
begin
C:=ReadKey;
Case C of
#122:If X<>1 then Dec(X);
#120:If X<>640 then Inc(X);
#27:Process:=False;
end;
If ((A[Y,2]+HoleSize DIV 2)=X) or
((A[Y,3]+HoleSize DIV 2)=X) then
begin
Inc(HC);
Inc(Y);
If Y=LineCount+1 then Process:=False;
end;
end;
SetColor(Black);
Circle(X,A[Y,1]-R,R);
For i:=1 to LineCount do
begin
{‘вЁа Ґ¬ бв ஥}
Line(1,A[i,1],640,A[i,1]);
Dec(A[i,1],Step);
end;
{Џа®и« ЇҐаў п Ё ўв®а п}
If (A[1,1]=1) then MustMove:=True; {Check range}
SetColor(LineC);
If MustMove then
{Move array}
begin
MustMove:=False;
For i:=1 to LineCount-1 do
begin
A[i,1]:=A[i+1,1];
A[i,2]:=A[i+1,2];
A[i,3]:=A[i+1,3];
end;
Dec(Y);
If Y=0 then Process:=False;
{Last line}
i:=LineCount;
A[i,1]:=i*LineH;
A[i,2]:=Random(320)+10;
A[i,3]:=Random(200)+320;
end;
For i:=1 to LineCount do
begin
OutLine(i);
end;
Circle(X,A[Y,1]-R,R);
Delay(Pause);
end;
ClearDevice;
SetTextStyle(TriplexFont,0,7);
SetColor(Red);
Str(HC,S);
OutText('CRASH!!! BABAX!!!');
If HC=0 then OutTextXY(10,200,'XEPOBO!!!')
else
OutTextXY(10,200,S+' HOLES!');
ReadLn;
CloseGraph;
end.
Автор: Altair 1.06.2004 22:45
Код
Uses CRT,Graph;
Const
sShar=100;
sPlo=200;
KP = 30; {Ї«®в®бвм ЇаҐЇп¤бвўЁ©}
type shar = record
x:word;
y:word;
end;
plo = record
x:word;
y:word;
end;
Var grDriver : Integer;
grMode : Integer;
prep: array[1..kp] of plo;
preptemp:plo;
i:byte;
s:shar;
is,ip:byte;
nk:byte;
kv:byte;
{- 400 }
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
randomize;
for i:=1 to kp do prep[i].y:=480;
prep[1].x:=random(400); prep[1].y:=479;
s.x:=random(400); s.y:=3;
repeat
{ delay(20);}
putpixel(s.x,s.y,15);
{аЁб㥬 «ЁЁЁ}
setcolor(15);
for i:=1 to kp do If (prep[i].x<>0) and (prep[i].y<>480) then
line(prep[i].x,prep[i].y,prep[i].x+70,prep[i].y);
inc(is); inc(ip);
{®ЇгбЄ Ґ¬ и а}
If is=Sshar then
begin
putpixel(s.x,s.y,0);
inc(s.y);
is:=0
end;
{Ї®¤Ё¬ Ґ¬ Ї«®й ¤ЄЁ}
If ip=sPlo then
begin
setcolor(0);
for i:=1 to kp do If (prep[i].x<>0) and (prep[i].y<>480) then
line(prep[i].x,prep[i].y,prep[i].x+70,prep[i].y);
for i:=1 to kp do If (prep[i].y)<>480 then dec(prep[i].y);
setcolor(15);
for i:=1 to kp do If (prep[i].x<>0) and (prep[i].y<>0) then
line(prep[i].x,prep[i].y,prep[i].x+70,prep[i].y);
end;
If random(2)=1 then for i:=1 to kp do If prep[i].y=480 then
If random(65000)=455 then begin prep[i].x:=random(400); prep[i].y:=479 end;
for i:=1 to KP do If prep[i].y=0 then prep[i].y:=480;
If keypressed then
begin
putpixel(s.x,s.y,0);
nk:=ord(readkey); If nk=49 then dec(s.x);
If nk=50 then inc(s.x);
If (nk=27) then kv:=1;
end;
If getpixel(s.x,succ(s.y))=15 then
begin
putpixel(s.x,s.y,0);
If ip=splo-1 then dec(s.y,2) else dec(s.y);
putpixel(s.x,s.y,15);
If is>2 then dec(is)
end;
until (s.y=0) or (s.y=480) or (kv=1);
closegraph;
If s.y=0 then writeln('‚л Їа®ЁЈа «Ё');
If s.y=480 then writeln('‚л ўлЁЈа «Ё');
If (s.y<>0) and (s.y<>480) then writeln('‚л ўли«Ё Ё§ ЁЈал');
writeln(' ¦¬ЁвҐ «оЎго Є« ўЁиг ...');
while not keypressed do;
readkey;
ClrScr; Halt;
end.
Мой вариант.
Что бы было из чего выбирать
Автор: Altair 1.06.2004 22:58
Во-первых работает ТОЛЬКО моя.
Во вторых в моей управление - клавиша 1 - влево, 2 - вправо.
Могу переделать на кнопки -> and <- если надо.
Автор: Kio 1.06.2004 23:17
Да, действительно только вторая работает...
Ща сидела рубилась.... Прикольно,....
Спасибо большое! Только вот иногда шарик падает с половины пластины...
Щас еще потестю
Автор: GLuk 1.06.2004 23:20
Ща проверю....
Автор: GLuk 1.06.2004 23:31
Товарищи у Вас стандартный компилер??!!
У меня все канает..
А так как у тебя Oleg_Z и нужно было сделать (question к Kio)??
Что за ошибка вылетает??
Может Ввод забыли нажать??
Автор: Altair 1.06.2004 23:38
Цитата
Только вот иногда шарик падает с половины пластины...
Гы ...
Я даже знаю почему, но не скажу. Сама подумай. Догадаешься, тогда подправлю! :P
Цитата
Что за ошибка вылетает??
No ERROR :D
Просто шар вниз не летит!
Автор: Kio 1.06.2004 23:41
Проблема не в этом.... Шарик с пластиночки (када она заканчивается) не падает! Вот!
Автор: Altair 1.06.2004 23:49
Цитата
Проблема не в этом.... Шарик с пластиночки (када она заканчивается) не падает! Вот!
Это у меня??? У меня такого нет!
У меня шар в середине проваливается! (иногда
)
Автор: Kio 1.06.2004 23:53
2 GLuk- про шарик, который не падает с пластиночек
2 Oleg_Z - только что назвал свою ошибку!!!!! исправляй...(футка)
Автор: Altair 2.06.2004 0:08
Дая не назвал ошибку, а просто указал где она появляется. А сожешь сказать почему она появляется?
Автор: GLuk 2.06.2004 3:01
АААААААААААА!! Ты имеешь ввиду, то что при переходе с пластины на пластину, он падает сразу, а наверху, над дыркой остается след, который после исчезает: ДЫК - ЭТО ФИЧА, а так все катит, если упал вниз - хана, уперся вверх - ТОЖ, или я чой-то не догоняю...??
Автор: Kio 2.06.2004 3:10
2Gluk --- да вроде все так, тока шарик не падает....
Автор: GLuk 2.06.2004 10:34
Куда он не падает? На следующую пластину?? У меня все падает...
Автор: Shadow 2.06.2004 15:55
неа у GLuk - a все работает
я проверил сразу откомпилировался и запустился
да и шарик тоже прыгает точнее падает все нормально
Автор: GLuk 2.06.2004 17:51
Вот и я о том же, тама Ctrl+F9 надо нажимать товарищи
Автор: Altair 3.06.2004 11:23
Не-а товарищ! Тама Ctrl+F9 нажимаешь и запускается игра, потом надо ENTER нажать, и начинают пластины двигатся, но шар не падает, куда надо!
---
Это интересно.
У тебя какой компилер?
Автор: GLuk 3.06.2004 23:34
Стандартный - седьмой, по-моему как и у многих, просто бывает, что у некоторых он перепахан, но такие люди в этом и канают...
Ты имеешь ввиду, что шар не падает в дырку, если его туда подвести??
Клавиши управления: Z,X
Автор: Kio 3.06.2004 23:41
2 Oleg_Z ---
Цитата
end;
If getpixel(s.x,succ(s.y))=15 then
begin
По-моему succ там совсем не нужен!? Я права или сказала глупость? Из-за него и проваливается шарик сквозь площадки??
А иногда игра просто замерает и ждет действия юзера... это из-за чего?
2 Gluk --- именно в дырочку то он и не падает...я про шарик
Автор: GLuk 3.06.2004 23:43
А почему у Shadow и меня падает??
Автор: Kio 3.06.2004 23:49
а как закрасить шарик и чтоб он шлейф не оставлял и препядствия шли пореже и не заезжали друг на друга???
2 Gluk --- у меня паскаль 7.0 и ненавороченный, правда русский не читает после запуска игр, а так ...
Прикрепленные файлы
PR2.PAS ( 2.35 килобайт )
Кол-во скачиваний: 278
Автор: GLuk 4.06.2004 0:18
Товарищи - потестите мою прогу на предмет ДЫРОЧКИ, куда шарик падает!
Автор: Kio 4.06.2004 0:26
2Gluk --- только что перегрузила комп и протестила ....
работает.....клева
Автор: Zed2000 12.03.2006 23:15
У Altair офигенная прога! Конечно, с серединой платформы пришлось чуть помучиться (не буду раскрывать секретов =)), а так - все просто здорово! Altair, большой респект =))!