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

📄 chess.pas

📁 source code for caro game on Java
💻 PAS
📖 第 1 页 / 共 2 页
字号:
function KihieuNuoc(r,c:Integer):String;
begin
  KihieuNuoc:=RStr(IntToStr(c),2)+':'+RStr(IntToStr(SIZE_Y+1-r),2);
end;
{---------------------------------------------------------}
procedure TMainForm.PrintTurnInfo;
begin
  lblMove.Caption:='Turn : '+IntToStr(N div 2 + 1);
  if SidePlay=XSide then
    begin
      lblSide.Color:=clBlue;
      lblSide.Caption:='BLUE';
    end
  else
    begin
      lblSide.Color:=clRed;
      lblSide.Caption:='RED';
    end;
end;
{---------------------------------------------------------}
function UpdateNewMove:Integer;
begin
  if NewMove.Row=0 then
    begin
      ShowMessage('Draw');
      LuotNguoidi:=False;
      MainForm.ComTimer.Enabled:=False;
      Result:=1;
      Exit;
    end;

  Piece[NewMove.Row,NewMove.Col]:=SidePlay;
  if side=XSide then KukoPiece[NewMove.Row,NewMove.Col]:=KukoX
    else KukoPiece[NewMove.Row,NewMove.Col]:=KukoO;

  if ((SidePlay=XSide) and (MainForm.cboPlayer1.ItemIndex<>MARS_COM)) or
     ((SidePlay=OSide) and (MainForm.cboPlayer2.ItemIndex<>MARS_COM)) then
      begin
        PlayPoint.X:=NewMove.Row-1;
        PlayPoint.Y:=NewMove.Col-1;
        Update_move;
        side := 3-side;
        first_side := side;
      end;

  Inc(SoNuoc);
  DrawCell(NewMove.Row,NewMove.Col);
  Winner:=FivePointFound(NewMove.Row,NewMove.Col);

  GameTime:=GetTickCount-GameStart;
  if SidePlay=XSide then
    begin
      OStart:=GetTickCount;
      Inc(XTime,OStart-XStart);
    end
  else
    begin
      XStart:=GetTickCount;
      Inc(OTime,XStart-OStart);
    end;

  if SidePlay=XSide then SidePlay:=OSide else SidePlay:=XSide;
  UpdateNewMove:=Winner;

  with MainForm do
    begin
      PrintTurnInfo(SoNuoc);
      lblGameTime.Caption:=MiliSecToStr(GameTime);
      lblXTime.Caption:=MiliSecToStr(XTime);
      lblOTime.Caption:=MiliSecToStr(OTime);
      if Odd(SoNuoc) then ListBox.Items.Add(RStr(IntToStr((SoNuoc-1) div 2 + 1),2)+' : '+KihieuNuoc(NewMove.Row,NewMove.Col))
        else ListBox.Items.Add(RStr('',5)+KihieuNuoc(NewMove.Row,NewMove.Col));
      ListBox.ItemIndex:=ListBox.Items.Count - 1;
    end;
  if Winner<>EMPTY then EndGame;
end;
{---------------------------------------------------------}
procedure NewGame;
var
  i,j : Integer;
begin
  Init_para;
  if MainForm.cboPlayer1.ItemIndex in [MARS_COM,BLACK_ANGEL] then side:=Human
    else side:=Computer;
  SidePlay:=XSide;
  Winner:=0;
  SoNuoc:=0;

  for i:=1 to SIZE_Y do
    for j:=1 to SIZE_X do Piece[i,j]:=EMPTY;
  KukoPiece:=Piece;
  MainForm.ListBox.Clear;

  DrawBoard;
  COMvsCOM:=(MainForm.cboPlayer1.ItemIndex<>PLAYER_HUMAN) and (MainForm.cboPlayer2.ItemIndex<>PLAYER_HUMAN);

  GameTime:=0;
  XTime:=0;
  OTime:=0;
  GameStart:=GetTickCount;
  XStart:=GameStart;

  if MainForm.cboPlayer1.ItemIndex<>PLAYER_HUMAN then
    begin
      NewMove.Row:=10;
      NewMove.Col:=10;

      if MainForm.cboPlayer1.ItemIndex=MARS_COM then
        begin
          PlayPoint.X:=9;
          PlayPoint.Y:=9;
          Update_move;
          side := 3-side;
          first_side := side;
        end;

      UpdateNewMove;
      LuotNguoidi:=MainForm.cboPlayer2.ItemIndex=PLAYER_HUMAN;
    end
  else LuotNguoidi:=True;
  MayDangnghi:=False;
  MainForm.COMTimer.Enabled:=not LuotNguoidi;
end;
{---------------------------------------------------------}
procedure TMainForm.subNewGameClick(Sender: TObject);
begin
  NewGame;
end;
{---------------------------------------------------------}
procedure TMainForm.FormCreate(Sender: TObject);
begin
  Randomize;
  CurrentDir:=ExtractFilePath(Application.ExeName);
  InitShashinPattern;
  cboPlayer1.ItemIndex:=PLAYER_HUMAN;
  cboPlayer2.ItemIndex:=MARS_COM;
  NewGame;
