网络对弈课程设计说明书_第1页
网络对弈课程设计说明书_第2页
网络对弈课程设计说明书_第3页
网络对弈课程设计说明书_第4页
网络对弈课程设计说明书_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号 计算机网络课程设计说明书 题 目 网络对弈程序设计 系 别 计算机科学与工程学院 专 业 计算机科学与技术 学生姓名 学 号 指导教师 王虎寅 2013 年 3 月 20 日 目目 录录 1 1 设计任务及目标设计任务及目标 1 1 1 1 开发背景以及设计目标 1 1 2 设计任务 1 2 2 需求分析需求分析 2 2 2 1 系统需求 2 2 2 用户需求 2 2 2 1 服务端需求 2 2 2 2 客户端需求 2 2 2 3 技术上可行性分析 3 2 3 系统运行环境 4 3 3 总体设计总体设计 4 4 3 1 系统结构设计 4 3 2 服务器设计 5 3 3 客户端设计 7 3 4 棋类设计 8 4 4 详细设计详细设计 9 9 4 1 服务器 9 4 1 1 服务器主类的设计开发 9 4 1 2 服务器线程的设计开发 13 4 2 客户端 23 4 3 棋盘以及规则 26 5 5 软件实现以及使用说明软件实现以及使用说明 4646 5 1 服务器运行使用及测试 46 5 2 客户端运行使用及测试 49 6 6 总结总结 5353 6 1 任务完成情况 53 6 2 特色与不足 53 6 2 1 特色 53 6 2 2 不足 53 6 3 所遇到的问题 53 6 4 体会 54 7 7 参考文献参考文献 5555 桂林电子科技大学课程设计说明书用纸 第 1 页 共 55 页 1 1 设计任务及目标设计任务及目标 1 11 1 开发背景以及设计目标开发背景以及设计目标 五子棋有着悠久的历史 五子棋爱好者更是不计其数 但是由于 人们工作地点 时间的限制 生活节奏的加快 人们之间的交流越来 越少 面对面下五子棋的机会更是少了很多 那种面对面的下棋的方 式已经不再适应人们的生活 但网络给了人们一个交流的平台 因此 人们开始转向网络五子棋 网络五子棋有很多优点 通过网络五子棋 对弈双方可以是网络 上任意两个五子棋的爱好者 甚至从不认识 网络五子棋让对弈的范 围更加的广泛 让玩家可以与更多的五子棋爱好者切磋棋艺 所以我此次网络课程设计综合运用 计算机网络 JAVA 语言 程序设计 网络编程 等课程知识 从需求分析入手 系统地掌 握计算机网络编程初级技术 独立 合理地完成网络五子棋对弈程序 设计任务 设计目标主要包括 1 实现需求分析阶段所要求的服务器端以及客户端的功能 2 游戏界面朴素美观 3 棋子样式采用传统样式 黑色和白色 4 客户端的信息交流完全通过服务器传递完成 1 21 2 设计任务设计任务 完成一个网络五子棋对弈程序设计工作 根据自身多年来进行网络对弈的经验 以及了解 对网络五子棋 对弈的设计进行需求分析 根根设计目标以及需求分析对五子棋游戏 界面总体规划和设计 游戏界面设计好以后进行服务器端和客户端的 规划设计 最后进行棋盘以及棋子的设计 设计阶段要进行服务器端 框架设计与业务代码开发 客户端框架设计与业务代码的开发 棋子 以及棋盘类的设计开发 规则类的设计开发等 桂林电子科技大学课程设计说明书用纸 第 2 页 共 55 页 2 2 需求分析需求分析 2 12 1 系统需求系统需求 1 满足客户端连接到服务器的基本要求 2 服务器满足记录客户端游戏动作的基本要求 3 满足服务器实时获得客户端游戏状态的基本要求 2 22 2 用户需求用户需求 2 2 12 2 1 服务端需求服务端需求 1 可以有一个显示服务器状态的界面 用于记录各个客户端的连 接状态 服务器是用于连接各个客户端的通信 如果独立地创建一个 直观的服务器 将有力地显示客户端的每个状态 直观地向用户反应 各类信息 2 可以支持多人同时在线 一个服务器能够你能够接受来自其他 多个客户端的请求 提供相应的响应服务 是网络对弈的基本要求 3 可以显示在线用户的信息 显示在线用户的信息 比如主机名 IP 地址 以及连接断的状态 有利于用户随时监控客户端的通信状态 4 不允许玩家同名 不允许客户端同名即是不允许客户端的端口 号相同 如果相同 将会造成游戏登陆用户的管理混乱 5 服务器界面节约大方 服务器是用于监控客户端的连接情况 没用必要做得繁杂 用户只需要直观的状态显示 所以我们的服务器 不需要设计太多按钮 只需要有显示服务器状态 关闭服务器 清空 列表的按钮 方便用户操作 桂林电子科技大学课程设计说明书用纸 第 3 页 共 55 页 2 2 22 2 2 客户端需求客户端需求 1 能够通过主机 IP 及端口号登陆到服务器 2 可以显示当前所有用户 游戏客户端应设计一个可以显示当 前 所有在线用户的列表 有助于用户随意选择玩家挑战 3 可以从在线用户列表中选择玩家进行挑战 4 可以创建以及接受挑战 5 如果对方正在与其他玩家对弈 则应给出相应提示 6 五子棋规则一定要严密 其中五子棋游戏的规则如下 棋盘 棋子 a 棋盘为十五路 正中一点为 天元 周围四点为小星 b 棋子分黑白两色 黑子 113 枚 白子 112 枚 共 225 枚 比赛规则 a 黑先白后 从天元开始落子 然后执白棋的一方在黑棋周围的交 叉点上落子 白第二着棋应布在自己河界的一侧 此后 执黑方 在以天元为中心的 25 个交叉点的范围内布盘面的第三着棋 b 最先在横向 竖向 斜向形成连续的相同色五个棋子的一方为胜 c 黑棋禁手判负 白棋无禁手 黑棋禁手包括 三三 四四 长连 黑方只能 四三 胜 所谓禁手 是指黑方一子落下同时形成两个 或两个以上的活三 冲四及长连禁手 长连禁手是指黑方形成六 个或六个以上的连续棋子 d 双方均不能形成五连为和棋 e 对局中拔子 中途退场均判为负 f 五连与禁手同时形成 先五为胜 因黑方已形成五连 故禁手失 效 黑方胜 g 黑方禁手形成时 白方应立即指出禁手点 黑方即负 若白方继 续应子 则黑方禁手不成立 h 高段位职业比赛的特殊规定 三手可交换 黑下完第 手 执 白者可提出交换 即执白方变为执黑方 五手两打法 执黑下第 五手时 必须下两手棋 执白者从这两手棋中任选一步 i 本文所论述的联机五子棋系统就是依照这种方式进行的 桂林电子科技大学课程设计说明书用纸 第 4 页 共 55 页 2 2 32 2 3 技术上可行性分析技术上可行性分析 对需求分析阶段的结果进行总结 对软件的可行性分析如下 1 网络对弈需要两个客户端进行通信 而利用服务器的线程 开发 进行中间中介连接正好可以完成 2 五子棋的规则虽然严密 但是通过各种情况分析 然后将 每个情况分析设计出来 3 本系统的设计运行环境只用到 MyEclipse 的编程软件 无 需借用到其它的软件 比较容易实现 2 3 2 3 系统运行环境系统运行环境 系统运行环境 MyEclipse 6 6 3 3 总体设计总体设计 3 13 1 系统结构设计系统结构设计 该游戏主要分为服务器端与客户端两部分 服务器端的功能主要是建立与客户端的连接 监控客户端的连接 及断开的状态 接收客户端发送的信息以及向客户端发送信息 客户端的功能主要是连接服务器端 创建游戏用户 创建游戏 加入游戏 选择玩家挑战 向服务器发送信息 接收服务器端发送来 的信息 其具体的功能模块如图所示 桂林电子科技大学课程设计说明书用纸 第 5 页 共 55 页 网络五子 棋 服务器 端 客户端 启动服务器 维护在线用户 信息 接收客户端信息 向客户端发送信息 连接服务器 创建游戏 选择玩家挑战 向服务器发送信息 接收服务器传来的信息 3 23 2 服务器设计服务器设计 服务器的设计主要分为服务器主界面 服务器线程 服务器主机 面板三个部分 服务器主界面的设计主要包括界面大小 界面背景 界面上的按 钮 比如清空列表 服务器状态 关闭服务器的设计 以及启动对客 户端的监听 启动服务器线程 服务器线程的设计主要包括接受多个客户端的连接 接受客户端 信息 向客户端发送信息 服务器主机面板的设计主要包括客户端信息板的设计 包括板的 大小 背景颜色 其具体的功能模块如图所示 桂林电子科技大学课程设计说明书用纸 第 6 页 共 55 页 服务器端 服务器主界面 服务器线程 服务器主机面板 监听客户端 启动服务器线程 清空 显示 关闭 服务器信息 接收客户端信息 向客户端发送信息 信息板的显示 桂林电子科技大学课程设计说明书用纸 第 7 页 共 55 页 3 33 3 客户端设计客户端设计 客户端的设计主要分为客户端界面 客户端线程两部分 客户端界面的设计主要包括客户端界面大小 背景颜色 主要按 钮 创建游戏 加入游戏 连接到服务器 放弃游戏 退出游戏的设 计以及它们对应事件的处理 客户端线程的设计主要包括连接到服务器 向服务器发送信息 接受服务器信息的设计以及它们对应的事件处理 比如收到服务器发 送来的游戏胜利 信息错误 信息有效等的处理 其具体功能模块如 图所示 客户端 客户端界面 客户端线程 创建游戏 加入游戏 连接到游戏 连接到服务器 向服务器发送信息 放弃游戏 退出游戏 接收服务器信息 桂林电子科技大学课程设计说明书用纸 第 8 页 共 55 页 3 43 4 棋类设计棋类设计 五子棋类的设计主要分为棋盘 棋子 五子棋动作线程 规则四 部分 棋盘的设计主要包括画棋子 捕获下棋事件 画网络棋盘 棋子 的设计包括黑棋以及白旗的设计 其中有大小 颜色 所属棋盘的设 计 五子棋动作线程的设计包括处理捕获下棋信息 发送当前下棋信 息 这一部分的设计是五子棋类设计的重点 规则的设包括取得指定棋子的位置 判断当前棋子是否取得胜利 当前棋子各个方向的判断 当前所要下的棋子是否越界 五子棋 棋盘 棋子 画棋子 捕获下棋事件 黑棋 白棋 五子棋线程 画网络棋盘 处理捕获的下 棋信息 发送当前下棋信 息 规 则 方向判断 胜利判断 越界判断 桂林电子科技大学课程设计说明书用纸 第 9 页 共 55 页 4 4 详细设计详细设计 4 14 1 服务器服务器 4 1 14 1 1 服务器主类的设计开发服务器主类的设计开发 服务器主类即服务器端的运行类 用户通过运行该类进入服务器 的主界面 其中包括创建服务器端用到的控件以及声明用到的对象引 用 完成对控件的初始化 设置窗体的标题 图标 大小以及可见性 将各个控件添加到各面板的相应位置 FIRServer java 类 服务器界面类 public class FIRServer extends Frame implements ActionListener JButton clearMsgButton new JButton 清空列表 JButton serverStatusButton new JButton 服务器状态 JButton closeServerButton new JButton 关闭服务器 Panel buttonPanel new Panel ServerMsgPanel serverMsgPanel new ServerMsgPanel ServerSocket serverSocket Hashtable clientDataHash new Hashtable 50 将客户端套接口和输出 流绑定 Hashtable clientNameHash new Hashtable 50 将客户端套接口和客户 名绑定 Hashtable chessPeerHash new Hashtable 50 将游戏创建者和游戏加 入者绑定 public FIRServer super Java 五子棋服务器 setBackground Color LIGHT GRAY buttonPanel setLayout new FlowLayout 桂林电子科技大学课程设计说明书用纸 第 10 页 共 55 页 clearMsgButton setSize 60 25 buttonPanel add clearMsgButton clearMsgButton addActionListener this serverStatusButton setSize 75 25 buttonPanel add serverStatusButton serverStatusButton addActionListener this closeServerButton setSize 75 25 buttonPanel add closeServerButton closeServerButton addActionListener this add serverMsgPanel BorderLayout CENTER add buttonPanel BorderLayout SOUTH addWindowListener new WindowAdapter public void windowClosing WindowEvent e System exit 0 pack setVisible true setSize 400 400 setResizable false validate try createServer 4331 serverMsgPanel catch Exception e e printStackTrace 用指定端口和面板创建服务器 桂林电子科技大学课程设计说明书用纸 第 11 页 共 55 页 public void createServer int port ServerMsgPanel serverMsgPanel throws IOException Socket clientSocket 客户端套接口 long clientAccessNumber 1 连接到主机的客户数量 this serverMsgPanel serverMsgPanel 设定当前主机 try serverSocket new ServerSocket port serverMsgPanel msgTextArea setText 服务器启动于 InetAddress getLocalHost djr serverSocket getLocalPort n while true 监听客户端套接口的信息 clientSocket serverSocket accept serverMsgPanel msgTextArea append 已连接用户 clientSocket n 建立客户端输出流 DataOutputStream outputData new DataOutputStream clientSocket getOutputStream 将客户端套接口和输出流绑定 clientDataHash put clientSocket outputData 将客户端套接口和客户名绑定 clientNameHash put clientSocket 新玩家 clientAccessNumber 创建并运行服务器端线程 FIRServerThread thread new FIRServerThread clientSocket clientDataHash clientNameHash chessPeerHash serverMsgPanel thread start 桂林电子科技大学课程设计说明书用纸 第 12 页 共 55 页 catch IOException ex ex printStackTrace public void actionPerformed ActionEvent e if e getSource clearMsgButton 清空服务器信息 serverMsgPanel msgTextArea setText if e getSource serverStatusButton 显示服务器信息 try serverMsgPanel msgTextArea append 服务器信息 InetAddress getLocalHost serverSocket getLocalPort n catch Exception ee ee printStackTrace if e getSource closeServerButton 关闭服务器 System exit 0 public static void main String args FIRServer firServer new FIRServer 桂林电子科技大学课程设计说明书用纸 第 13 页 共 55 页 4 1 24 1 2 服务器线程的设计开发服务器线程的设计开发 服务器线程是服务器启动后创建并启动的第一个线程 该线程主 要用于接收客户端的连接 并未每个连接分配一个服务器代理线程 服务器代理线程主要用于接收客户端传来的消息 并将该消息转发给 另一个客户端 服务器为所有客户端都分配了一个该类线程实例 单 独为特定客户端进行服务 同时每一个服务器代理线程都有能唯一标 识的名称 FIRServerThead java 类 public class FIRServerThread extends Thread Socket clientSocket 保存客户端套接口信息 Hashtable clientDataHash 保存客户端端口与输出流对应的 Hash Hashtable clientNameHash 保存客户端套接口和客户名对应的 Hash Hashtable chessPeerHash 保存游戏创建者和游戏加入者对应的 Hash ServerMsgPanel serverMsgPanel boolean isClientClosed false public FIRServerThread Socket clientSocket Hashtable clientDataHash Hashtable clientNameHash Hashtable chessPeerHash ServerMsgPanel server this clientSocket clientSocket this clientDataHash clientDataHash this clientNameHash clientNameHash this chessPeerHash chessPeerHash this serverMsgPanel server public void dealWithMsg String msgReceived String clientName String peerName if msgReceived startsWith 桂林电子科技大学课程设计说明书用纸 第 14 页 共 55 页 if msgReceived equals list 收到的信息为更新用户列表 Feedback getUserList else if msgReceived startsWith creatgame inchess 收到的信息为创建游戏 String gameCreaterName msgReceived substring 20 取 得服务器名 synchronized clientNameHash 将用户端口放到用户列表中 clientNameHash put clientSocket msgReceived substring 11 synchronized chessPeerHash 将主机设置为等待状态 chessPeerHash put gameCreaterName wait Feedback yourname clientNameHash get clientSocket sendGamePeerMsg gameCreaterName OK sendPublicMsg getUserList else if msgReceived startsWith joingame 收到的信息为加入游戏时 StringTokenizer userTokens new StringTokenizer msgReceived String userToken String gameCreatorName String gamePaticipantName String playerNames 0 0 int nameIndex 0 while userTokens hasMoreTokens userToken String userTokens nextToken if nameIndex 1 serverMsgPanel msgTextArea append msgReceived n sendPublicMsg msgReceived serverMsgPanel msgTextArea setCaretPosition serverMsgPanel msgTextAr ea getText length 发送公开信息 public void sendPublicMsg String publicMsg 桂林电子科技大学课程设计说明书用纸 第 18 页 共 55 页 synchronized clientDataHash for Enumeration enu clientDataHash elements enu hasMoreElements DataOutputStream outputData DataOutputStream enu nextElement try outputData writeUTF publicMsg catch IOException es es printStackTrace 发送信息给指定的游戏中的用户 public boolean sendGamePeerMsg String gamePeerTarget String gamePeerMsg for Enumeration enu clientDataHash keys enu hasMoreElements 遍历以取得游戏中的用户的套接口 Socket userClient Socket enu nextElement if gamePeerTarget equals String clientNameHash get userClient try 发送信息 peerOutData writeUTF gamePeerMsg catch IOException es es printStackTrace return false return true 发送反馈信息给连接到主机的人 public void Feedback String feedBackMsg synchronized clientDataHash DataOutputStream outputData DataOutputStream clientDataHash get clientSocket try outputData writeUTF feedBackMsg catch Exception eb eb printStackTrace 桂林电子科技大学课程设计说明书用纸 第 20 页 共 55 页 取得用户列表 public String getUserList String userList userlist for Enumeration enu clientNameHash elements enu hasMoreElements userList userList String enu nextElement return userList 根据 value 值从 Hashtable 中取得相应的 key public Object getHashKey Hashtable targetHash Object hashValue Object hashKey for Enumeration enu targetHash keys enu hasMoreElements hashKey Object enu nextElement if hashValue equals Object targetHash get hashKey return hashKey return null 刚连接到主机时执行的方法 public void sendInitMsg sendPublicMsg getUserList Feedback yourname String clientNameHash get clientSocket Feedback Java 五子棋客户端 Feedback list 更新用户列表 Feedback 私聊 桂林电子科技大学课程设计说明书用纸 第 21 页 共 55 页 Feedback 注意 命令必须对所有用户发送 public void closeClient serverMsgPanel msgTextArea append 用户断开连接 clientSocket n synchronized chessPeerHash 如果是游戏客户端主机 if chessPeerHash containsKey clientNameHash get clientSocket chessPeerHash remove String clientNameHash get clientSocket if chessPeerHash containsValue clientNameHash get clientSocket chessPeerHash put String getHashKey chessPeerHash String clientNameHash get clientSocket tobeclosed synchronized clientDataHash 删除客户数据 clientDataHash remove clientSocket synchronized clientNameHash 删除客户数据 clientNameHash remove clientSocket sendPublicMsg getUserList serverMsgPanel statusLabel setText 当前连接数 clientDataHash size try 桂林电子科技大学课程设计说明书用纸 第 22 页 共 55 页 clientSocket close catch IOException exx exx printStackTrace isClientClosed true public void run DataInputStream inputData synchronized clientDataHash serverMsgPanel statusLabel setText 当前连接数 clientDataHash size try 等待连接到主机的信息 inputData new DataInputStream clientSocket getInputStream sendInitMsg while true String message inputData readUTF dealWithMsg message catch IOException esx finally if isClientClosed closeClient 桂林电子科技大学课程设计说明书用纸 第 23 页 共 55 页 4 24 2 客户端客户端 客户端主类即客户端的运行类 用户通过运行该类连接服务器 也是通过在该类的窗体中与其他玩家对弈 FIRClientThread java 类 public class FIRClientThread extends Thread public FIRClient firClient public FIRClientThread FIRClient firClient this firClient firClient public void dealWithMsg String msgReceived if msgReceived startsWith userlist 若取得的信息为用户列表 StringTokenizer userToken new StringTokenizer msgReceived int userNumber 0 清空客户端用户列表 firClient userListPad userList removeAll 清空客户端用户下拉框 firClient userInputPad userChoice removeAll 给客户端用户下拉框添加一个选项 firClient userInputPad userChoice addItem 所有用户 while userToken hasMoreTokens 当收到的用户信息列表中存在数据时 String user String userToken nextToken 取得 用户信息 if userNumber 0 将用户信 息添加到用户列表中 firClient userInputPad userChoice addItem user 将用户信息添加到用户下拉框中 userNumber firClient userInputPad userChoice setSelectedIndex 0 下 拉框默认选中所有人 else if msgReceived startsWith yourname 收到的信息为用户本名时 firClient chessClientName msgReceived substring 10 取 得用户本名 firClient setTitle Java 五子棋客户端 用户名 firClient chessClientName 设置程序 Frame 的标 题 else if msgReceived equals reject 收到的信息为拒绝用户时 try firClient firPad statusText setText 不能加入游戏 firClient userControlPad cancelButton setEnabled false firClient userControlPad joinButton setEnabled true firClient userControlPad createButton setEnabled true catch Exception ef firClient userChatPad chatTextArea setText Cannot close firClient userControlPad joinButton setEnabled true else if msgReceived startsWith peer 收到信息为游戏中的等待时 桂林电子科技大学课程设计说明书用纸 第 25 页 共 55 页 firClient firPad chessPeerName msgReceived substring 6 if firClient isCreator 若用户为游戏建立者 firClient firPad chessColor 1 设定其为黑棋先行 firClient firPad isMouseEnabled true firClient firPad statusText setText 黑方下 else if firClient isParticipant 若用户为游戏加入者 firClient firPad chessColor 1 设定其为白棋后性 firClient firPad statusText setText 游戏加入 等待对手 else if msgReceived equals youwin 收到信息为胜利信息 firClient isOnChess false firClient firPad setVicStatus firClient firPad chessColor firClient firPad statusText setText 对手退出 firClient firPad isMouseEnabled false else if msgReceived equals OK 收到信息为成功创建游戏 firClient firPad statusText setText 游戏创建等待对手 else if msgReceived equals error 收到信息错误 firClient userChatPad chatTextArea append 错误 退出程序 n else firClient userChatPad chatTextArea append msgReceived n firClient userChatPad chatTextArea setCaretPosition 桂林电子科技大学课程设计说明书用纸 第 26 页 共 55 页 firClient userChatPad chatTextArea getText length public void run String message try while true 等待聊天信息 进入 wait 状态 message firClient inputStream readUTF dealWithMsg message catch IOException es 4 34 3 棋盘以及规则棋盘以及规则 FIRPad java 类 public class FIRPad extends Panel implements MouseListener ActionListener 鼠标是否能使用 public boolean isMouseEnabled false 是否胜利 public boolean isWinned false 是否在下棋中 public boolean isGaming false 棋子的 x 轴坐标位 public int chessX POS 1 棋子的 y 轴坐标位 public int chessY POS 1 桂林电子科技大学课程设计说明书用纸 第 27 页 共 55 页 棋子的颜色 public int chessColor 1 黑棋 x 轴坐标位数组 public int chessBlack XPOS new int 200 黑棋 y 轴坐标位数组 public int chessBlack YPOS new int 200 白棋 x 轴坐标位数组 public int chessWhite XPOS new int 200 白棋 y 轴坐标位数组 public int chessWhite YPOS new int 200 黑棋数量 public int chessBlackCount 0 白棋数量 public int chessWhiteCount 0 黑棋获胜次数 public int chessBlackVicTimes 0 白棋获胜次数 public int chessWhiteVicTimes 0 套接口 public Socket chessSocket public DataInputStream inputData public DataOutputStream outputData public String chessSelfName null public String chessPeerName null public String host null public int port 4331 public TextField statusText new TextField 请连接服务器 public FIRThread firThread new FIRThread this public FIRPad setSize 500 500 setLayout null setBackground Color ORANGE addMouseListener this add statusText 桂林电子科技大学课程设计说明书用纸 第 28 页 共 55 页 statusText setBounds new Rectangle 40 5 360 24 statusText setEditable false 连接到主机 public boolean connectServer String ServerIP int ServerPort throws Exception try 取得主机端口 chessSocket new Socket ServerIP ServerPort 取得输入流 inputData new DataInputStream chessSocket getInputStream 取得输出流 outputData new DataOutputStream chessSocket getOutputStream firThread start return true catch IOException ex statusText setText 连接失败 n return false 设定胜利时的棋盘状态 public void setVicStatus int vicChessColor 清空棋盘 this removeAll 将黑棋的位置设置到零点 for int i 0 i chessBlackCount i 桂林电子科技大学课程设计说明书用纸 第 29 页 共 55 页 chessBlack XPOS i 0 chessBlack YPOS i 0 将白棋的位置设置到零点 for int i 0 i chessWhiteCount i chessWhite XPOS i 0 chessWhite YPOS i 0 清空棋盘上的黑棋数 chessBlackCount 0 清空棋盘上的白棋数 chessWhiteCount 0 add statusText statusText setBounds 40 5 360 24 if vicChessColor 1 黑棋胜 chessBlackVicTimes statusText setText 黑方胜 黑 白 chessBlackVicTimes chessWhiteVicTimes 游戏重启 等待白方 else if vicChessColor 1 白棋胜 chessWhiteVicTimes statusText setText 白方胜 黑 白 chessBlackVicTimes chessWhiteVicTimes 游戏重启 等待黑方 取得指定棋子的位置 public void setLocation int xPos int yPos int chessColor if chessColor 1 棋子为黑棋时 桂林电子科技大学课程设计说明书用纸 第 30 页 共 55 页 chessBlack XPOS chessBlackCount xPos 20 chessBlack YPOS chessBlackCount yPos 20 chessBlackCount else if chessColor 1 棋子为白棋时 chessWhite XPOS chessWhiteCount xPos 20 chessWhite YPOS chessWhiteCount yPos 20 chessWhiteCount 判断当前状态是否为胜利状态 public boolean checkVicStatus int xPos int yPos int chessColor int chessLinkedCount 1 连接棋子数 int chessLinkedCompare 1 用于比较是否要继续遍历一个棋子的 相邻网格 int chessToCompareIndex 0 要比较的棋子在数组中的索引位置 int closeGrid 1 相邻网格的位置 if chessColor 1 黑棋时 chessLinkedCount 1 将该棋子自身算入的话 初始连接数为 1 以下每对 for 循环语句为一组 因为下期的位置能位于中间而非两 端 for closeGrid 1 closeGrid 4 closeGrid 遍历相邻 4 个网格 for chessToCompareIndex 0 chessToCompareIndex chessBlackCount chessToCompareIndex 遍历棋盘上所有黑棋子 if xPos closeGrid 20 chessBlack XPOS chessToCompareIndex 连 桂林电子科技大学课程设计说明书用纸 第 31 页 共 55 页 接数加 1 if chessLinkedCount 5 五子相连时 胜利 return true if chessLinkedCount chessLinkedCompare 1 chessLinkedCompare else 若中间有一个棋子非黑棋 则会进入此分支 此时无 需再遍历 break for closeGrid 1 closeGrid 4 closeGrid for chessToCompareIndex 0 chessToCompareIndex chessBlackCount chessToCompareIndex if xPos closeGrid 20 chessBlack XPOS chessToCompareIndex if chessLinkedCount 5 return true if chessLinkedCount chessLinkedCompare 1 chessLinkedCompare else 桂林电子科技大学课程设计说明书用纸 第 32 页 共 55 页 break 进入新的一组 for 循环时要将连接数等重置 chessLinkedCount 1 chessLinkedCompare 1 for closeGrid 1 closeGrid 4 closeGrid for chessToCompareIndex 0 chessToCompareIndex chessBlackCount chessToCompareIndex if xPos 20 chessBlack XPOS chessToCompareIndex if chessLinkedCount 5 return true if chessLinkedCount chessLinkedCompare 1 chessLinkedCompare else break for closeGrid 1 closeGrid 4 closeGrid for chessToCompareIndex 0 chessToCompareIndex chessBlackCount chessToCompareIndex if xPos 20 桂林电子科

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论