五子棋人机对战代码.doc

五子棋人机对战代码.doc

ID:53247742

大小:52.50 KB

页数:9页

时间:2020-04-02

五子棋人机对战代码.doc_第1页
五子棋人机对战代码.doc_第2页
五子棋人机对战代码.doc_第3页
五子棋人机对战代码.doc_第4页
五子棋人机对战代码.doc_第5页
资源描述:

《五子棋人机对战代码.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、8.2电脑下棋算法设计本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。具体的分数值赋值如下:分数电脑玩家活二6050半活二4035死二1010半死二1010活三950700半活三900650死三100100半死三100100活四60003500半活四500

2、03000死四4000800半死四3600750活五2000015000半活五100003300死五2000015000半死五100003300解释一下其中的活,半活,死,半死:活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。每个位置的

3、分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。具体的代码如下:publicvoidqixing(){for(inti=0;i<17;i++){for(intj=0;j<17;j++){if(qipan[i+1][j+1]==0){//说明此处没有棋子qixingPC[i][j]=heiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);qixingPlayer[i][j]=heihe

4、ng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1);}else{qixingPC[i][j]=0;qixingPlayer[i][j]=0;}}}}//算出黑子横方向的棋型数值publicintheiheng(inthang,intlie,intnum){intk=0;//记录空白处的个数intcount=1;//记录可以形成几连intn=hang+1;//对应棋盘的行intm=lie+1;//对应棋盘的列booleanleft=false

5、;//判断左边是否有黑子booleanliveLeft=false;//判断左边是活还是死booleanliveRight=false;//判断右边是活还是死while((qipan[n][m-1]!=-1)&&(qipan[n][m-1]==num

6、

7、qipan[n][m-1]==0)){if(qipan[n][m-1]==0&&k<1){//第一个空白if(qipan[n][m-2]!=num){liveLeft=true;break;}k++;m--;}elseif(qipan[n][m-1]==

8、num){//黑子left=true;m--;}else{//第二个空白liveLeft=true;break;}}if(!left){k=0;m=lie+1;}while((qipan[n][m+1]!=-1)&&(qipan[n][m+1]==num

9、

10、qipan[n][m+1]==0)){intt=qipan[n][m+1];if(m==lie){count++;m++;continue;}if(t==0&&k<1){//第一个空白if(qipan[n][m+2]!=num){liveRight=

11、true;break;}k++;m++;}elseif(t==0&&k>0){//第二个空白liveRight=true;break;}else{//黑子m++;count++;}}returnjieguo(liveLeft,liveRight,count,k,num);}//算出黑子竖方向的棋型数值publicintheishu(inthang,intlie,intnum){intk=0;//记录空白处的个数intcount=1;//记录可以形成几连intn=hang+1;//对应棋盘的行intm=l

12、ie+1;//对应棋盘的列booleantop=false;//判断上边是否有黑子booleanliveLeft=false;booleanliveRight=false;while((qipan[n-1][m]!=-1)&&(qipan[n-1][m]==num

13、

14、qipan[n-1][m]==0)){if(qipan[n-1][m]==0&&k<1){//第一个空白if(qipan[n-2][m]!=num){liveLeft=true

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。