网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

基于JAVA+Socket编程的五子棋游戏

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于JAVA+Socket编程的五子棋游戏”一文,供大家参考学习

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名: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
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师