Автор работы: Пользователь скрыл имя, 23 Января 2011 в 12:52, курсовая работа
На заре компьютерной эры очень трудно было написать большую программу, потому что возможности компьютеров были ограничены. Ограничения проистекали из объема оперативной памяти, скорости считывания информации с вторичных носителей и быстродействия процессоров. В 60-70-е годы прошлого века эффективность применения компьютеров резко возросла, цены на них стали падать, а возможности ЭВМ увеличились. В результате стало выгодно, да и необходимо создавать все больше прикладных программ повышенной сложности. В качестве основных инструментов создания программных продуктов начали применяться алгоритмические языки высокого уровня. Эти языки расширили возможности отдельных программистов и групп разработчиков, что в свою очередь привело к увеличению уровня сложности программных систем.
If kr.BallinK(nx + bl.d div 2, ny) then OtY;
If kr.BallinK(nx, ny + bl.d div 2) then OtX;
end;
271..360: begin
If kr.BallinK(nx + bl.d div 2, ny) then OtY;
If kr.BallinK(nx + bl.d, ny + bl.d div 2) then OtX;
end;
end;
end;
n := n + 1; n1 := n1 + 1; n2 := n2 + 1;
Until (n > bl.spd) or (kr.klkr = -1);
bl.Move(nx, ny);
End;
procedure TEngine.Move;
Begin
If not MoveBall then Defeat
else If (kr.klkr = 0) then Victory;
End;
procedure TEngine.Victory;
Begin
MainThread.tm := -1; ShowCursor(True); TheEnd := True;
Application.MessageBox('Вы победили!', 'Игра закончена');
End;
procedure TEngine.Defeat;
Begin
MainThread.tm := -1; ShowCursor(True); TheEnd := True;
Application.MessageBox('Вы проиграли.', 'Игра закончена');
End;
procedure TEngine.ShowAll;
Begin
If not TheEnd then begin
kr.DrawAll; bl.Move(bl.x, bl.y);
end;
End;
Procedure TEngine.MovePl(nx, ny: Integer);
Begin
If not TheEnd then begin
If (nx > Screen.Width - pl.widthPl) then nx := Screen.Width - pl.widthPl;
pl.Move(nx, ny);
end;
End;
Procedure TEngine.Free;
Begin
MainThread.Terminate;
bl.Free; kr.Free; pl.Free;
End;
end.
unit uMainThread;
interface
uses
Classes;
type
TMainThread = class(TThread)
private
{ Private declarations }
public
tm: ShortInt; // время обновления картинки
protected
procedure Execute; override;
end;
implementation
uses Windows, uGame;
{ TMainThread }
procedure TMainThread.Execute;
Var tmr, a: DWord;
begin
{ Place thread code here }
a := GetTickCount;
Repeat
tmr := GetTickCount;
If (tmr - a > tm) then begin
Synchronize(uGame.engine.Move)
If (tm = -1) then Synchronize(uGame.fmGame.
a := GetTickCount;
end;
Until Terminated;
end;
end.
unit uGame;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
uMainThread, uEngine;
type
TfmGame = class(TForm)
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure RunG;
end;
var
fmGame: TfmGame;
engine:
TEngine;
implementation
uses uMenu;
{$R *.dfm}
procedure TfmGame.RunG;
Begin
engine := TEngine.Create(fmGame.Canvas);
End;
procedure TfmGame.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
engine.Free;
fmMenu.BackInToMenu;
Hide;
end;
procedure TfmGame.FormCreate(Sender: TObject);
begin
Height := Screen.Height; Width := Screen.Width;
end;
procedure TfmGame.FormPaint(Sender: TObject);
begin
engine.ShowAll;
end;
procedure TfmGame.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #27 then begin
ShowCursor(True); Key := #0; Close;
end;
end;
procedure TfmGame.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
engine.MovePl(x, y);
end;
end.
unit uMenu;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;
type
TfmMenu = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure BackInToMenu;
end;
var
fmMenu:
TfmMenu;
implementation
uses uGame;
{$R *.dfm}
procedure TfmMenu.BackInToMenu;
Begin
Show;
End;
procedure TfmMenu.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TfmMenu.Button1Click(Sender: TObject);
begin
fmGame.Show;
Hide;
fmGame.RunG;
end;
end.