📄 umain.pas
字号:
memo2.lines.add(format('Author:%s',[getauthorname_second]));
for i:=0 to 4 do
begin
memo1.lines.add(format(':%s',[getplayername_first(i+1)]));
memo2.lines.add(format(':%s',[getplayername_second(i+1)]));
end;}
end;
procedure TForm1.drawmatch;
var
i:integer;
begin
with image1.Canvas do
begin
//////////////////////清掉//////////////////////
pen.Mode := pmCopy;
brush.Color := clGreen;
FillRect(rect(0,0, image1.Width, image1.Height));
pen.Color := clWhite;
//////////////////////////////////////////////////
/// 边界
moveto(0 + CFLDXOFFSET,
0 + CFLDYOFFSET);
lineto(CACTFLDLEN + CFLDXOFFSET,
0 + CFLDYOFFSET);
lineto(CACTFLDLEN + CFLDXOFFSET,
CACTFLDWIDTH + CFLDYOFFSET);
lineto(0 + CFLDXOFFSET,
CACTFLDWIDTH + CFLDYOFFSET);
lineto(0 + CFLDXOFFSET,
0 + CFLDYOFFSET);
////////////////////////////////////////////////////
/// 球门区
moveto(0 + CFLDXOFFSET,
800*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(400*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
800*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(400*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
1700*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(0 + CFLDXOFFSET,
1700*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
moveto(CFLDLEN*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 800)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto((CFLDLEN - 400)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 800)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto((CFLDLEN - 400)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 1700)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(CFLDLEN*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 1700)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
/////////////////////////////////////////////////////
/// 禁区
moveto(0 + CFLDXOFFSET,
500*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(800*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
500*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(800*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
2000*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(0 + CFLDXOFFSET,
2000*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
moveto(CACTFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 500)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto((CFLDLEN - 800)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 500)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto((CFLDLEN - 800)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 2000)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(CACTFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 2000)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
/////////////////////////////////////////////////////
/// 禁区弧
Arc(0 + CFLDXOFFSET,
750*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
1000*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
1750*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
870*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
1750*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
870*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
750*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
Arc((CFLDLEN - 1000)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 750)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
CFLDLEN*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 1750)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
(CFLDLEN - 870)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 1750)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
(CFLDLEN - 870)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - 750)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
/////////////////////////////////////////////////////
/// 中线
Ellipse((CFLDLEN div 2 - 400)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH div 2 - 400)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET,
(CFLDLEN div 2 + 400)*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH div 2 + 400)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
moveto(CFLDLEN div 2*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
0 + CFLDYOFFSET);
LineTo(CFLDLEN div 2*CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
CFLDWIDTH*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
/////////////////////////////////////////////////////
/// 球门
pen.width := 2;
pen.color := clRed;
moveto(1 + CFLDXOFFSET,
(CFLDWIDTH div 2 - CDOORWIDTH)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(1 + CFLDXOFFSET,
(CFLDWIDTH div 2 + CDOORWIDTH)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
MoveTo(CFLDLEN*CACTFLDLEN div CFLDLEN-1 + CFLDXOFFSET,
(CFLDWIDTH div 2 - CDOORWIDTH)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
lineto(CFLDLEN*CACTFLDLEN div CFLDLEN-1 + CFLDXOFFSET,
(CFLDWIDTH div 2 + CDOORWIDTH)*CACTFLDWIDTH div CFLDWIDTH + CFLDYOFFSET);
pen.Width := 1;
///////////////////////////////////////////////////////////
/// 球
Pen.Color := clBlack;
brush.Color := clWhite;
Ellipse(Rect(amatchfield.ball.posx*CACTFLDLEN div CFLDLEN - CBALLRADIUS + CFLDXOFFSET, amatchfield.ball.posy*CACTFLDWIDTH div CFLDWIDTH - CBALLRADIUS + CFLDYOFFSET,
amatchfield.ball.posx*CACTFLDLEN div CFLDLEN + CBALLRADIUS + CFLDXOFFSET, amatchfield.ball.posy*CACTFLDWIDTH div CFLDWIDTH + CBALLRADIUS + CFLDYOFFSET));
////////////////////////////////////////////////////////////
/// 球员
pen.mode := pmXor;
Font.Color := clBlack;
pen.Color := clBlack;
brush.color := clYellow;
for i:=1 to CROBOTNUM do
begin
TextOut(amatchfield.robots[1,i].posx*CACTFLDLEN div CFLDLEN - 5 + CFLDXOFFSET,
amatchfield.robots[1,i].posy*CACTFLDWIDTH div CFLDWIDTH - 5 + CFLDYOFFSET,
inttostr(i));
Ellipse(Rect(amatchfield.robots[1,i].posx*CACTFLDLEN div CFLDLEN - CRADIUS * CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
amatchfield.robots[1,i].posy*CACTFLDWIDTH div CFLDWIDTH - CRADIUS * CACTFLDLEN div CFLDLEN + CFLDYOFFSET,
amatchfield.robots[1,i].posx*CACTFLDLEN div CFLDLEN + CRADIUS * CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
amatchfield.robots[1,i].posy*CACTFLDWIDTH div CFLDWIDTH + CRADIUS * CACTFLDLEN div CFLDLEN + CFLDYOFFSET));
end;
pen.Color := clWhite;
brush.color := clBlue;
Font.Color := clWhite;
for i:=1 to CROBOTNUM do
begin
TextOut((CFLDLEN - amatchfield.robots[2,i].posx)*CACTFLDLEN div CFLDLEN - 5 + CFLDXOFFSET,
(CFLDWIDTH - amatchfield.robots[2,i].posy)*CACTFLDWIDTH div CFLDWIDTH - 5 + CFLDYOFFSET,
inttostr(i));
Ellipse(Rect((CFLDLEN - amatchfield.robots[2,i].posx)*CACTFLDLEN div CFLDLEN - CRADIUS * CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - amatchfield.robots[2,i].posy)*CACTFLDWIDTH div CFLDWIDTH - CRADIUS * CACTFLDLEN div CFLDLEN + CFLDYOFFSET,
(CFLDLEN - amatchfield.robots[2,i].posx)*CACTFLDLEN div CFLDLEN + CRADIUS * CACTFLDLEN div CFLDLEN + CFLDXOFFSET,
(CFLDWIDTH - amatchfield.robots[2,i].posy)*CACTFLDWIDTH div CFLDWIDTH + CRADIUS * CACTFLDLEN div CFLDLEN + CFLDYOFFSET));
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
amatchfield := TMatchField.Create;
getmem( pMatchStat, sizeof(TMatchStat));
getmem( pFirstTeamAState, sizeof(TRobotStats));
getmem( pFirstTeamBState, sizeof(TRobotStats));
getmem( pFirstBallState, sizeof(TBallState));
getmem( pSecondTeamAState,sizeof(TRobotStats));
getmem( pSecondTeamBState,sizeof(TRobotStats));
getmem( pSecondBallState, sizeof(TBallState));
timeStart:=1;
// initmydll_first(pMatchStat, pFirstTeamAState, pFirstTeamBState, pFirstBallState);
// initmydll_second(pMatchStat, pSecondTeamAState, pSecondTeamBState, pSecondBallState);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
btnStopClick(nil);
amatchfield.free;
freemem(pMatchStat, sizeof(TMatchStat));
freemem(pFirstTeamAState, sizeof(TRobotStats));
freemem(pFirstTeamBState, sizeof(TRobotStats));
freemem(pFirstBallState, sizeof(TBallState));
freemem(pSecondTeamAState,sizeof(TRobotStats));
freemem(pSecondTeamBState,sizeof(TRobotStats));
freemem(pSecondBallState, sizeof(TBallState));
end;
procedure TForm1.btnCloseClick(Sender: TObject);
begin
close;
end;
procedure TForm1.btnStopClick(Sender: TObject);
begin
bStop := true;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
drawmatch;
drawfield;
amatchfield.UpdateScores;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -