鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于JAVA+Socket编程的五子棋游戏”一文,供大家参考学习
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1.1 胜负判断条件 要判断四个方向,横向、竖向、以及2个斜向。思想还是比较简单,相同颜色连成五子即胜利,网上有些网友评论说完整的判断胜负条件包括连五和活四,我觉得完全没必要,活四还要检查两边的棋子,虽然运算量不大,但五子棋的标准就是连五即胜,一步之差,我们既要遵守规则,也要简化代码实现尽完整的功能。 我们要事先建立一个盘面数组board[ ][ ],即棋型表,数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位,‘1’表示黑棋,‘2’表示白棋。由于代码太多,下面给出了一般状况的判断胜负函数,及以坐标(x,y)为中心的9X9矩形,只能在棋盘的内部,如果超过棋盘,就要另外考虑。下面的代码就是一般情况,整个矩形在棋盘内部的时候的判断胜负条件,如图14。 图14 获胜 胜负判断条件以下给出了X方向的代码: protected boolean judge(int x,int y,int clr){ int i=0,j=0,count=0; // x方向 for(i=0,count=0;x-i>=0&&i<5;i++){ if (clr==board[x-i][y]){ count++; } else{ break; } // System.out.println("( "+x+" , "+y+" )"+"count = "+count); if(count==5) return true; } for(i=1;x+i<15&&i<5;i++){ if(clr==board[x+i][y]){ count++; }else{ break; } if(count==5) return true; } return false; } 为保证公平,先下子的就有禁手。但是我们一般没有这个规则限制,都是轮流先下子。理论上是这样的。但很多专家表明,先下子有很大的几率获胜,即使有禁手,先下子的一方还是有很大的优势,我觉得对于我们一般玩家而言,这些规定可以不考虑。 判断胜负的不管是单机还是玩家相互游戏,都必须开服务端,因为判断胜负是放在里面的。如果有一方获胜,弹出提示框,如果确认则清空棋盘继续新游戏。 public void getVictory(Message msg){ JOptionPane.showMessageDialog(null, "You Win The Game", "Congratulations", JOptionPane.INFORMATION_MESSAGE); //继续新游戏 label3.setText("Player2"); newGame(); } 需要注意的一点是落下的棋子如果离任何一方的边界小于4,则以边界为限制判断是否有一方获胜,这样的话也要考虑多种方向,但原理还是和基本情况是一样的。 1.2 网络对战 这部分也属于网络套接字编程的经典应用,根据服务器地址连接特定端口。 网络部分很简单,但是我也做出了自己的特色,就是事件处理,做工可根据具体情况修改,虽然没有多少实用价值,但是也尽量使程序留有扩展性。下面给出了Message的代码。 /** * 消息列表 * type = 1 // 请求连接, msg = 连接者名字 * type = 2 // 放棋子 * type = 3 // 请求和其他人游戏 * type = 4 // 拒绝游戏请求 * type = 5 // 同意请求 * type = 6 // 发送胜利消息 * type = 7 // 断开连接请求 * type = 8 // 保存游戏,但是不放在磁盘上,在下一局开始时将会丢失 * type = 9 // 添加新的玩家到所有客户端的玩家列表 * type = 10// 响应信息 type ==1 * type = 11// 和玩家游戏,msg 保存玩家的名字 ,创建游戏的玩家设置游戏 * type = 12//信息设置 * type = 13// 设置玩家颜色 * type = 14// msg= 接受请求的一方设置 * type = 15// 服务端更新信息 * type = 16// 发送控制或错误信息 * type = 17// 游戏失败 * type = 18// 服务端套接字关闭 * type = 19// 玩家结束游戏及更新 * tyep = 20// 电脑获胜/ 玩家获胜 */ SOCKET监听端口,如果有玩家则更新玩家列表,如果双击除自己以外的玩家,则可以开始游戏,发送游戏请求,如果同意则返回棋子颜色并开始游戏,同时清空玩家列表。每一下子,把坐标传给服务端,并在2端显示出来,并且判断胜负。如果,有一方获胜,则提示消息通知双方,确定则继续开始新游戏。 服务端开启服务监听线程和客户端,如图15,如果有玩家知道服务器IP地址,即可选择在线玩家进行联网游戏,如图16。 双击除自己以外的一个玩家,发出游戏请求,同时要确定自己棋子的颜色,用MSG发回服务端。如果被拒绝,则返回原来的状态。 if(msg.color==1){ ss = new String("white"); bpanel.setColor(2); } else{ ss = new String("black"); bpanel.setColor(1); } |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |