五子棋设计与实现毕业设计(编辑修改稿)内容摘要:
的方法很直接——先判断棋子颜色,再逐个方向去判断,在每个方向进行判定时又分为正方向和负方向,对每一方向的判断都很类似,如以下代码片段用于判断黑子竖直方向的连子个数: ////////////////////////////// // 以下两个大的循环判断竖直方向棋子连接总数 ////////////////////////////// // 向下的方向连子个数 for (step = 1。 step = 4。 step++) { // 下层循环判断竖直向下第step个位置是否有白子 for (chessCompare = 0。 chessCompare = chessBlackCount。 chessCompare++) { // 如果有黑子 if (((a + step) * 20 == chessBlack_x[chessCompare]) amp。 amp。 ((b * 20) == chessBlack_y[chessCompare])) { chessLink = chessLink + 1。 if (chessLink == 5) { return (true)。 } } } if (chessLink == (chessLinkTest + 1))// 竖直向下还有黑色棋子 chessLinkTest++。 else break。 } //向上的连子个数 for (step = 1。 step = 4。 step++) { //下层循环判断竖直向上第step个位置是否有黑子 for (chessCompare = 0。 chessCompare = chessBlackCount。 chessCompare++) { //如果有黑子(其实这里可以break出来) if (((a step) * 20 == chessBlack_x[chessCompare]) amp。 amp。 (b * 20 == chessBlack_y[chessCompare])) { chessLink++。 if (chessLink == 5) { return (true)。 } } } //如果下个位置还有黑色棋子(可以换用标志符判断) if (chessLink == (chessLinkTest + 1)) chessLinkTest++。 else //如果没有,则终止,退出循环 break。 } 程序总体设计程序使用Socket 技术[8]以及java 多线程机制结合在进行客户与服务端之间信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程序之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议的完善决定程序是否能够正常运行。 所谓协议就是程序之间交互的信息的格式规定, 服务端和客户端都遵循该协议才能够进行对话, 通俗讲是人类之间的语言。 一、服务端接受的信息:(1)客户端连接信息,一个客户包含两个Socket 连接, 一个为chatSocket,另一个为chessSocket;(2)客户端创建游戏信息;(3)客户端加入游戏信息; (4)下棋信息;(5)放弃游戏信息;(6)公聊和私聊信息;(7)用户列表信息。 服务端发送的信息:服务端接受到客户端发送的各种信息,会做出不同响应, 并发送相应的信息对客户端进行响应或转发相应的信息给对手,并对服务端上存储的全局信息进行更新,服务端可能发送的信息包括:(1)所有用户列表;(2)服务端为该客户生成的客户名; (3)用户游戏创建成功信息;(4)加入游戏成功后,分别向游戏双方发送对手信息;(5)加入游戏拒绝信息;(6)游戏进行信息;(7)游戏胜利信息;(8)公聊和私聊信息。 三、客户端接受的信息:(1)用户列表信息;(2)游戏加入拒绝信息;(3)对手信息;(4)胜利信息;(5)创建成功信息;(6)错误信息;(7)聊天信息。 四、客户端发送的信息:(1)连接服务器;(2)创建游戏信息;(3)加入游戏信息;(4)放弃游戏;(5)公聊信息或私聊信息。 ServerClientClient客户端服务器客户端图31服务器新来客5新来客6新来客3新来客4新来客1新来客2聊天,玩游戏图324 详细设计 客户端程序实现客户端(Client)除了实现网络通信以外,还要实现游戏的一些基本功能,如规则制定、整个界面的布局、动画的实现等。 客户端界面如图41所示,由控制面板、游戏面板、用户面板、聊天面板以及聊天信息面板5个部分组成。 控制面板 用户面板 游戏面板 聊天信息面板 聊天面板 图41 客户端界面客户端实现的难点主要在于棋盘面板类和客户端主类,棋盘面板类实现了棋盘的绘制、鼠标事件的监听、落子的处理、胜负的判断等;客户端主类统筹全局,用于对连接、创建游戏等事件进行处理,同时实现与服务器的聊天、命令通信等。 棋盘面板类实现(1) 连接服务器connectServer方法负责连接至指定IP和端口号的服务器、初始化Socket、获取输入输出流。 connectServer的源代码如下: public boolean connectServer(String serverIP, int serverPort) throws Exception { try { // (in chessClientconnectServer)。 //建立聊天socket chatSocket = new Socket(serverIP, serverPort)。 //由socket得到输入输出流. in = new DataInputStream(())。 out = new DataOutputStream(())。 //创建线程 clientThread clientthread = new clientThread(this)。 ()。 isOnChat = true。 return true。 } catch (IOException ex) {//连接不成功 (chessClient:connectServer:无法连接,建议重新启动程序 \n)。 } return false。 } 其中的chessthread是chessThread类的对象,内部保存有对chessPad的引用,负责监听端口,随时接收服务器端发来的消息,并调用chessPad的相应方法进行处理。 (2)绘制棋盘 Paint方法用于棋盘的绘制,它可以有效地进行重绘,否则当棋盘被遮挡再呈现时将不能得到重绘而出现残缺。 棋盘绘制很简单,只需在相应位置上绘制相应数量的横线和纵线,最后加上棋盘的5个基准点即可。 代码如下: public void paint(Graphics g) { //棋盘的方格线 for (int i = 40。 i = 380。 i = i + 20) { (40, i, 400, i)。 } (40, 400, 400, 400)。 for (int j = 40。 j = 380。 j = j + 20) { (j, 40, j, 400)。 } (400, 40, 400, 400)。 //五个基准点 (97, 97, 6, 6)。 (337, 97, 6, 6)。 (97, 337, 6, 6)。 (337, 337, 6, 6)。 (217, 217, 6, 6)。 }(3)放置棋子放置棋子就是在Panel上的适当位置添加黑色或白色棋子,需要注意的是,每次落子后还要进行记录落子位置和颜色、胜负判定、向服务器发送落子消息、修改相应状态信息等操作。 chessPaint方法可完成以上功能,其代码如下: public void chessPaint(int chessPoint_a, int chessPoint_b, int color) { chessPoint_black chesspoint_black = new chessPoint_black(this)。 chessPoint_white chesspoint_white = new chessPoint_white(this)。 if (color == 1 amp。 amp。 isMouseEnabled) { // 当黑子落子时,记下此子的位置 getLocation(chessPoint_a, chessPoint_b, color)。 // 判断是否获胜 isWin = checkWin(chessPoint_a, chessPoint_b, color)。 if (isWin == false) { // 如果没有获胜,向对方发送落子信息,并绘制棋子 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 (chesspoint_black)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 // 在状态文本框显示行棋信息 (黑(第 + chessBlackCount + 步) + chessPoint_a + + chessPoint_b + ,请白棋下子)。 isMouseEnabled = false。 } else { // 如果获胜,直接调用chessVictory完成后续工作 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 (chesspoint_black)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 chessVictory(1)。 isMouseEnabled = false。五子棋设计与实现毕业设计(编辑修改稿)
相关推荐
在装修阶段,为此我方在结构施工阶段就必须配合建设单位将装饰、装修的做法、材料等提前确定;需外委加工的设备材料提前定货,最大限度减少因人为因素造 成的工期延误。 F、充分发挥广大职工的积极性,开展劳动竞赛,对完成计划好的予以表扬和奖励,对完成差的予以批评和处罚。 G、工序管理,为最大限度的挖掘关键线路的潜力,各工序施工时间尽量压缩。 结构施工阶段水电埋管、留洞随时插入不占用工序时间, 模板不周转
召开现场工作会议。 在会上,对工程进度,质量存在的问题、资金情况进行研究讨论,解决施工中存在的问题。 10)加强检查: 定期召开会议,对当时的施工进度作出正确的认识,分析工期滞后的原因(或超前的经验),并采取有效的措施保证工期。 确保工期的技术组织措施 1) .加强施工组织与协调管理 A、为保证计划完成,我单位将选派施工经验丰富、能吃苦耐劳的一级项目经理担任该工程的项目经理
式控制器因其体积小、可靠性高、功能强、灵活方便等优点,其应用己经深入到现代社会人们日常生活等各个领域,对各行各业的技术改造、产品更新换代、加速自动化进程、提高生产率等方面起到了极其重要的推动作用。 嵌入式系统的现状和发展趋势 嵌入式系统正处于一个飞速发展激烈竞争的时代。 在未来的几年里,这种发展 和竞争将达到一个白热化的程度。 就嵌入式系统的技术和市场来说,国外发展速度极快,技术日趋成熟
称 规格型号 单 位 数 量 备 注 1 全站仪 台 1 2 水准仪 台 1 莱卡 带塔尺 3 水准仪 台 2 索佳 带塔尺 4 压力试验机 20xx 型 台 1 5 万能压力机 台 1 6 压力机试验机 300KN 台 1 7 砼抗压试模 153cm 组 30 8 压碎指标仪 3000g 个 1 9 标准击 实仪 GBJ42388 套 2 重型 I、 II 各 1 套 10 灌砂筒 ф
埋藏深,水质较差 ,不能作为施工运水。 工程施工受施工用水的影响,施工期短,时间集中,施工任务大,砼预制、浇筑、土方填筑等工程应安排在兴电上水期进行,其它土石方工程随施工条件随时进行。 施工方法和施工计划 该工程为渠道衬砌项目,渠道衬砌及渠系建筑物等须有资质的水利建筑施工单位施工,土方工程采用人工开挖,人工夯填。 石方工程采用机械拌合砂浆,人工砌筑的方法施工。 砼工程采用 机械拌合,架子车运输
造成的事故责任所发生的费用。 我 项目部 将对本工程进行项目管理,争创优 良 工地。 十四 安全施工保证措施 安全施工保证措施 安全生产对施工企业十分重要,只有安全生产上去了,才能抓好进度,提高质量,因此一个企业安全生产 制度是否齐全,安全管理是否可靠,直接影响到企业形象。 为了确保整个工程顺利而安全得完成,工程施工达到无重大伤亡事故发生,且轻伤频率控制在 %的目标以内。 本工程施工工种较多