java实现单机版五子棋(人人,人机)

您所在的位置:网站首页 五子棋程序源代码 java实现单机版五子棋(人人,人机)

java实现单机版五子棋(人人,人机)

2023-06-21 00:09| 来源: 网络整理| 查看: 265

团队成员

王春意 202203010080

朱振瑜 202203010082

设计思路

运行主类

public class YunXing { public static void main(String[] args) { new Test(); } }

胜负条件判断

public boolean iswin(int x,int y, int owner) { //创建一个变量用来记录同一方向上的相同棋子个数 int account = 0; //判断水平 //1.水平左侧 for (int i = x-1; i >=0; i--) { if (location[i][y]==owner){ account++; } else { break; } } //2.水平右侧 for (int i = x+1; i < QiPan_Size; i++) { if (location[i][y]==owner){ account++; } else { break; } } if (account >=4) { return true; } account=0; //判断垂直 //1.垂直上方 for (int i = y-1; i >=0; i--) { if (location[x][i]==owner){ account++; } else { break; } } //2.垂直下方 for (int i = y+1; i < QiPan_Size; i++) { if (location[x][i]==owner){ account++; } else { break; } } if (account >=4) { return true; } account=0; //判断左上和右下 //1.左上方 for (int i = y-1, j = x-1; i >=0&&j>=0; i--,j--) { if (location[j][i]==owner){ account++; } else { break; } } //2.右下方 for (int i = y+1, j = x+1; i < QiPan_Size &&j< QiPan_Size; i++,j++) { if (location[j][i]==owner){ account++; } else { break; } } if (account >=4) { return true; } account = 0; //判断右上和左下 //1.右上方 for (int i = y-1, j = x+1; i >=0&&j< QiPan_Size; i--,j++) { if (location[j][i]==owner){ account++; } else { break; } } //2.左下方 for (int i = y+1, j = x-1; i < QiPan_Size &&j>=0; i++,j--) { if (location[j][i]==owner){ account++; } else { break; } } if (account >=4) { return true; } account = 0; return false; }

机器寻找最佳落子位置

//机器落子 public Location searchlocation() { //初始化score评分,遍历棋盘所有位置 for (int i = 0; i < QiPan_Size; i++) { for (int j = 0; j < QiPan_Size; j++) { score[i][j] = 0; } } //每次机器落子都重新计算一次评分 //寻找五元组 int hunmanchessmannum = 0;//五元组中机器棋子数目 int machinechessmannum = 0;//五元组中人类棋子数目 int tuplescoretmp = 0;//临时得分(临时变量 //目标位置坐标 int goalX = -1; int goalY = -1; //利用计分方法求最大分数 int maxscore = -1; //1.纵向十五行的五元组 // 每行的横坐标不变,纵坐标增加至10,用k来确定五元组并计分 for (int i = 0; i < 15; i++) { for (int j = 0; j < 11; j++) { int k=j; while (kk-5&&k-5>=-1){ if(location[m][n]==-1) machinechessmannum++; else if(location[m][n]==1)hunmanchessmannum++; m--; n++; } //角落附近可能构不成五元组,k的取值没有限制,排除无法构成五元组的位置 if(m==k-5){ tuplescoretmp=tuplescore(hunmanchessmannum,machinechessmannum); for (m=k,n=j; m>k-5 ; m--,n++) { score[m][n]+=tuplescoretmp; } } hunmanchessmannum=0; machinechessmannum=0; tuplescoretmp=0; } } //4.扫描右上到坐下的下侧 for (int i = 1; i =0&&k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3