JAVA专业课程设计五子棋.doc
《JAVA专业课程设计五子棋.doc》由会员分享,可在线阅读,更多相关《JAVA专业课程设计五子棋.doc(16页珍藏版)》请在咨信网上搜索。
辽 宁 工 业 大 学 JAVA程序设计 课程设计(论文) 题目: 五子棋 院(系): 软件学院 专业班级: 软件工程 学 号: 学生姓名: 指导老师: 王彦华 老师职称: 讲 师 起止时间: .6.18至.7.1 程序设计专题(汇报)任务及评语 院(系):软件学院 教研室:软件教研室 学 号 学生姓名 专业班级 软件工程 程序设计(汇报)题目 五子棋 程序设计(汇报)任务 程序设计专题任务和要求: (1)掌握Java编程、面向对象基础知识。 (2)较熟练地编写Java应用程序Application。 (3)了解Java常见标准类库、编程技巧、异常处理。 (5)联络已学过内容,巩固所学理论,增强独立工作能力。 (6)经过设计关键使学生有一个独立编写程序过程,对理论学习及动手能力全部有一个很大提升。 (7)经过此次设计,深入培养学生热爱专业思想,同时对本专业综合素质提升起一个主动推进作用。 课程设计过程中,要严格遵守实践步骤时间安排,听从指导老师指导。正确地完成上述内容,统计实习日志,规范完整地撰写出课程设计汇报。 指导老师评语及成绩 成绩: 指导老师签字: 年 7 月 5 日 目 录 第1章 课程设计目标和要求 0 1.1 课程设计目标 0 1.2 课程设计试验环境 1 1.3 课程设计预备知识 1 1.4 课程设计要求 1 第2章 课程设计内容 1 2.1课程设计关键内容 1 2.2概要设计 2 2.2.1需求分析 2 2.2.2概念设计 2 2.2.4 自定义类说明 2 2.3具体设计 4 2.3.1系统功效模块图 4 2.3.2系统步骤图 5 2.3.3代码实现 5 2.4测试分析 12 2.4.1程序运行情况 12 2.4.2程序异常处理 13 第3章 课程设计总结 14 参考资料 15 第1章 课程设计目标和要求 1.1 课程设计目标 《JAVA程序设计》是计算机相关专业必修专业基础课程,其实践性、应用性很强。实践教学步骤是必不可少一个关键步骤。本课程程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行一次全方面综合训练,JAVA程序设计设计目标是加深对理论教学内容了解和掌握,使学生较系统地掌握程序设计及其在网络开发中广泛应用,基础方法及技巧,为学生综合利用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 1.2 课程设计试验环境 硬件要求能运行Windows 9.X操作系统微机系统。JAVA程序设计语言及对应集成开发环境,J2SDK和ECLIPSE开发工具。 1.3 课程设计预备知识 熟悉JAVA语言及ECLIPSE开发工具。 1.4 课程设计要求 按课程设计指导书提供课题,要求学生在自行完成各个操作步骤,并能实现且达成举一反三目标,完成一个项目处理一类问题。要求学生能够全方面、深入了解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够很好地了解和掌握,能够进行简单分析和判定;能编写出含有良好风格程序;掌握JAVA程序设计基础技能和面向对象概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、处理问题能力;培养学生进行设计分析、设计方法、设计操作和测试、设计过程观察、了解和归纳能力提升。 第2章 课程设计内容 2.1课程设计关键内容 五子棋是起源于中国古代传统黑白棋种之一。五子棋不仅能增强思维能力,提升智力,而且富含哲理,有利于修身养性。 经过一个学期学习,使我对Java有了一定了解。但要深入了解Java语言,单靠上课是不够。必需经过课程设计,设计一个比较大程序,才能更深一步地了解Java语言。在这次课程中,我选择了网络五子棋作为课题。编写网络五子棋游戏要利用到Socket网络编程技术和多线程。经过这次课程设计,熟悉JavaGUI图形界面设计,网络Socket 编程和多线程编程。 2.2概要设计 2.2.1需求分析 本系统关键是完成五子棋游戏基础操作,在玩游戏过程中玩家能够放松心情得到娱乐。本系统需要满足以下要求: 本程序实现了一个小五子棋游戏,能够实现两个人在用一台机器上进行游戏。程序会自动判定谁输谁赢,在游戏开始,第一个人能够选择执白棋还是黑棋,以后点击开始进行游戏。 2.2.2概念设计 网络五子棋是采取网络协议为TCP/IP网上对弈游戏,利用“用户端-服务器“(c/s)网络架构模式。实现用户经过Internt连接在任何地方和不一样玩家进行对战。服务器能够创建任意多局游戏。 经过使用多线程和网络套接字SOCKET来实现游戏之间通讯,它是基于点对点通讯。开始让服务器初始化建立服务器套接字SOCKET,基于某个端口PORT,服务器一直处于监听状态。用户端是动作提议者,何时发出申请由用户端决定。用户端向服务器发出申请,服务器给响应。打开用户端套接字SOCKET,连接到服务器端地址ADDRESS和端口PORT。连接建立后,创建一个SOCKET实例,并开始一个线程,监听该用户端请求。服务器继续监听其它用户连接。服务器经过数据输入流从用户端接收信息,而且经过数据输出流把对应信息发送给用户端。用户端发送请求和响应接收到多种信息。 在服务器和用户端之间传输消息格式是采取“[消息类别]+内容“组成,服务器和用户端在传输消息过程,依据消息类别来进行相关操作。 2.2.3 自定义类说明 WuZiQi类: 属性:int color_QiZi=0 黑字0 白字1 Int ChessBody[][]=new int[7][17]; 无棋子0,黑棋1,白棋2; Int GameStart=0; JButton start,exit,rest; JButton check[]=new JButton[3]’ String chess[]={"黑方","白方","旁观"}; 方法:获取下棋点位 Public void mouseClicked(MouseEvent e){ Int x,y; X=e.getX();y=e.getY(); //鼠标点击位置 If(x<45||y<45||x>495||y>495) {return;} //在棋盘之外则不下 If(x%30>15)//获取下棋点位置 {x+=30;} If(y%30>15) {y+=30;} ChatServer 类: 属性: Vector threads 向量存放线程 Socket socket 服务端口 DataInputStream in 输入流 DataOutputStream out 输出流 int nid 用户ID 方法: 结构器public ServerThread(Socket socket,Vector threads) 实现信息输入、输出 实现public void run()监听用户端是否发信息过来,当用户离开时向 其它用户发信息,把用户端信息发给其它用户。 服务器向用户端发信息public void write(String msg) 获取线程IDpublic int getID() 设置线程IDpublic void setID(int nid) 在Chatserver类内调用ServerThread 实现对全部来访用户监听,为来访者设置ID,若有离开用户,则在聊天板块广播。 监听器: 对角色选择按钮注册ActionListener监听,设置用户角色。定义黑子int类型 0,白子1。 对按钮开始、重置注册ActionListener监听,假如点击开始,用户进 入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新一轮。 对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋位置。 对JTextField注册ActionListener,用户输入聊天信息后,经过Server传输给其它用户,在对话框JTextArea内显示。 2.3具体设计 2.3.1系统功效模块图 Init()方法 Paint()方法 Run()方法 注册监听 WuZiQi类 图2-1 功效模块图 2.3.2系统步骤图 图2-2 用户端系统步骤图 2.3.3代码实现 下棋点击后天上棋子,每一步完了后判定胜败,从四个方向上判定胜败,并在棋盘中间显示哪方赢了! public void PlayQizi(int x,int y){ if (GameStart==0) //判定游戏未开始 { return; } if (ChessBody[x/30][y/30]!=0) {return;} Graphics g=getGraphics(); if (color_Qizi==1)//判定黑子还是白子 {g.setColor(Color.black); color_Qizi=0; } else {g.setColor(Color.white); color_Qizi=1; } g.fillOval(x-12,y-12,24,24); ChessBody[x/30][y/30]=color_Qizi+1; /////判定输赢////////// g.setColor(Color.magenta); g.setFont(new Font("fhahf ",Font.BOLD,30)); if(GameWin横(x/30,y/30)){ g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0; } if(GameWin竖(x/30,y/30)){ g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0; } if(GameWin撇(x/30,y/30)){ g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;} if(GameWin捺(x/30,y/30)){ g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;}} ChatSever类: public void run(){ System.out.println ("Thread is running"); try{ //监听用户端是否发消息过来 while(true){ String receive = in.readUTF(); if(receive == null) return; //当某用户离开,给其它用户端发消息 if(receive.equals("leave")){ for(int i=0;i < threads.size();i++){ ServerThread st = (ServerThread)threads.elementAt(i); st.write("***"+getID()+"leaving...***"); } }else{ //把某用户端发过来发送到全部用户端 for(int i=0;i < threads.size();i++){ ServerThread st = (ServerThread)threads.elementAt(i); st.write("<"+getID()+">: "+receive);} 初始化网络,并连接到服务端 try { //取得URL URL url = this.getCodeBase(); InetAddress addr = InetAddress.getByName(url.getHost()); Socket socket; System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());//5555 为服务器端口 socket = new Socket(addr,5555); //由本套接口取得输入,输出流 in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); }catch (Exception ex) {ex.printStackTrace(); } 线程开始new Thread(this).start(); Run方法向服务器发送信息并接收信息 public void run() { try {//监视服务器所发送信息 while(true) { String receive = in.readUTF(); if(receive!=null){ txtDisplay.append(receive + "\n"); //将光标移动到最终一个以实现滚动条自动置底 txtDisplay.setCaretPosition(txtDisplay.getText().length()); } } }catch (Exception ex) { txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false);} } public void stop() { try { out.writeUTF("leave"); }catch(Exception ex){} } 2.4测试分析 2.4.1程序运行情况 图2-3 棋盘图 当选择好黑白角色后点击开始,便能够下棋;点击重置时重新开始下棋;点击退出时结束游戏,并退出。 该棋盘未实现网络棋盘,只能自己跟自己下棋。还欠缺悔棋步骤,能够用Vector存放已下棋子信息,调用repaiant() 然后再画除最终一步棋盘,实现悔棋操作。因为对Socket 使用方法还不熟悉,不能将棋盘通信和聊天通信区分开来,也就不能实现联网下棋。 图2-4 ChatServer 假如用户登录则监听 listening ......、accept a client使用了Socket,和多线程技术。定义了Vector 存放用户线程,实现ChatServer将信息传输给每个用户,接收每个用户信息。 图2-5聊天对话框 用户4、5进入了聊天,对话。当对话框缩小或关闭时ChatServer全部会发出用户离开消息。此对话框能够允很多个用户群聊,不过少了一个窗口显示全部在线用户信息。即要求五,增强功效未实现。不能实现用户注册,添加好友,查看好有信息,对于数据库使用不太熟悉。 2.4.2程序异常处理 Java异常是面向对象。一个JavaException是一个描述异常情况对象.当出现异常情况时,一个Exception对象就产生了,并放到异常组员函数里。 Java异常处理是经过5个关键词来实现:try,catch,throw,throws和finally。在Java语言错误处理结构由try,catch,finally三个块组成。其中try块存放将可能发生异常Java语言,并管理相关异常指针;catch块紧跟在try块后面,用来激发被捕捉异常;finally块包含清除程序没有释放资源,句柄等。不管try块中代码怎样退出,全部将实施finally块。 try {//监视服务器所发送信息 while(true) { String receive = in.readUTF(); if(receive!=null){ txtDisplay.append(receive + "\n"); //将光标移动到最终一个以实现滚动条自动置底 txtDisplay.setCaretPosition(txtDisplay.getText().length()); } } catch (Exception ex) { txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false);} } 第3章 课程设计总结 经过为期二周课程设计,感觉自己所学远远不能处理做课设时需求。在熟悉书本和上网搜索后,才算马马虎虎完成了任务。 在画棋盘时,调用draw方法对于画图这块坐标部署,在以后学画其它图画时能够得心应手。获取棋子方法巧妙,注册鼠标,获取点击位置,除以棋盘间隔,去掉不为整数一块,再乘以棋盘间隔便取得最临近点下棋坐标,即所要下棋位置。用二维数组模拟棋盘,无棋子置为0,黑子置为1,白子置为2,方便在判定胜败时利于同色棋子查找。整个棋盘就模拟出来了,很巧妙,不过有愈加好方法用向量存放棋子信息,便于悔棋等操作。 实现多用户聊天,老师后面讲不是很多,做起来有点费力。参考网上资料,明白Socket原理。开始时照着书本上例子,不能得出想要效果,而且只运行了一个程序看不到有通信效果。后面在运行了Server类后,自己尝试着两个Client类,实现了通话,就像腾讯QQ里面一样效果。里面定义了Vector 线程,实现了多线程使用方法。 两个板块大致实现,不过后面要求五,因为数据库使用不是太熟悉,不能注册用户,添加好友,查找好友,还有悔棋操作未能实现。此程序最大缺点还在于,不能实现网络两人下五子棋。因为不能将棋盘信息和聊天信息区分,不能告诉对反自己下了哪一步,所以依据自己水平也就能做到这了,以后加以完善。 参考资料 1.孙卫琴 Java面向对象教程 电子工业出版社 -03 2.孙卫琴 Java网络编程精解 电子工业出版社 -03 3.张仕斌 Java程序设计和应用 清华大学出版社 -06 4.张孝祥 Java就业培训程序 清华大学出版社 -06 5.耿祥义 Java课程设计 清华大学出版社 -03 6.王路群 Java高级程序设计 中国水利水电出版社 -03 7.丁振凡 Java语言使用教程 北京邮电大学出版社 -06 8.薛为民 Java应用教程 清华大学出版社 -06 9.钟允中 JAVA入门 辽宁科学技术出版社 1997-03 10.郑莉 Java语言程序设计 清华大学出版社 -03- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 专业课程 设计 五子棋
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文