end;
{---------------------------------------------------------}
procedure TMainForm.ChessBoardMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  r,c : Integer;
begin
  if not LuotNguoidi then Exit;
  r:=ChessBoard.Row+1;
  c:=ChessBoard.Col+1;
  if Piece[r,c]=EMPTY then
    begin
      NewMove.Row:=r;
      NewMove.Col:=c;
      if UpdateNewMove>0 then Exit;
      if ((SidePlay=XSide) and (cboPlayer1.ItemIndex<>PLAYER_HUMAN)) or
         ((SidePlay=OSide) and (cboPlayer2.ItemIndex<>PLAYER_HUMAN)) then
        begin
          LuotNguoidi:=False;
          MayDangnghi:=False;
          MainForm.COMTimer.Enabled:=True;
        end;
    end;
end;
{---------------------------------------------------------}
procedure TMainForm.ComTimerTimer(Sender: TObject);
var
  m : Move;
begin
  if MayDangnghi then Exit;
  MayDangnghi:=True;
  ChessBoard.Cursor:=crHourGlass;

  if SidePlay=XSide then
    begin
      case cboPlayer1.ItemIndex of
        KUKO_COM    : Kuko(KukoX,NewMove);
        SHASHIN_COM : Shashin(NewMove);
        MARS_COM    : Mars;
        BLACK_ANGEL : begin
                        Shashin(m);
                        Computer_think;
                        if ChuaNghiXong then
                          begin
                            NewMove:=m;
                            ListBox.Items.Add('- Shashin -');
                          end
                        else
                          begin
                            NewMove.Row:=PlayPoint.X+1;
                            NewMove.Col:=PlayPoint.Y+1;
                          end;
                      end;
      end;
    end
  else
    begin
      case cboPlayer2.ItemIndex of
        KUKO_COM    : Kuko(KukoO,NewMove);
        SHASHIN_COM : Shashin(NewMove);
        MARS_COM    : Mars;
        BLACK_ANGEL : begin
                        Shashin(m);
                        Computer_think;
                        if ChuaNghiXong then
                          begin
                            NewMove:=m;
                            ListBox.Items.Add('- Shashin -');
                          end
                        else
                          begin
                            NewMove.Row:=PlayPoint.X+1;
                            NewMove.Col:=PlayPoint.Y+1;
                          end;
                      end;
      end;
    end;

  ChessBoard.Cursor:=crDefault;

  if UpdateNewMove>0 then MayDangnghi:=True else MayDangnghi:=False;
  if not COMvsCOM then
    begin
      COMTimer.Enabled:=False;
      LuotNguoidi:=True;
    end;
end;
{---------------------------------------------------------}
procedure TMainForm.subExitClick(Sender: TObject);
begin
  Halt;
end;
{---------------------------------------------------------}
procedure TMainForm.TimeItemCheck;
begin
  subT5s.Checked:=False;
  subT10s.Checked:=False;
  subT15s.Checked:=False;
  subT20s.Checked:=False;
  subT30s.Checked:=False;
  subT60s.Checked:=False;
  subMenuItem.Checked:=True;
end;
{---------------------------------------------------------}
procedure TMainForm.DepthItemCheck;
begin
  subDepth12.Checked:=False;
  subDepth13.Checked:=False;
  subDepth14.Checked:=False;
  subDepth15.Checked:=False;
  subDepth16.Checked:=False;
  subDepth17.Checked:=False;
  subMenuItem.Checked:=True;
end;
{---------------------------------------------------------}
procedure TMainForm.subT5sClick(Sender: TObject);
begin
  Max_Time:=5000;
  TimeItemCheck(subT5s);
end;
{---------------------------------------------------------}
procedure TMainForm.subT10sClick(Sender: TObject);
begin
  Max_Time:=10000;
  TimeItemCheck(subT10s);
end;
{---------------------------------------------------------}
procedure TMainForm.subT15sClick(Sender: TObject);
begin
  Max_Time:=15000;
  TimeItemCheck(subT15s);
end;
{---------------------------------------------------------}
procedure TMainForm.subT20sClick(Sender: TObject);
begin
  Max_Time:=20000;
  TimeItemCheck(subT20s);
end;
{---------------------------------------------------------}
procedure TMainForm.subT30sClick(Sender: TObject);
begin
  Max_Time:=30000;
  TimeItemCheck(subT30s);
end;
{---------------------------------------------------------}
procedure TMainForm.subT60sClick(Sender: TObject);
begin
  Max_Time:=60000;
  TimeItemCheck(subT60s);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth12Click(Sender: TObject);
begin
  max_nested:=12;
  DepthItemCheck(subDepth12);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth13Click(Sender: TObject);
begin
  max_nested:=13;
  DepthItemCheck(subDepth13);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth14Click(Sender: TObject);
begin
  max_nested:=14;
  DepthItemCheck(subDepth14);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth15Click(Sender: TObject);
begin
  max_nested:=15;
  DepthItemCheck(subDepth15);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth16Click(Sender: TObject);
begin
  max_nested:=16;
  DepthItemCheck(subDepth16);
end;
{---------------------------------------------------------}
procedure TMainForm.subDepth17Click(Sender: TObject);
begin
  max_nested:=17;
  DepthItemCheck(subDepth17);
end;
{---------------------------------------------------------}

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -