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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2011, 12:22   #1
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию игры

Доброго дня.
Прошу помощи, а то я сам запарился. Вобшем пытаюсь сделать игру типа Арканойд, но тут одну проблему не могу решить связанную со случайностью в игре.
вот проблемный код:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var rec:Trect; i,j:integer;
begin
 Shape2.Top:=Shape2.Top-y;
 Shape2.Left:=Shape2.left-x;

if (Shape2.Top<=0)or(Shape2.Top+Shape2.Height>=ClientHeight-2) then
y:=-y;

if (Shape2.Left<=0)or(Shape2.Left+Shape2.Width>=ClientWidth-2) then
x:=-x;

if intersectrect(rec,Shape2.BoundsRect,Shape1.BoundsRect) then begin
y:=-y; x:=-x;
x:=RandomRange(-5,5);
end;

for i:=0 to high(kubik) do begin
 for j:=0 to high(kubik[i]) do  begin
   if (kubik[i,j].Tag<>1)and(intersectrect(rec,Shape2.BoundsRect,kubik[i,j].BoundsRect))
and ((Shape2.Top<=kubik[i,j].top+11)and((Shape2.Left>kubik[i,j].left-1)
and(Shape2.Left<kubik[i,j].left+kubik[i,j].left+41))) then begin   
 kubik[i,j].Tag:=1;
  kubik[i,j].Destroy;

 y:=-y; x:=-x;
 x:=RandomRange(-5,5);
  end;
при запуске программы выскакивает ошибка что RandomRange не известен
([Error] Unit1.pas(102): Undeclared identifier: 'RandomRange') что тут можно сделать посоветуете что нибудь.




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

Последний раз редактировалось Епгений; 12.05.2011 в 14:35.
Епгений вне форума Ответить с цитированием
Старый 12.05.2011, 13:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

напишите вместо RandomRange(-5,5)
Код:
x:=Random(5+5+1)-5;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2011, 15:02   #3
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

Ооо Serge_Bliznykov здравствуй спасибо отлично работает, а как сделать так что б
от нижней части стенки не отталкивалась, а отталкивалось от доски который находится внизу. Если упустишь мячь то игра заканчивалось.
Епгений вне форума Ответить с цитированием
Старый 12.05.2011, 15:10   #4
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

вот код
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Shape2: TShape;
    Label1: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  kub:array[0..5,0..10] of TShape;
  x,y:integer;
  start:boolean;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i,j, x,y:integer;
begin
Randomize;
x:=0;
y:=0;
for i:=0 to high(kub) do begin
for j:=0 to high(kub[i]) do begin
kub[i,j]:=TShape.Create(self);
kub[i,j].Parent:=form1;
kub[i,j].Top:=y;
kub[i,j].Left:=x;
kub[i,j].Height:=10; kub[i,j].Width:=40;
inc(x,41);
end;
inc(y,11); x:=0;
end;
width:=460 ;

{Width:=41*12;}

Shape1.Top:=clientheight-Shape1.Height-5;
Shape2.Top:=Shape1.Top-Shape2.Height;
Shape2.Left:=Shape1.Left+(Shape1.Width div 2)-(Shape2.Width div 2);
end;
  
procedure TForm1.FormResize(Sender: TObject);
begin
Shape1.Top:=ClientHeight-Shape1.Height-5;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if (start) then begin
Shape2.Top:=Shape1.Top-Shape2.Height;
Shape2.Left:=Shape1.Left+(Shape1.Width div 2)-(Shape2.Width div 2);
end;
if x<Width div 2 then
if x>(Shape1.Width div 2)+5 then
Shape1.Left:=x-Shape1.Width div 2 else Shape1.Left:=2;

if x>Width div 2 then
if x<ClientWidth-(Shape1.Width div 2)-2 then
Shape1.Left:=x-Shape1.Width div 2 else  Shape1.Left:=ClientWidth-Shape1.Width-2;

end;
procedure TForm1.FormClick(Sender: TObject);
begin
Timer1.Enabled:=true;
start:=false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var rec:Trect; i,j:integer;
begin
 Shape2.Top:=Shape2.Top-y;
 Shape2.Left:=Shape2.left-x;

