Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
14-1083693631
Yanis
2004-05-04 22:00
2004.05.23
П О М О Г И Т Е !!!


8-1078229290
gagarin
2004-03-02 15:08
2004.05.23
эффекты DirectX


7-1082190027
Sanek_metaller
2004-04-17 12:20
2004.05.23
Отклучение службы


1-1083959896
Sergix
2004-05-07 23:58
2004.05.23
Как скопировать каталог


14-1083753084
Nick-From
2004-05-05 14:31
2004.05.23
преобразовать массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский