Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Ребята мастера помогите с лаблраторной...   Найти похожие ветки 

 
Liona ©   (2004-05-09 15:50) [0]

В PaintBox изображается таблица размером 20х20 клеток и по ней не слишком быстро (заметно для пользователя) перемещается крестик ходами шахматного коня, каждый раз случайно выбирая ход.используя компоненту PaintBox, сформировать изображение в соответствии с индивидуальным заданием. При необходимости пошагового формирования изображения использовать таймер. При необходимости перерисовки изображение должно корректно восстанавливаться.


 
Anatoly Podgoretsky ©   (2004-05-09 16:17) [1]

Вопросы есть или работу хочешь заказать?


 
Mim1 ©   (2004-05-09 16:43) [2]


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   PaintBox1: TPaintBox;
   Timer1: TTimer;
   procedure PaintBox1Paint(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
   x_pos,y_pos:integer;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
var i:integer;
   r:TRect;
begin
 with PaintBox1.Canvas do
   begin
     with Brush do
       begin
         Style := bsSolid;
         color := clWhite;
       end;
     FillRect(Rect(0,0,400,400));

     pen.Color := clBlack;

     for i:= 1 to 20 do
       begin
         MoveTo(i*20,0);
         LineTo(i*20,400);
       end;
     for i:= 1 to 20 do
       begin
         MoveTo(0,i*20);
         LineTo(400,i*20);
       end;
     MoveTo((x_pos-1)*20,(y_pos-1)*20);
     LineTo((x_pos-0)*20,(y_pos-0)*20);
     MoveTo((x_pos-1)*20,(y_pos-0)*20);
     LineTo((x_pos-0)*20,(y_pos-1)*20);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 PaintBox1.SetBounds(0,0,400,400);
 AutoSize := true;
 x_pos := 10;
 y_pos := 10;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const a : array[1..8] of array [1..2] of integer =
 ((-1,-2),(1,-2),(2,-1),(2,1),(-1,2),(1,2),(-2,-1),(-2,1));
var x,y,i:integer;
begin
 repeat
   x := x_pos;
   y := y_pos;
   i := random(8)+1;
   x := x+a[i,1];
   y := y+a[i,2];
 until (x <= 20) and (x >= 0) and (y <= 20) and (y >= 0);
 x_pos := x;
 y_pos := y;
 PaintBox1.Repaint;
end;

initialization
 randomize;
end.


 
Mim1 ©   (2004-05-09 16:45) [3]

В OnCreate формы можно добавить DoubleBuffered := true;


 
Mim1 ©   (2004-05-09 16:48) [4]

Проверка не правильная  until (x <= 20) and (x >= 1) and (y <= 20) and (y >= 1); Поспешиш, людей намешиш.


 
Liona ©   (2004-05-09 17:21) [5]

Mim1 © Памятник вам поставить надо. Только вот бы как с вами связатся что бы кое какие моменты уточнить?


 
Mim1 ©   (2004-05-09 17:53) [6]

С комментариями


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   PaintBox1: TPaintBox;
   Timer1: TTimer;
   procedure PaintBox1Paint(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
   x_pos,y_pos:integer; // текущее положение фигуры
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
var i:integer;
   r:TRect;
begin
 with PaintBox1.Canvas do
   begin
     with Brush do
       begin
         Style := bsSolid; // выставляем стиль кисти - "заливка"
         color := clWhite; // устанавливаем цвет кисти
       end;
     FillRect(Rect(0,0,400,400)); // заливаем прямоугольник

     pen.Color := clBlack; // устнавливаем цвет карандаша

     for i:= 1 to 20 do // ривуем вертикальные линии
       begin
         MoveTo(i*20,0); // указываем точку начала линии
         LineTo(i*20,400); // рисуем линии из "точки начала" в указанную коордитнату
       end;
     for i:= 1 to 20 do // рисуем горизонтальные линии
       begin
         MoveTo(0,i*20);
         LineTo(400,i*20);
       end;
     // рисуем крестик
     MoveTo((x_pos-1)*20,(y_pos-1)*20);
     LineTo((x_pos-0)*20,(y_pos-0)*20);
     MoveTo((x_pos-1)*20,(y_pos-0)*20);
     LineTo((x_pos-0)*20,(y_pos-1)*20);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 PaintBox1.SetBounds(0,0,400,400); // устанавливаем размер поля
 AutoSize := true; // выравниваем размер фррмы по разперу поля
 x_pos := 1; // устанавляваем начальное положение крестика по x
 y_pos := 1; // устанавляваем начальное положение крестика по y
 DoubleBuffered := true; // чтобы избежать мигания при перерисовке
end;

procedure TForm1.Timer1Timer(Sender: TObject);
// смешения при движении фигуры
const a : array[1..8] of array [1..2] of integer =
 ((-1,-2),(1,-2),(2,-1),(2,1),(-1,2),(1,2),(-2,-1),(-2,1));
var x,y,i:integer;
begin
 // вычисляем новые случайные координаты фигуры
 repeat
   x := x_pos;
   y := y_pos;
   i := random(8)+1; // индекс случайного смещения из массива
   x := x+a[i,1];
   y := y+a[i,2];
 until (x <= 20) and (x >= 1) and (y <= 20) and (y >= 1); // повторяем вычисление до тех пор пока новые координаты не окажутся в пределах нашего поля
 x_pos := x; // учсанавливаем новые координаты фигуры
 y_pos := y;
 PaintBox1.Repaint; // перерисовываем
end;

initialization
 randomize;// инициализируем генератор случайных чисел
end.


 
KilkennyCat ©   (2004-05-09 18:06) [7]

А где вывод звука "Иго-го" ? :))



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1082840316
kaif
2004-04-25 00:58
2004.05.23
Есть ли способ ALTER COLUMN для COMPUTED BY ?


1-1083553133
Bond
2004-05-03 06:58
2004.05.23
Rave


1-1083930200
arol
2004-05-07 15:43
2004.05.23
Проблема


1-1083847521
Алексей Петухов
2004-05-06 16:45
2004.05.23
Своя панель как Compotent Palette из Delphi


4-1080663058
Дмитрий
2004-03-30 20:10
2004.05.23
Как при помощи WinAPI заморозить значение в памяти игры?