五子棋实验报告(含代码)文档格式.doc
- 文档编号:13013587
- 上传时间:2022-10-02
- 格式:DOC
- 页数:11
- 大小:811KB
五子棋实验报告(含代码)文档格式.doc
《五子棋实验报告(含代码)文档格式.doc》由会员分享,可在线阅读,更多相关《五子棋实验报告(含代码)文档格式.doc(11页珍藏版)》请在冰豆网上搜索。
图像呈现点的位置、重绘的根据都是来源这里。
在下棋过程控制方面采用信号亮的机制,当操作者下过后,根据信号AI会立即计算将要下点的位置同时改变信号亮变量。
当AI下过棋子后,由于信号亮的的限制就等待操作者去下棋,同时改变信号亮变量内容。
AI和操作者的所有下子、修改矩阵、显示棋子的过程都是统一的。
在每一盘游戏开始时程序会对一些重要的变量进行初始化这里包括矩阵、信号亮、第一步棋子颜色、呈现图像等内容进行初始化。
同时AI会在棋盘中央下第一子。
2、AI逻辑部分
AI逻辑部分算是整个程序策略的灵魂。
其中的一些关键性判别的前后关系将影响AI的下棋的结果。
同时加大和降低AI的难度也是这里。
下面是我设计的策略过程:
从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。
我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。
3、棋子定点分析部分
棋子定点分析部分是这个程序策略的支撑。
分析的正确与否直接影响AI下子是否真的有意义、是否真的可以达到所需目的。
这里的代码也是最复杂。
这里包括了检测是否输赢的五棋子连续的状态、四子状态(再补一子,五子连续)存在与否、每个棋子的上到下、左到右、左上到右下、右上到左下,四个方向上棋子排列情况和可落子情况,同时分析出落子情况的优先级。
对于优先级较高额在AI逻辑部分会优先选择下子。
下面列举在从左到右这个方向上可下子的区域情况流程图:
二、源程序清单:
1、界面操作部分代码:
word文档可自由复制编辑
publicpartialclassForm1:
Form
{
boolisBlack=true;
boolIsAI=true;
int[,]bg={
{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}};
intchange=0;
publicForm1(){
InitializeComponent();
this.Width=497;
}
privatevoidInitPanel(){
intindex=60;
Graphicsgs=panel1.CreateGraphics();
PenmyPen=newPen(Color.Black,2);
gs.DrawLine(myPen,newPoint(30,30),newPoint(30,450));
gs.DrawLine(myPen,newPoint(30,30),newPoint(450,30));
gs.DrawLine(myPen,newPoint(450,30),newPoint(450,450));
gs.DrawLine(myPen,newPoint(30,450),newPoint(450,450));
myPen.Width=1;
while(index<
=420){
gs.DrawLine(myPen,newPoint(30,index),newPoint(450,index));
gs.DrawLine(myPen,newPoint(index,30),newPoint(index,450));
index+=30;
SolidBrushbursh=newSolidBrush(Color.Black);
gs.FillEllipse(bursh,240-4,240-4,8,8);
for(inti=0;
i<
15;
i++){
for(intj=0;
j<
j++){
if(bg[i,j]==1){
gs.DrawImage(Resources.Black,newPoint((j+1)*30-10,(i+1)*30-10));
elseif(bg[i,j]==-1){
gs.DrawImage(Resources.White,newPoint((j+1)*30-10,(i+1)*30-10));
}
}
}
myPen.Dispose();
bursh.Dispose();
gs.Dispose();
gs=null;
bursh=null;
myPen=null;
privatevoidPutOn(introw,intcolume){
Imagem=null;
if(bg[row-1,colume-1]==0){
if(isBlack){
m=Resources.Black;
isBlack=false;
change=1;
else{
m=Resources.White;
isBlack=true;
change=-1;
gs.DrawImage(m,newPoint(colume*30-10,row*30-10));
bg[row-1,colume-1]=change;
m.Dispose();
m=null;
IsFiveChessmanchess=newsFiveChessman(bg);
if(chess.AllSelect()){
if(IsAI){
MessageBox.Show("
AI胜!
"
);
else{
MessageBox.Show("
你胜!
elseif(!
IsAI){
IsAI=true;
AImyAI=newAI(bg,1);
stringstr=myAI.AIMain();
myAI.DisArraylist();
PutOn(Convert.ToInt32(str.Split('
#'
)[0])+1,Convert.ToInt32(str.Split('
)[1])+1);
}
privatevoidForm1_Load(objectsender,EventArgse){
IsAI=true;
isBlack=true;
change=0;
PutOn(8,8);
privatevoidpanel1_Paint(objectsender,PaintEventArgse){
InitPanel();
privatevoidpanel1_MouseUp(objectsender,MouseEventArgse){
introw=-1;
intcolume=-1;
intp=0;
intq=0;
if(e.X>
20&
&
e.X<
460&
e.Y>
e.Y<
e.Button==MouseButtons.Left){
p=e.X%30;
q=e.X/30;
if(q<
1||q>
14){
if(q<
1){q=1;
else{q=15;
if(p>
=15){q=q+1;
colume=q;
q=e.Y/30;
p=e.Y%30;
15){q=q+1;
row=q;
IsAI=false;
this.PutOn(row,colume);
classAI:
IsFiveChessman{
protectedintAIValue=0;
protectedintfirstX=-1;
protectedintfirstY=-1;
ArrayListlistAI=newArrayList();
ArrayListlistP=newArrayList();
publicAI(int[,]bg,intvalue){
base.BG=bg;
AIValue=value;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 实验 报告 代码