if(Shape2.Top<=0)or(Shape2.Top+Shape2.Height>=ClientHeight-2) then
y:=-y;

if(Shape2.Left<=0)or(Shape2.Left+Shape2.Width>=ClientWidth-2) then
x:=-x;

if intersectrect(rec,Shape2.BoundsRect,Shape1.BoundsRect) then begin
y:=-y; x:=-x;
x:=Random(5+5+1)-5;
{x:=RandomRange(-5,5);}
end;

for i:=0 to high(kub) do begin
for j:=0 to high(kub[i]) do  begin
if (kub[i,j].Tag<>1)and(intersectrect(rec,Shape2.BoundsRect,kub[i,j].BoundsRect))
and ((Shape2.Top<=kub[i,j].top+11)and((Shape2.Left>kub[i,j].left-1)
and(Shape2.Left<kub[i,j].left+kub[i,j].left+41)))
 then begin
{//((Shape2.Top<=kubik[i,j].top+11)and((Shape2.Left-Shape2.Width  div 2>kubik[i,j].left-1)and(Shape2.Left-Shape2.Width div 2<kubik[i,j].left+kubik[i,j].left+41)))   }
  kub[i,j].Tag:=1;
  kub[i,j].Destroy;

  y:=-y; x:=-x;
  x:=Random(5+5+1)-5;
  {x:=RandomRange(-5,5);}
   end;
 end;

end;
  end;
initialization
start:=true;
y:=4;

end.
Епгений вне форума Ответить с цитированием
Старый 12.05.2011, 15:31   #5
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

и ещё кое что хочу добавит меню при старте с пару кнопками ну для выхода и для начало игры. Ну вот одна проблема (меню - form2, а form1 - окно с игрой) запускаю игру меню видна а с зади игра играется сама, а нужно что б при нажатии кнопки игра начинала играть.
Епгений вне форума Ответить с цитированием
Старый 12.05.2011, 15:47   #6
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

Ааа извиняюсь народ насчет проблем с меню доперь там с таймером дело и все хэхэ
Епгений вне форума Ответить с цитированием
Старый 12.05.2011, 15:59   #7
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

Ну так как на счет нижней части что бы игра проигрывалось
Епгений вне форума Ответить с цитированием
Старый 14.05.2011, 06:07   #8
Епгений
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 59
По умолчанию

Пытаюсь сделать так что бы, если все кирпичики уничтожить то игра должна выигрываться, ну если кирпичики закончаться то форм1 закрывается и открывается форм3.
вот код:
if (i=0) and (j=0) then
form1.Close;
form3.showmodal;

Но тут проблема если мяч коснется кирпичика выскакивает форм3, а после 2-го попадания и вовсе вырубается.
Что тут не так?

Последний раз редактировалось Епгений; 14.05.2011 в 06:10.
Епгений вне форума Ответить с цитированием
Старый 14.05.2011, 07:31   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я не знаю, что это за код, что за переменные i и j, в каком случае они становятся равными нулю и что Вы в этом случае должны выполнить.
Но!
я хочу отметить: у Вас в случае выполнения условия выполнится только один оператор form1.Close;
Оператор form3.showmodal; выполняется всегда, независимо от условия..

возможно, Вы хотели написать так:
Код:
if (i=0) and (j=0) then begin
  form1.Close;
  form3.showmodal;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2011, 08:54   #10
dacorp
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не знаю, что это за код, что за переменные i и j, в каком случае они становятся равными нулю и что Вы в этом случае должны выполнить.
Но!
я хочу отметить: у Вас в случае выполнения условия выполнится только один оператор form1.Close;
Оператор form3.showmodal; выполняется всегда, независимо от условия..

возможно, Вы хотели написать так:
Код:
if (i=0) and (j=0) then begin
  form1.Close;
  form3.showmodal;
end;
Если Form1 старшая в каскаде, то Form3 вообще не откроется...
dacorp вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игры Nazar1994 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.05.2011 16:23
разработка игры "Реверси". Имеется код этой игры на С++ CD-RW Помощь студентам 0 28.03.2010 00:13
2 игры Соколов Дмитрий Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 31.03.2009 11:26
игры Компьютер Помощь студентам 9 04.03.2008 19:12
Игры wwwдмитрий Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 24.12.2007 12:28