⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umain.pas

📁 机器人足球赛比赛平台源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -