中国象棋Delphi版本程序代码Word格式文档下载.docx
《中国象棋Delphi版本程序代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中国象棋Delphi版本程序代码Word格式文档下载.docx(116页珍藏版)》请在冰豆网上搜索。
Label2:
Label3:
BitBtn1:
TBitBtn;
BitBtn3:
Label4:
s1:
N1:
N2:
N3:
N4:
N5:
N6:
N7:
N8:
GroupBox1:
TGroupBox;
PaintBox2:
BitBtn2:
BitBtn4:
BitBtn5:
BitBtn6:
GroupBox2:
Memo1:
TMemo;
BitBtn7:
N9:
N10:
N11:
N12:
N13:
RadioGroup1:
TRadioGroup;
RadioGroup2:
procedureFormCreate(Sender:
TObject);
procedurePaintBox1Paint(Sender:
procedureNewGame1Click(Sender:
procedureEixt1Click(Sender:
procedureCrossPaint(x,y,i,j:
integer);
//自定义画兵格过程
procedurePaintBox1MouseDown(Sender:
TObject;
Button:
TMouseButton;
Shift:
TShiftState;
X,Y:
Integer);
procedureFindDrop(NowR,NowC:
//扫描可以走棋的点过程
procedurePaintCMoveDrop();
//画出可走点过程
procedureWhoWin();
//判断输赢过程
procedureIsNextWin();
//判断是否将军
procedureRemHistory();
//走棋记录
procedureRepentChess(n:
procedureFindAGoodMove();
//寻找一个优秀的走法
procedureAddPoint(row,column:
//加入一个相关点
functionEveluate(nSide:
integer):
integer;
//估值函数
functionEveluate1(nSide:
//测试估值函数
functionGetRelatePiece(row,column:
//枚举一个位置上棋子所有相关的点
functionGetBingValue(row,column:
//为兵返回附加值
//创建可能的走法nPly记录扫描的层数,nSide记录到那边走棋0为红方,1为黑方
functionCreatePossibleMove(nPly,nSide:
functionMakeMove(depth,n:
//猜想过程中生产一个新局面
procedureUnMakeMove(depth,n,nChessID:
//猜想过程中根据走法恢复一个棋盘
functionIsGameOver(depth:
//猜想过程中判断给定局面是否结束
functionAddMove(FormR,FormC,ToR,ToC,nPly:
//在nMoveList中插入一个走法
functionNegaMax(depth:
//深度优先搜索负极大技校
functionAlpha_Beta(depth,alpha,beta:
//Alpha-Beta搜索算法
functionChessMoveLaw(NowR,NowC,ToR,ToC,nChessID:
boolean;
//走棋规则函数
functionChessMoveLawPos(NowR,NowC,ToR,ToC,nChessID:
//猜想过程走棋规则函数
functionCanTouch(NowR,NowC,ToR,ToC,nChessID:
//判断能不能到达目标点
functionChessPutLaw(NowR,NowC,ToR,ToC:
//摆起规则函数
functionChessMove(NowR,NowC,ToR,ToC:
//走棋函数
functionAIChessMove(NowR,NowC,ToR,ToC:
//电脑走棋
procedureBitBtn1Click(Sender:
procedureFormPaint(Sender:
procedureBitBtn3Click(Sender:
procedureN3Click(Sender:
procedureN2Click(Sender:
procedureN6Click(Sender:
procedureN7Click(Sender:
procedurePaintBox2Paint(Sender:
procedureN8Click(Sender:
procedurePaintBox2MouseDown(Sender:
procedureBitBtn5Click(Sender:
procedureBitBtn4Click(Sender:
procedureBitBtn2Click(Sender:
procedureBitBtn6Click(Sender:
procedureBitBtn7Click(Sender:
procedureN11Click(Sender:
procedureN12Click(Sender:
procedureN13Click(Sender:
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
//棋盘格子单位大小
mBit:
//棋子数组:
所有棋子的数值
mChess:
array[1..14]ofstring=
('
车'
'
马'
相'
士'
帅'
炮'
兵'
車'
馬'
象'
仕'
将'
卒'
);
//===============================棋子价值==============================//
//棋子的基础价值
m_BaseValue:
array[1..14]ofinteger=
(500,350,250,250,10000,370,100,500,350,250,250,10000,370,100);
//棋子灵活度基础价值
m_Flexible:
array[1..14]ofinteger=
(6,12,1,1,0,6,15,6,12,1,1,0,6,15);
//每一个位置上的棋子的灵活性即可走步数
m_FlexibleNum:
array[1..10,1..9]ofinteger;
//每一个位置被威胁的信息
m_AttackNum:
//每一个位置被保护的信息
m_GuardNum:
//每一个棋子是总价值
m_ChessValue:
//红兵附加值矩阵
mBing:
array[1..10,1..9]ofinteger=
(
(0,0,0,0,0,0,0,0,0),
(90,90,110,120,120,120,110,90,90),
(70,90,110,110,110,110,110,90,70),
(70,70,70,70,70,70,70,70,70),
(0,0,0,0,0,0,0,0,0)
//黑卒附加值矩阵
mZhuzi:
//===============================棋子