Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська політехніка»
/
Лабораторна робота на Delphi №7.
Створення багатопотокових ужитків
Створення багатопотокових ужитків
Мета роботи: Вивчення можливостей системи програмування Delphi 7 по створенню багатопотокових ужитків.
Завдання
Створити проект - модель гри "Рухомий хробак". Переміщення хробака здійснюється в основному модулі, для відображення появи маленьких кульок, які з’їдає хробак, використати окремий потік.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
food: TShape;
s1: TShape;
s2: TShape;
s3: TShape;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Thread : Time;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Thread:=Time.Create(True);
Thread.FreeOnTerminate:=true;
Thread.Priority:=tpTimeCritical;
Thread.Resume;
score:=0;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=vk_left) then begin dx:=-1; dy:=0; end;
if (key=vk_right) then begin dx:=1; dy:=0; end;
if (key=vk_up) then begin dx:=0; dy:=-1; end;
if (key=vk_down) then begin dx:=0; dy:=1; end;
end;
end.
unit Unit2;
interface
uses
Classes, SysUtils, Dialogs;
type
Time = class(TThread)
private
procedure Myfood;
procedure snake;
procedure eat;
procedure crash;
protected
procedure Execute; override;
end;
var dx,dy,oldx1,oldy1,oldx2,oldy2,score:integer;
implementation
uses Unit1;
procedure Time.Myfood();
begin
Repeat
Form1.food.Top:=(Random(11)*25);
Form1.food.Left:=(Random(11)*25);
until ((Form1.food.Top<>Form1.s1.Top) and (Form1.food.Left<>Form1.s1.Left)) or
((Form1.food.Top<>Form1.s2.Top) and (Form1.food.Left<>Form1.s2.Left)) or
((Form1.food.Top<>Form1.s3.Top) and (Form1.food.Left<>Form1.s3.Left));
end;
procedure Time.snake();
begin
oldx1:=Form1.s1.Left;
oldy1:=Form1.s1.Top;
Form1.s1.Top:=Form1.s1.Top+dy*25;
Form1.s1.left:=Form1.s1.left+dx*25;
if ((dx=-1) and (dy=0)) then
begin
oldx2:=Form1.s2.Left;
oldy2:=Form1.s2.Top;
Form1.s2.Left:=oldx1;
Form1.s2.Top:=oldy1;
Form1.s3.Left:=oldx2;
Form1.s3.Top:=oldy2;
end;
if (dx=1) and (dy=0) then
begin
oldx2:=Form1.s2.Left;
oldy2:=Form1.s2.Top;
Form1.s2.Left:=oldx1;
Form1.s2.Top:=oldy1;
Form1.s3.Left:=oldx2;
Form1.s3.Top:=oldy2;
end;
if (dx=0) and (dy=1) then
begin
oldx2:=Form1.s2.Left;
oldy2:=Form1.s2.Top;
Form1.s2.Left:=oldx1;
Form1.s2.Top:=oldy1;
Form1.s3.Left:=oldx2;
Form1.s3.Top:=oldy2;
end;
if (dx=0) and (dy=-1) then
begin
oldx2:=Form1.s2.Left;
oldy2:=Form1.s2.Top;
Form1.s2.Left:=oldx1;
Form1.s2.Top:=oldy1;
Form1.s3.Left:=oldx2;
Form1.s3.Top:=oldy2;
end;
sleep(500);
end;
procedure Time.eat();
begin
if ((Form1.s1.Top=Form1.food.Top) and (Form1.s1.Left=Form1.food.Left)) then
Begin
score:=score+1;
Myfood();
end;
end;
procedure Time.crash();
begin
if (Form1.s1.Top<0) or (Form1.s1.Top>300) or (Form1.s1.Left<0) or (Form1.s1.Left>300) then
begin
MessageDlg('You crashed. Your score = '+inttostr(score), mtError,[mbOk], 0);
Form1.Close();
end;
end;
procedure Time.Execute;
begin
repeat
Synchronize(Snake);
Synchronize(Crash);
Synchronize(eat);
until Terminated;
end;
end.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!