Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 22:13   #1
fox_
Новичок
Джуниор
 
Регистрация: 19.04.2012
Сообщений: 1
По умолчанию Задача на лопанье шаров TP 7.0

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

Собственно код ниже, есть вопрос:
1. Сейчас шарики просто рисуються и стаять статически, как сделать что бы я мог одновременно стрелять и шарики продолжали падать, как не игрался не получаться.
2. как реализовать что бы лопались шарики одного цвета.

Сильно не пинайте, плохо я помню паскаль, особенно никогда не любил графику на нем.

Код:
Program P1;
uses
crt, graph;
var
x,y,r,i,c,j:integer;
x1p,x2p,y1p,y2p:integer;
t:char;
x1h:array [1..20] of integer;
y1h:array [1..20] of integer;
Driver, Mode:integer;


procedure ball(x,y,r:integer);
var
temp:integer;
begin
i:=0;
repeat
{for i:=1 to 20 do begin}
    i:=i+1;
    C:=random(5);
    Setcolor(C);
           y1h[i]:=y1h[i]+random(i)+20;
           x1h[i]:=x1h[i];
          {setcolor(15); {rosovanie 1 shara}
           circle(x1h[i],y1h[i],r);
           delay(1000);
          {Setcolor(0);
          circle(x1h[i],y1h[i],r); {risovanie 1 shara}
          temp:=y1h[i];
        {end;}
until {keypressed} (temp>300) or (i>20);
end;


procedure move;
var x,y,x1,y1:integer;
    c1,c2:byte;
    k:char;
    temp1:integer;
    move:boolean;
    x1b,y1b,rb:integer;
begin
x:=280;y:=450;rb:=10;
c1:=12;c2:=0;
move:=true;
repeat
if keypressed then
  begin
    k:=readkey;
    if (k=#77)or(k=#100)or(k=#130)or(k=#162) then
      begin
        y1:=y;
        x1:=x;
        x:=x+5;
        move:=true;
      end;
    if(k=#75)or(k=#97)or(k=#148)or(k=#228) then
      begin
        y1:=y;
        x1:=x;
        x:=x-5;
        move:=true;
      end;
    if (k=#32) then
       begin
       x1b:=x+30;
       y1b:=y-20;
       repeat
             setcolor(15);
             circle(x1b,y1b,rb);
             delay(10000);
             setcolor(0);
             circle(x1b,y1b,rb);
             y1b:=y1b-20;
             temp1:=0;
             for i:=1 to 20 do begin
                 if (x1b=x1h[i]) then begin
                 temp1:=i;
                 {setcolor(0);
                 circle(x1h[i],y1h[i],r);
                 setcolor(3);
                 outtextXY(x,y1b,'test');}
                 end;
                 if (temp1>0) then begin
                 setcolor(0);
                 circle(x1h[i],y1h[i],r);
                 setcolor(3);
                 outtextXY(x1h[i],y1h[i],'Text');
                 temp1:=0;
                 end;
             end;
       until y1b<20;
       {Setcolor(3);
       outtextXY(x,y1b,'Test');}
       end;


  end;
if move then
  begin
   Setcolor(c2);
   Rectangle(x1,y1,x1+80,y1+80);
   Setcolor(c1);
   Rectangle(x,y,x+80,y+80);
   move:=false;
  end;
until k=#27;
end;



procedure baalDel(x,y:integer);
begin
setlinestyle(0,0,1);
setcolor(0);
circle(x,y,r);
end;

begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
x:=10;
y:=20;
r:=10;
x1h[1]:=x;
y1h[1]:=y;
x1p:=280;
y1p:=450;
x2p:=320;
y2p:=500;
for i:=1 to 20 do begin
    x1h[i]:=x+20;
    y1h[i]:=y;
    x:=x1h[i];
    end;
ball(x,y,r);
move;


Readln;
end.
fox_ вне форума Ответить с цитированием
Старый 23.04.2012, 19:47   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

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

Никакие delay нигде кроме последнего блока в принципе недопустимы.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула для просчета выпавших шаров лотереи zzibn Microsoft Office Excel 70 20.06.2012 23:24
Объемы шаров zoluxa Помощь студентам 14 23.03.2010 23:36
Арканоид в Делфи (столкновение шаров) Scabby Gamedev - cоздание игр: Unity, OpenGL, DirectX 31 07.03.2010 22:30
Столкновение шаров, Delphi Absentik Помощь студентам 0 10.12.2009 18:15
создать программу столкновения шаров execute Помощь студентам 4 23.10.2009 13:59