Главная страница
    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.034 c
14-1083523921
Piter
2004-05-02 22:52
2004.05.23
Гладиатор


7-1082150125
kat
2004-04-17 01:15
2004.05.23
Не передаются параметры Rundll32.exe


14-1083778408
tasman
2004-05-05 21:33
2004.05.23
Проблема с loop в asm е


3-1083020634
rosl
2004-04-27 03:03
2004.05.23
запрос SQL


11-1069402107
Gandalf
2003-11-21 11:08
2004.05.23
Apollo project?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский