中国象棋Delphi版本程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unit Unit1;
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;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure NewGame1Click(Sender: TObject);
procedure Eixt1Click(Sender: TObject);
procedure CrossPaint(x,y,i,j:integer); //自定义画兵格过程
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FindDrop(NowR,NowC:integer); //扫描可以走棋的点过程
procedure PaintCMoveDrop(); //画出可走点过程
procedure WhoWin(); //判断输赢过程
procedure IsNextWin();//判断是否将军
procedure RemHistory();//走棋记录
procedure RepentChess(n:integer);
procedure FindAGoodMove(); //寻找一个优秀的走法
procedure AddPoint(row,column:integer);//加入一个相关点
function Eveluate(nSide:integer):integer;//估值函数
function Eveluate1(nSide:integer):integer;//测试估值函数
function GetRelatePiece(row,column:integer):integer;//枚举一个位置上棋子所有相关的点
function GetBingValue(row,column:integer):integer;//为兵返回附加值
//创建可能的走法 nPly记录扫描的层数,nSide记录到那边走棋 0为红方,1为黑方 function CreatePossibleMove(nPly,nSide:integer):integer;
function MakeMove(depth,n:integer):integer;//猜想过程中生产一个新局面
procedure UnMakeMove(depth,n,nChessID:integer); //猜想过程中根据走法恢复一个棋盘
function IsGameOver(depth:integer):integer;//猜想过程中判断给定局面是否结束 function AddMove(FormR,FormC,ToR,ToC,nPly:integer):integer;//在nMoveList中插入一个走法
function NegaMax(depth:integer):integer; //深度优先搜索负极大技校
function Alpha_Beta(depth,alpha,beta:integer):integer;//Alpha-Beta搜索算法 function ChessMoveLaw(NowR,NowC,ToR,ToC,nChessID:integer):boolean; //走棋规则函数
function ChessMoveLawPos(NowR,NowC,ToR,ToC,nChessID:integer):boolean; //猜想过程走棋规则函数
function CanTouch(NowR,NowC,ToR,ToC,nChessID:integer):boolean;//判断能不能到达目标点
function ChessPutLaw(NowR,NowC,ToR,ToC:integer):boolean; //摆起规则函数
function ChessMove(NowR,NowC,ToR,ToC:integer):boolean; //走棋函数
function AIChessMove(NowR,NowC,ToR,ToC:integer):boolean; //电脑走棋