当前位置:首页 > 中国象棋Delphi版本程序代码
form1.Canvas.Pen.Width:=2;
form1.Canvas.Rectangle(10,10,19*mBit-15,55);//最上方外框
form1.Canvas.Rectangle(11*mBit-30,mBit+15,19*mBit-15,12*mBit+15); end;
procedure TForm1.NewGame1Click(Sender: TObject); var
i,j:integer;
begin
if(FirstPlay<>'')and((GameMode=1)or(GameMode=2))then begin
if(MessageDlg('确定要开始新游戏吗?',mtConfirmation,[mbYes,mbNo],0))=mrYes then
begin
GroupBox1.Visible:=false;//隐藏GroupBox1 Memo1.Lines.Clear;
Memo1.Lines.Add('新游戏开始!');
MemoMaxLine:=Memo1.Lines.Add('由'+FirstPlay+'先走棋!'); //拾子标志为false mPickFlag:=false;
//能走棋标志为false CanDropFlag:=false;
//胜利标志 win:=false;
//初始化走棋一方 WhoPlay:=FirstPlay; if(WhoPlay='红')then
label1.Font.Color:=clred; if(WhoPlay='黑')then
label1.Font.Color:=clblack; label1.Font.Name:='宋体'; label1.Font.Size:=25;
label1.Caption:='红方走棋'; //初始化胜利提示 label4.Caption:='';
//初始化走棋步数 MCSteep:=0;
label3.Caption:='走棋步数:第'+inttostr(MCSteep)+'步';
//初始化棋盘数组 for i:=1 to 10 do for j:=1 to 9 do begin
ChessBoard[i,j]:=0; end;
//(1'车',2'马',3'象',4'士',5'帅',6'炮','7兵',8'車',9'馬',10'相',11'仕',12'将',13'炮',14'卒'); //设置黑方的棋子 ChessBoard[1,1]:=8; ChessBoard[1,2]:=9; ChessBoard[1,3]:=10; ChessBoard[1,4]:=11; ChessBoard[1,5]:=12; ChessBoard[1,6]:=11; ChessBoard[1,7]:=10; ChessBoard[1,8]:=9; ChessBoard[1,9]:=8; ChessBoard[3,2]:=13; ChessBoard[3,8]:=13; ChessBoard[4,1]:=14; ChessBoard[4,3]:=14; ChessBoard[4,5]:=14; ChessBoard[4,7]:=14; ChessBoard[4,9]:=14;
//设置红方的棋子 ChessBoard[10,1]:=1; ChessBoard[10,2]:=2; ChessBoard[10,3]:=3; ChessBoard[10,4]:=4; ChessBoard[10,5]:=5; ChessBoard[10,6]:=4; ChessBoard[10,7]:=3; ChessBoard[10,8]:=2; ChessBoard[10,9]:=1; ChessBoard[8,2]:=6; ChessBoard[8,8]:=6; ChessBoard[7,1]:=7; ChessBoard[7,3]:=7; ChessBoard[7,5]:=7;
ChessBoard[7,7]:=7; ChessBoard[7,9]:=7;
refresh();//更新棋盘 RemHistory();
if(GameMode=2)and(FirstPlay='黑')then //人机对弈模式由黑方先手 begin
FindAGoodMove();
AIChessMove(nBestMove.FormR,nBestMove.FormC,nBestMove.ToR,nBestMove.ToC); if(isMove=true)then begin
RemHistory();//记录棋子移动 WhoPlay:='红';
label1.Font.Color:=clred; refresh();
paintbox1.Canvas.Pen.Width:=2;
paintbox1.Canvas.Pen.Color:=clgreen;
CrossPaint(nBestMove.FormC*mBit,nBestMove.FormR*mBit,2,8);//棋子起走点标记
CrossPaint(nBestMove.ToC*mBit,nBestMove.ToR*mBit,2,8);//棋子落点标记 isMove:=false;
end; end;
end;//if(MessageDlg('确定要开始新游戏吗 end else
MessageDlg('请设置游戏模式!',mtWarning,[mbOk],0); end;
procedure TForm1.CrossPaint(x,y,i,j:integer); //画兵格过程 begin
if x<>mBit then begin
//兵格坐标左上部
paintbox1.Canvas.MoveTo(x-i,y-i);
paintbox1.Canvas.LineTo(x-j,y-i); paintbox1.Canvas.MoveTo(x-i,y-i); paintbox1.Canvas.LineTo(x-i,y-j); //兵格坐标左下部
paintbox1.Canvas.MoveTo(x-i,y+i); paintbox1.Canvas.LineTo(x-j,y+i); paintbox1.Canvas.MoveTo(x-i,y+i); paintbox1.Canvas.LineTo(x-i,y+j); end;
if x<>9*mBit then begin
//兵格坐标右上部
paintbox1.Canvas.MoveTo(x+i,y-i); paintbox1.Canvas.LineTo(x+i,y-j); paintbox1.Canvas.MoveTo(x+i,y-i); paintbox1.Canvas.LineTo(x+j,y-i); //兵格坐标右下部
paintbox1.Canvas.MoveTo(x+i,y+i); paintbox1.Canvas.LineTo(x+j,y+i); paintbox1.Canvas.MoveTo(x+i,y+i); paintbox1.Canvas.LineTo(x+i,y+j); end; end;
procedure TForm1.Eixt1Click(Sender: TObject); begin
if(MessageDlg('确定要退出游戏?',mtConfirmation,[mbYes,mbNo],0))=mrYes then close; end;
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var
row,column:integer;//鼠标落点的行,列号 Lcross : real;//鼠标落点到棋盘交叉点的距离 i,j:integer;
begin
共分享92篇相关文档