Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по курсовому проекту.docx
Скачиваний:
5
Добавлен:
17.09.2019
Размер:
341.76 Кб
Скачать

Листинг файла Unit1.Pas :

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls, Basketball;

type

TFormMain = class(TForm)

TrackPos: TTrackBar;

TrackSize: TTrackBar;

TrackAngle: TTrackBar;

LabelAngle: TLabel;

LabelPos: TLabel;

LabelSize: TLabel;

TimerThrow: TTimer;

EditSpeed: TEdit;

PanelThrow: TPanel;

LabelSpeed: TLabel;

GroupStat: TGroupBox;

LabelThrow: TLabel;

LabelRes: TLabel;

MemoCom: TMemo;

PanelNew: TPanel;

GamePB: TPaintBox;

procedure TrackPosChange(Sender: TObject);

procedure TrackSizeChange(Sender: TObject);

procedure TimerThrowTimer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure TrackAngleChange(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure PanelThrowClick(Sender: TObject);

procedure GamePBPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormMain: TFormMain;

angle : byte;

t, v, cosinus, sinus, negsinus: real;

player: TPlayer;

ball: TBall;

basket: TBasket;

board: TBoard;

defx, defy, x, y, throw, resthrow: integer;

ricochet, score: boolean;

implementation

{$R *.dfm}

procedure TFormMain.TrackPosChange(Sender: TObject);

var

pos, size: byte;

begin

pos:= TrackPos.Position;

size:= TrackSize.Position;

LabelPos.Caption:= 'Положение:' + IntToStr(pos+1);

player.MoveTo(pos * 21 + 12, player.GetY);

ball.MoveTo(pos * 21 + 45, ball.GetY);

GamePB.OnPaint(self);

end;

procedure TFormMain.TrackSizeChange(Sender: TObject);

var

pos, size, pheight: byte;

begin

pos:= TrackPos.Position;

size:= TrackSize.Position;

pheight:= 160 + (10 - size) * 5;

LabelSize.Caption:= 'Рост: ' + IntToStr(pheight);

player.SetHeight(10 - size);

player.MoveTo(player.GetX, 202 - 2*(10 - size));

ball.MoveTo(pos * 21 + 45, 200 - 2*(10 - size));

GamePB.OnPaint(self);

end;

procedure TFormMain.TimerThrowTimer(Sender: TObject);

begin

t:= t+ 0.01;

if not ((y > 354) or (x > 580)) then

begin

if ((x >= board.GetX-25) and (x <= 505)) and ((y >= 30) and (y < 125)) then

ricochet:= true;

v:= abs(v - v/50);

if ricochet then

begin

x:= x - round(v*t* cosinus);

y:= y - round(v*t* negsinus - 4.95* t*t);

end

else

begin

x:= x + round(v*t*cosinus);

y:= y - round(v*t*sinus - 4.95* t*t);

end;

if ((x >= basket.GetX+2) and (x <= basket.GetX+25)) and ((y+20 >= basket.GetY) and (y+20 <= basket.GetY+5)) then

score:= true;

ball.MoveTo(x, y);

end

else

begin

TimerThrow.Enabled:= false;

ball.MoveTo(defx, defy);

t:= 0;

if score then

inc(resthrow);

LabelRes.Caption:= 'Попаданий: ' + IntToStr(resthrow);

end;

GamePB.OnPaint(self);

end;

procedure TFormMain.FormCreate(Sender: TObject);

var

pos, size, pheight: byte;

begin

Randomize;

player:= TPlayer.Create(GamePB.Canvas);

ball:= TBall.Create(GamePB.Canvas);

basket:= TBasket.Create(GamePB.Canvas);

board:= TBoard.Create(GamePB.Canvas);

player.MoveTo(12, 202);

ball.MoveTo(45, 200);

basket.MoveTo(465, 125);

board.MoveTo(520, 55);

GamePB.Canvas.Brush.Color:= clwhite;

TrackAngle.Position:= 1;

angle:= TrackAngle.Position;

LabelAngle.Caption:= 'Угол: ' + IntToStr(angle);

TrackPos.Position:= 0;

pos:= TrackPos.Position;

LabelPos.Caption:= 'Положение:' + IntToStr(pos+1);

TrackSize.Position:= 10;

pheight:= 160 + (10 - TrackSize.Position) * 5;

LabelSize.Caption:= 'Рост: ' + IntToStr(pheight);

throw:= 0;

resthrow:= 0;

LabelThrow.Caption:= 'Бросков: ' + IntToStr(throw);

LabelRes.Caption:= 'Попаданий: ' + IntToStr(resthrow);

EditSpeed.Text:= '';

end;

procedure TFormMain.TrackAngleChange(Sender: TObject);

begin

angle:= TrackAngle.Position;

LabelAngle.Caption:= 'Угол: '+ IntToStr(angle);

end;

procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key = 37 then

TrackPos.Position:= TrackPos.Position - 1;

if key = 39 then

TrackPos.Position:= TrackPos.Position + 1;

if ssShift in Shift then

begin

if key = 38 then

TrackSize.Position:= TrackSize.Position - 1;

if key = 40 then

TrackSize.Position:= TrackSize.Position + 1;

if key = 78 then

begin

FormMain.OnCreate(self);

GamePB.OnPaint(self);

end

end

else

begin

if key = 38 then

TrackAngle.Position:= TrackAngle.Position + 1;

if key = 40 then

TrackAngle.Position:= TrackAngle.Position - 1;

end;

if (key = 13) and not TimerThrow.Enabled then

PanelThrow.OnClick(self);

if key in [48..57] then

EditSpeed.Text:= EditSpeed.Text + chr(key);

if key = 188 then

EditSpeed.Text:= EditSpeed.Text + ',';

if key = 46 then

EditSpeed.Text:= '';

end;

procedure TFormMain.PanelThrowClick(Sender: TObject);

var

value: real;

sign: byte;

begin

try

v:= StrToFloat(EditSpeed.text);

except

on EConvertError do

begin

showmessage('Введите значение скорости');

exit;

end;

end;

TimerThrow.Enabled:= true;

x:= ball.GetX;

y:= ball.GetY;

defx:= x;

defy:= y;

t:= 0;

ricochet:= false;

inc(throw);

labelthrow.Caption:= 'Бросков: ' + IntToStr(throw);

score:=false;

cosinus:= cos(Pi/180 * angle);

sinus:= sin(Pi/180 * angle);

negsinus:= sin(Pi/180 * -angle);

value:= random(21);

sign:= random(2);

value:= v*0.01*value;

if sign = 0 then

v:= v + value

else

v:= v - value;

end;

procedure TFormMain.GamePBPaint(Sender: TObject);

begin

with GamePB.Canvas do

begin

Pen.Color:= clwhite;

Rectangle(0, 0, 580, 375);

Pen.Color:= clblack;

MoveTo(0, 354);

LineTo(580, 354);

end;

player.Draw;

ball.Draw;

basket.Draw;

board.Draw;

end;

end.