DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Створення багатопотокових ужитків

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра програмного забезпечення

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Delphi
Група:
КН-11
Коротко про документ

Про що ця робота

У роботі досліджуються можливості середовища Delphi 7 для розробки багатопотокових додатків. Наведено приклад реалізації гри «Рухомий хробак» із використанням окремого потоку.

У роботі розглядаються

  • Багатопотоковість
  • Моделювання гри
  • Програмування в Delphi
  • Об'єктно-орієнтоване програмування
  • Синхронізація потоків
  • Алгоритми руху

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Модуль Unit1
  4. Модуль Unit2
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Не вказано

Ключові поняття

багатопотоковістьTThreadDelphiпотіксинхронізаціяінтерфейсформаподіямасив

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» / Лабораторна робота на 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.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!