Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Игра - Шарики с пластинами

Автор: Kio 31.05.2004 18:28

Здравствуйте!
Помогите пожалуйста написать игру или найти исходник для нее!
Я не знаю как она действительно называется, но суть такова : пользователь управляет шариком(вправо-влво),небольшие пластины движутся вверх; шарик должен перемещаться по этим пластинам так, чтобы не упасть в "бездну" и не дойти до верней точки игрового поля.

Спасибо за внимание!

Автор: BlackShadow 31.05.2004 19:09

Не думаю, что для кого-то кроме тебя это так уж важно smile.gif
Возникли вопросы:
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

Изящно ты меня тупым назвал smile.gif
Посмотрю сегодня, что можно сделать. Тебе по-проще?

Автор: Kio 1.06.2004 20:17

Ой... Извените пожалуйста, если так со стороны показалось!!!! sad.gif
Мне многие говорят, что я очень резко изьясняюсь...но я так совсем не считаю...

И я эта... девушка... blink.gif

Ну как сказать попроще... наверно да...

СПАСИБО

Автор: GLuk 1.06.2004 22:28

Что-то меня зацепило... ;) Взялся без особого интереса, но...
Сделано все плохо, но стандартными паскалевскими средствами! Никакого асма. + до кучи подсчет дырок.
Только без пинков по поводу шлейфа около круга, это не от кривых рук, а для красотищи.. smile.gif

И еще, товарищи, давайте обойдемся без тупых вопросов, графика не инициализируется и все такое... <_<

Код

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.


Мой вариант.
Что бы было из чего выбирать smile.gif

Автор: 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)??

Что за ошибка вылетает??

Может Ввод забыли нажать?? blink.gif

Автор: Altair 1.06.2004 23:38

Цитата
Только вот иногда шарик падает с половины пластины...

Гы ... lol.gif
Я даже знаю почему, но не скажу. Сама подумай. Догадаешься, тогда подправлю! :P
Цитата
Что за ошибка вылетает??


No ERROR :D
Просто шар вниз не летит!

Автор: Kio 1.06.2004 23:41

Проблема не в этом.... Шарик с пластиночки (када она заканчивается) не падает! Вот!

Автор: Altair 1.06.2004 23:49

Цитата
Проблема не в этом.... Шарик с пластиночки (када она заканчивается) не падает! Вот!


Это у меня??? У меня такого нет!
У меня шар в середине проваливается! (иногда smile.gif )

Автор: Kio 1.06.2004 23:53

2 GLuk- про шарик, который не падает с пластиночек huh.gif
2 Oleg_Z - только что назвал свою ошибку!!!!! lol.gif исправляй...(футка)

Автор: Altair 2.06.2004 0:08

Дая не назвал ошибку, а просто указал где она появляется. А сожешь сказать почему она появляется?

Автор: GLuk 2.06.2004 3:01

АААААААААААА!! Ты имеешь ввиду, то что при переходе с пластины на пластину, он падает сразу, а наверху, над дыркой остается след, который после исчезает: ДЫК - ЭТО ФИЧА, а так все катит, если упал вниз - хана, уперся вверх - ТОЖ, или я чой-то не догоняю...?? blink.gif

Автор: 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 надо нажимать товарищи blink.gif

Автор: 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 там совсем не нужен!? Я права или сказала глупость? Из-за него и проваливается шарик сквозь площадки?? sad.gif
А иногда игра просто замерает и ждет действия юзера... это из-за чего?

2 Gluk --- именно в дырочку то он и не падает...я про шарик

Автор: GLuk 3.06.2004 23:43

А почему у Shadow и меня падает??

Автор: Kio 3.06.2004 23:49

а как закрасить шарик и чтоб он шлейф не оставлял и препядствия шли пореже и не заезжали друг на друга???

2 Gluk --- у меня паскаль 7.0 и ненавороченный, правда русский не читает после запуска игр, а так ...


Прикрепленные файлы
Прикрепленный файл  PR2.PAS ( 2.35 килобайт ) Кол-во скачиваний: 261

Автор: GLuk 4.06.2004 0:18

Товарищи - потестите мою прогу на предмет ДЫРОЧКИ, куда шарик падает!

Автор: Kio 4.06.2004 0:26

2Gluk --- только что перегрузила комп и протестила ....
работает.....клева

Автор: Zed2000 12.03.2006 23:15

У Altair офигенная прога! Конечно, с серединой платформы пришлось чуть помучиться (не буду раскрывать секретов =)), а так - все просто здорово! Altair, большой респект =))!