中国象棋Delphi版本程序代码.docx
- 文档编号:2069470
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:116
- 大小:36.05KB
中国象棋Delphi版本程序代码.docx
《中国象棋Delphi版本程序代码.docx》由会员分享,可在线阅读,更多相关《中国象棋Delphi版本程序代码.docx(116页珍藏版)》请在冰豆网上搜索。
中国象棋Delphi版本程序代码
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,Menus,ExtCtrls,StdCtrls,Buttons,Unit2,Unit3;
type
TForm1=class(TForm)
PaintBox1:
TPaintBox;
MainMenu1:
TMainMenu;
Game1:
TMenuItem;
NewGame1:
TMenuItem;
Eixt1:
TMenuItem;
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
BitBtn1:
TBitBtn;
BitBtn3:
TBitBtn;
Label4:
TLabel;
s1:
TMenuItem;
N1:
TMenuItem;
N2:
TMenuItem;
N3:
TMenuItem;
N4:
TMenuItem;
N5:
TMenuItem;
N6:
TMenuItem;
N7:
TMenuItem;
N8:
TMenuItem;
GroupBox1:
TGroupBox;
PaintBox2:
TPaintBox;
BitBtn2:
TBitBtn;
BitBtn4:
TBitBtn;
BitBtn5:
TBitBtn;
BitBtn6:
TBitBtn;
GroupBox2:
TGroupBox;
Memo1:
TMemo;
BitBtn7:
TBitBtn;
N9:
TMenuItem;
N10:
TMenuItem;
N11:
TMenuItem;
N12:
TMenuItem;
N13:
TMenuItem;
RadioGroup1:
TRadioGroup;
RadioGroup2:
TRadioGroup;
procedureFormCreate(Sender:
TObject);
procedurePaintBox1Paint(Sender:
TObject);
procedureNewGame1Click(Sender:
TObject);
procedureEixt1Click(Sender:
TObject);
procedureCrossPaint(x,y,i,j:
integer);//自定义画兵格过程
procedurePaintBox1MouseDown(Sender:
TObject;Button:
TMouseButton;
Shift:
TShiftState;X,Y:
Integer);
procedureFindDrop(NowR,NowC:
integer);//扫描可以走棋的点过程
procedurePaintCMoveDrop();//画出可走点过程
procedureWhoWin();//判断输赢过程
procedureIsNextWin();//判断是否将军
procedureRemHistory();//走棋记录
procedureRepentChess(n:
integer);
procedureFindAGoodMove();//寻找一个优秀的走法
procedureAddPoint(row,column:
integer);//加入一个相关点
functionEveluate(nSide:
integer):
integer;//估值函数
functionEveluate1(nSide:
integer):
integer;//测试估值函数
functionGetRelatePiece(row,column:
integer):
integer;//枚举一个位置上棋子所有相关的点
functionGetBingValue(row,column:
integer):
integer;//为兵返回附加值
//创建可能的走法nPly记录扫描的层数,nSide记录到那边走棋0为红方,1为黑方
functionCreatePossibleMove(nPly,nSide:
integer):
integer;
functionMakeMove(depth,n:
integer):
integer;//猜想过程中生产一个新局面
procedureUnMakeMove(depth,n,nChessID:
integer);//猜想过程中根据走法恢复一个棋盘
functionIsGameOver(depth:
integer):
integer;//猜想过程中判断给定局面是否结束
functionAddMove(FormR,FormC,ToR,ToC,nPly:
integer):
integer;//在nMoveList中插入一个走法
functionNegaMax(depth:
integer):
integer;//深度优先搜索负极大技校
functionAlpha_Beta(depth,alpha,beta:
integer):
integer;//Alpha-Beta搜索算法
functionChessMoveLaw(NowR,NowC,ToR,ToC,nChessID:
integer):
boolean;//走棋规则函数
functionChessMoveLawPos(NowR,NowC,ToR,ToC,nChessID:
integer):
boolean;//猜想过程走棋规则函数
functionCanTouch(NowR,NowC,ToR,ToC,nChessID:
integer):
boolean;//判断能不能到达目标点
functionChessPutLaw(NowR,NowC,ToR,ToC:
integer):
boolean;//摆起规则函数
functionChessMove(NowR,NowC,ToR,ToC:
integer):
boolean;//走棋函数
functionAIChessMove(NowR,NowC,ToR,ToC:
integer):
boolean;//电脑走棋
procedureBitBtn1Click(Sender:
TObject);
procedureFormPaint(Sender:
TObject);
procedureBitBtn3Click(Sender:
TObject);
procedureN3Click(Sender:
TObject);
procedureN2Click(Sender:
TObject);
procedureN6Click(Sender:
TObject);
procedureN7Click(Sender:
TObject);
procedurePaintBox2Paint(Sender:
TObject);
procedureN8Click(Sender:
TObject);
procedurePaintBox2MouseDown(Sender:
TObject;Button:
TMouseButton;
Shift:
TShiftState;X,Y:
Integer);
procedureBitBtn5Click(Sender:
TObject);
procedureBitBtn4Click(Sender:
TObject);
procedureBitBtn2Click(Sender:
TObject);
procedureBitBtn6Click(Sender:
TObject);
procedureBitBtn7Click(Sender:
TObject);
procedureN11Click(Sender:
TObject);
procedureN12Click(Sender:
TObject);
procedureN13Click(Sender:
TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
//棋盘格子单位大小
mBit:
integer;
//棋子数组:
所有棋子的数值
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:
array[1..10,1..9]ofinteger;
//每一个位置被保护的信息
m_GuardNum:
array[1..10,1..9]ofinteger;
//每一个棋子是总价值
m_ChessValue:
array[1..10,1..9]ofinteger;
//红兵附加值矩阵
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),
(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),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0)
);
//黑卒附加值矩阵
mZhuzi:
array[1..10,1..9]ofinteger=
(
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0),
(70,70,70,70,70,70,70,70,70),
(70,90,110,110,110,110,110,90,70),
(90,90,110,120,120,120,110,90,90),
(90,90,110,120,120,120,110,90,90),
(0,0,0,0,0,0,0,0,0)
);
//===============================棋子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国象棋 Delphi 版本 程序代码