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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2012, 13:09   #1
Hitory
Пользователь
 
Регистрация: 16.11.2011
Сообщений: 10
По умолчанию создать игрушку-мячик, бьющийся об стенки

задача в том, чтобы мячик, отражающийся от стенок, удваивался при каждом своем столкновении со стеной, при этом скорость шариков не уменьшалась

вот начальный код, но здесь только один шарик

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Math, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
 r = 10;
 v = 4;

var
 Form1: TForm1;

 isRunning: boolean;
 x, y: integer;
 vx, vy: integer;
 angle: extended;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if(isRunning) then begin

    isRunning:=false;

    Button1.Caption:='Старт';
 end
 else begin

    isRunning:=true;

    Button1.Caption:='Стоп';
 

    vx := round(v * cos(angle));

    vy := round(v * sin(angle));


    while (isRunning) do begin

      PaintBox1.Canvas.Pen.Color:=clWhite;

      PaintBox1.Canvas.Brush.Color:=clWhite;

      PaintBox1.Canvas.Rectangle(0, 0, PaintBox1.Width, PaintBox1.Height);


      PaintBox1.Canvas.Pen.Color:=clRed;

      PaintBox1.Canvas.Brush.Color:=clRed;

      PaintBox1.Canvas.Ellipse(x-r, y-r, x+r, y+r);
 

      x := x + vx;

      y := y + vy;


      if((x + r >= PaintBox1.Width) or (x - r <= 0)) then
        vx:=-vx;

      if((y + r >= PaintBox1.Height) or (y - r <= 0)) then
        vy:=-vy;
 
        sleep(10);

        Application.ProcessMessages;
    end;
 end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  isRunning:=false;
 randomize;
 x:=random(PaintBox1.Width - (r * 2)) + r;
 y:=random(PaintBox1.Height - (r * 2)) + r;
 angle:=random(360) * Pi / 180;
end;

end.
Hitory вне форума Ответить с цитированием
Старый 29.02.2012, 16:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

давайте начнём с того, что вы проиллюстрируете на графической схеме, как именно должно происходить раздвоение шарика?

ну и ещё. если есть 1 шарик, то после первого удара станет 2 шарика, после удара каждого из этих двух станет 4 шарика, что будет после 5-8 удара об стенки, думаю, говорить не надо... (а если надо, то рекомендую ознакомится с платой, которую попросил в легенде автор шахмат - а первую клетку доски - одно зёрнышко, на вторую - в два раза больше (т.е. два зёрнышка), на третью - четыре и т.д.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.02.2012, 20:05   #3
Hitory
Пользователь
 
Регистрация: 16.11.2011
Сообщений: 10
По умолчанию

если честно, то я тоже не очень-то понимаю, как это все будет выглядеть после хотя бы пяти-шести ударов разных шариков об стенки

так же было дано условие, чтобы траектории полетов шариков не пересекались, а когда PaintBox1 будет полностью заполнен, то игра прекратиться
Hitory вне форума Ответить с цитированием
Старый 29.02.2012, 23:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извините, но у меня с геометрическим воображением тоже туговато, я тоже не представляю, что Вы хотите получить.

особенно с учётом "так же было дано условие, чтобы траектории полетов шариков не пересекались"! o_O
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зацените игрушку Vini Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 01.02.2011 09:50
Зацените игрушку Хохол Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 20.06.2010 15:19
Помогите реализовать стенки в 2D игре? Serg-Grin Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 01.11.2009 12:33
Мини-игра в мячик в Delphi Map4eJIo Помощь студентам 3 25.02.2009 20:44