Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська Політехніка”
Кафедра АСУ
Лабораторна робота №3
з предмету
Об'єктно-орієнтоване програмування
на тему:
Створення багатопотокових ужитків
Мета роботи: Вивчення можливостей системи програмування Delphi 5 по створенню багатопотокових ужитків.
Порядок роботи:
Користуючись рекомендованою літературою до лабораторної роботи створити відповідний проект.
Змінити текст програми так, щоб він відповідав індивідуальному завданню.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Індивідуальне завдання №12
Створити проект - модель гри "Пакмен". Переміщення кульки-Пакмена здійснюється в основному модулі, для відображення появи маленьких кульок, які з’їдає Пакмен, використати окремий потік.
Тексти модулів проекту.
//-------Progect1.dpr-------
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
//------Unit1.pas---------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
var MyThread:TMyThread;
{ MyThread1:TMyThread1; }
procedure TForm1.FormCreate(Sender: TObject);
begin
MyThread:=TMyThread.Create(true);
MyThread.FreeOnTerminate:=true;
MyThread.Priority:=tpTimeCritical;
MyThread.Resume;
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;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
a:=1+random(3);
case a of
1: begin dx1:=-1; dy1:=0; end;
2: begin dx1:=1; dy1:=0; end;
3: begin dy1:=-1; dx1:=0; end;
4: begin dy1:=1; dx1:=0; end;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
b:=1+random(3);
case b of
1: begin dx2:=-1; dy2:=0; end;
2: begin dx2:=1; dy2:=0; end;
3: begin dy2:=-1; dx2:=0; end;
4: begin dy2:=1; dx2:=0; end;
end;
end;
end
unit Unit2;
interface
uses
Classes,sysutils;
type
TMyThread = class(TThread)
private
procedure move;
procedure move1;
procedure move2;
{ Private declarations }
protected
procedure Execute; override;
end;
var dx,dy,dx1,dy1,dx2,dy2,a,b:integer;
implementation
Uses Unit1;
procedure TMyThread.move;
begin
Form1.Shape1.Top:=Form1.Shape1.Top+dy;
Form1.Shape1.left:=Form1.Shape1.left+dx;
if form1.Shape1.Left=440 then begin dx:=-1; dy:=0; end;
if form1.Shape1.Left=0 then begin dx:=1; dy:=0; end;
if form1.Shape1.top=440 then begin dy:=-1; dx:=0; end;
if form1.Shape1.top=0 then begin dy:=1; dx:=0; end;
end;
procedure TMyThread.Execute;
begin
dx:=0;
dy:=0;
repeat
Synchronize(Move);
Synchronize(Move1);
Synchronize(Move2);
until Terminated;
end;
procedure TMyThread.move1;
begin
Form1.Shape2.Top:=Form1.Shape2.Top+dy1;
Form1.Shape2.left:=Form1.Shape2.left+dx1;
if form1.Shape2.Left>=440 then begin dx1:=-1; dy1:=0; end;
if form1.Shape2.Left<=0 then begin dx1:=1; dy1:=0; end;
if form1.Shape2.top>=440 then begin dy1:=-1; dx1:=0; end;
if form1.Shape2.top<=0 then begin dy1:=1; dx1:=0; end;
sleep(0);
end;
procedure TMyThread.move2;
begin
Form1.Shape3.Top:=Form1.Shape3.Top+dy2;
Form1.Shape3.left:=Form1.Shape3.left+dx2;
if form1.Shape3.Left>=440 then begin dx2:=-1; dy2:=0; end;
if form1.Shape3.Left<=0 then begin dx2:=1; dy2:=0; end;
if form1.Shape3.top>=440 then begin dy2:=-1; dx2:=0; end;
if form1.Shape3.top<=0 then begin dy2:=1; dx2:=0; end;
sleep(1);
end;
end.
Вигляд форми:
Керування Пакменом (жовта кулька) здійснюється кнопками vk_up , vk_down , vk_left , vk_right.
Висновок.
На цій лабораторній роботі я вивчив можливості системи програмування Delphi 5 по створенню багатопотокових ужитків.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!