|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.01.2009, 21:02 | #1 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
Арканоид в Делфи (столкновение шаров)
здравствуйте. Мне требуется разработать программку (визуализация) по типу арканоид. Круги (шарики) должны двигаться по форме в 8 направлениях, сталкиваясь с другими шарами и со стенками формы отталкиваться, не сливаясю с шарами и без разных странных приключений.
Я смогла сделать только для одного шарика.Программка полностью работает.Нет ни массивов, ни матриц.Но скорее всего как раз как-то нужно с матрицами или массивами оперировать. Никак не получается нарисовать много шариков и чтобы они при этом двигались. Как я понимаю надо вводить массив для координаты x и y?!... что-то это пока у меня никак не получается Мне нужна помощь: 1. в алгоритме *рисования* n-количества шаров 2.чтобы они все двигались 3.отталкивались друг от друга и стенок. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TDirection=(dLeft,dUpleft,dupright, dright, ddownright,ddownleft,ddown,dup); TBall=record Button1: TButton; id:byte; size:byte; Direction:TDirection; Speed:byte; Color:TColor; BorderColor:TColor; end; TForm1 = class(TForm) Paint: TButton; Image1: TImage; Timer1: TTimer; Timer2: TTimer; procedure Timer1Timer(Sender: TObject); procedure PaintClick(Sender: TObject); procedure FormCreate(Sender: TObject); { Private declarations } public { Public declarations } end; var Form1: TForm1; MyBMP:TBitmap; ball:TBall; I:integer; x,y,x1,y1,n,b,k:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin {n:=10; 'число шарок' r:=10; 'радиус шаров } x:=120; y:=120; x1:=140; y1:=140; end; procedure TForm1.PaintClick(Sender: TObject); begin if( Timer1.Enabled ) Then Timer1.Enabled := false else Timer1.Enabled := true; randomize(); Ball.Direction:= TDirection ( random(8) ); end; procedure TForm1.Timer1Timer(Sender: TObject); begin MyBMP:=TBitmap.Create; MyBMP.Width:=500; MyBMP.Height:=500; MyBMP.Canvas.Pen.Color:=clRed; MyBMP.Canvas.Pen.Width:=1; MyBMP.Canvas.Brush.Color:=clRed; { for k:=1 to n do begin } case Ball.Direction of dLeft: begin x:=x-1; y:=y; x1:=x1-1; y1:=y1; end; dUpleft: begin x:=x-1; y:=y-1; x1:=x1-1; y1:=y1-1; end; dupright: begin x:=x+1; y:=y-1; x1:=x1+1; y1:=y1-1; end; dright: begin x:=x+1; y:=y; x1:=x1+1; y1:=y1; end; ddownright: begin x:=x+1; y:=y+1; x1:=x1+1; y1:=y1+1; end; ddownleft: begin x:=x-1; y:=y+1; x1:=x1-1; y1:=y1+1; end; ddown: begin x:=x; y:=y+1; x1:=x1; y1:=y1+1; end; dup: begin y:=y-1; x1:=x1; x:=x; y1:=y1-1; end; end; if x=0 then begin if( Ball.Direction = dLeft ) Then Ball.Direction:= dright; if( Ball.Direction = dUpleft ) Then Ball.Direction:= dupright; if( Ball.Direction = ddownleft ) Then Ball.Direction:= ddownright; end; if y=0 then begin if( Ball.Direction = dUpleft ) Then Ball.Direction:= ddownright; if( Ball.Direction = dup ) Then Ball.Direction:= ddown; if( Ball.Direction = dupright ) Then Ball.Direction:= ddownright; end; if x1 = Image1.Width then begin if( Ball.Direction = dright ) Then Ball.Direction:= dLeft; if( Ball.Direction = ddownright ) Then Ball.Direction:= ddownleft; if( Ball.Direction = dupright ) Then Ball.Direction:=dUpleft; end; if y1 = Image1.Height then begin if( Ball.Direction = ddown ) Then Ball.Direction:= dup; if( Ball.Direction = ddownleft ) Then Ball.Direction:= dUpleft; if( Ball.Direction = ddownright ) Then Ball.Direction:= dupright; end; MyBMP.Canvas.ellipse(x,y,x1,y1); Image1.Picture.Bitmap:=MyBMP; MyBMP.Free; end; end.
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
Последний раз редактировалось Scabby; 28.01.2009 в 22:38. |
28.01.2009, 23:29 | #2 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Нужен массив шаров. Обработка столкновений и отрисовка - все делается перебором этого массива.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
28.01.2009, 23:34 | #3 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
вот в этом-то и сама проблема.
мне конкретно придется как я понимаю всю прогу менять. а движение как будет проиходить? цикл сделать и все мои варианты направлений?
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
|
29.01.2009, 00:43 | #4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Все также как и для одного шара, но только перебором массива в цикле. Добавить только столкновения шаров, а то у вас только стенки.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
29.01.2009, 06:56 | #5 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
спасибо, попробую сделать
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
|
29.01.2009, 09:35 | #6 |
Delphi forever
Форумчанин
Регистрация: 13.01.2009
Сообщений: 113
|
Вместо цикла лучше использую TTimer
Программы на заказ Delphi, Pascal.
ася: 415 253 529. Мыло: wowan141750@gmail.com. |
01.02.2009, 17:39 | #7 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
Не догоняю почему шарики у меня не двигаются... что не так? :
Код:
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
Последний раз редактировалось Scabby; 01.02.2009 в 18:26. |
01.02.2009, 18:04 | #8 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Сейчас поглядим (пошел запускать Дельфи)
кстати чтоб я не тратил время, можно проект в архиве прикрепить?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
01.02.2009, 18:15 | #9 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
сейчас прикреплю секу
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Арканоид | Kostia | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 11 | 03.04.2021 21:50 |
Помогите с задачей на Делфи! | f1n!Sh | Помощь студентам | 8 | 02.05.2008 18:28 |