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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 13:47   #1
alex 2000
Пользователь
 
Регистрация: 06.02.2012
Сообщений: 16
По умолчанию Зависание игры после отбивания шара (TShape) противником (Delphi)

почему после 3 -4 отбивания шара (TShape) противником игра зависает

Код:
unit Unit4;

interface

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

type
  TForm4 = class(TForm)
    Shape1: TShape;
    Timer1: TTimer;
    Shape2: TShape;
    Shape3: TShape;
    Timer2: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Timer2Timer(Sender: TObject);
  private
  procedure shar();
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;
  posx, posy, velx, vely: single;
implementation

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
begin
randomize;
posx:=35;
posy:=30;
velx:=1;
vely:=2;
end;

procedure TForm4.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
shape2.Top:= mouse.CursorPos.Y -form4.ClientOrigin.Y;
end;

procedure TForm4.shar;
begin
 posx:=posx+velx;
 posy:=posy+vely;

 if posx> clientwidth -shape1.Width then
 velx:=-velx;

  if posx<0 then
 velx:=-velx;

  if posy> clientheight -shape1.Width then
 vely:=-vely;

  if posy<0 then
 vely:=-vely;

 shape1.Left:=round(posx);
 shape1.Top:=round(posy);


end;

procedure TForm4.Timer1Timer(Sender: TObject);
var
overlay: trect;
begin
shar;

if intersectrect (overlay, shape2.BoundsRect, shape1.BoundsRect)   then
begin
 velx:=-velx-random(5);
 vely:=-vely-random(5);
end;
 if intersectrect (overlay, shape3.BoundsRect, shape1.BoundsRect)   then
begin
 velx:=-velx-random(5);
 vely:=-vely-random(5);
end;
end;

procedure TForm4.Timer2Timer(Sender: TObject);
begin
if shape3.Top> clientheight - shape3.Height - 40 then
shape3.Top:=shape3.Top
else
begin
  if shape1.Top>shape3.Top then
shape3.Top:=shape1.Top+shape3.Width;




end;


if shape1.Top<shape3.Top then
shape3.Top:=Shape1.Top - shape3.Width;



end;

end.


___________
1) Название темы должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В дальнейшем темы с подобным названием будут закрываться/удаляться.


2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.02.2012 в 15:33.
alex 2000 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание приложения после копирования каталогов Never74 Общие вопросы Delphi 6 23.09.2011 14:34
Вычислить радиус шара! Sandra_Breiv Помощь студентам 1 27.01.2011 14:32
Полное зависание Delphi в процессе работы artemavd Общие вопросы Delphi 10 05.12.2010 05:25
Задать движение шара по траектории параболы в Delphi reznor264 Помощь студентам 6 02.11.2010 19:36
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43