




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
存档资料 成绩: 华 东 交 通 大 学理工学院课 程 设 计 报 告 书所属课程名称 JAVA课程设计 题 目 多用途五子棋的实现 院 (系) 电信分院 班 级 10级信管1班 学号 20100210450123 学生姓名 frideric 指导教师 吴军良 辅导教师 吴军良 2011年 12 月23 日 1华东交通大学理工学院课程设计报告课程设计任务书 电信分院 学院 10级信息管理 专业 1班 班 一、课程设计题目 java 课程设计 多用途五子棋 二、课程设计工作自 11 年 12 月 19日起至 10 年 12 月 25 日止。三、课程设计 地点: 3号教学楼 机房8 四、课程设计内容要求:1本课程设计的目的(1)使学生巩固和提高Java编程技术(2)培养学生掌握程序设计的基本思路和方法; (3)加强学生研发、调试程序的能力;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。2课程设计的任务及要求1)课程设计任务:实现一个简单的多用户五子棋的游戏程序,包括如下两个界面设计要求:1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执 白、旁观);2、游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列表区;棋盘绘制区;3、使用Socket来完成服务端和客户端的通信;4、使用多线程技术支持多用户操作;5、增强功能:支持用户注册、添加和删除好友、战绩显示、发送消息、接受消息、多人聊天等功能;使用数据库保存用户信息。2)创新要求: 以上任务还未完善,悔棋、用户列表区及增强功能板块未完善。今后,参考资料书,实现五子棋网络对战及数据库的利用。3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路-工作原理、功能规划(3)详细设计-数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论-给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结-设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面-任务书-中文摘要-目录-正文-附录(代码及相关图片)学生签名: 11年 12月 23 日课程设计(论文)评审意见(1)考勤(10分):优()、良()、中()、一般()、差(); (2)程序检查(30分):优()、良()、中()、一般()、差(); (3)课设答辩(20分):优()、良()、中()、一般()、差(); (4)课设报告(40分):优()、良()、中()、一般()、差();评阅人: 吴军良 职称: 讲师 11 年 12 月 25 日 3目录一、课程设计任务及要求5二、需求分析52.1 棋盘板块52.2 聊天板块52.3 ChatSever52.4 编译环境52.5 参考资料5三、设计思路53.1 板块的显示53.2 注册监听53.3 ChatServer63.4 下棋6四、详细设计64.1 源程序代码. . 64.2 ChatSever类13五、运行调试与分析讨论13六、设计体会与小结15七、参考文献15一、课程设计任务及要求1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执白、旁观);2、 游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列表 区;棋盘绘制区;3、使用Socket来完成服务端和客户端的通信;4、使用多线程技术支持多用户操作;5、增强功能:支持用户注册、添加和删除好友、战绩显示、发送消息、接 受消息、多人聊天等功能;使用数据库保存用户信息。二、需求分析2.1 棋盘板块 画一个1515的棋盘版面,及两个按钮组。初始化:开始、重置、 退出;角色选择:黑方、白方、旁观。2.2 聊天板块 聊天信息显示区,聊天信息输入区。2.3 ChatSever 模拟服务器:用于桥接不同用户,实现接收用户发出的信息,然后 将信息传递到每个用户的聊天窗口。2.4 编译环境 Eclipse 实验室上机 在宿舍编写2.5 参考资料 Java 语言使用教程,百度文库资料(五子棋判断胜负算法)。三、设计思路3.1 板块的显示 画棋盘 调用public void paint(Graphics g)QiPan(g);方法 画一个1515的棋盘面版。 初始化 定义两个Panel P1、P2,在初始化板块将JButton 开始、 重置,退出加入到P1,将黑方、白方、旁观加入到P2。 聊天板块 在初始化时定义一个JTextArea 和一个JTextField 实现聊 天功能3.2 注册监听 对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型 0,白子1。 对按钮开始、重置注册ActionListener监听,如果点击开始,用户进 入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。 对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。 对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。3.3 ChatServerclass ServerThread implements Runnable 类监听线程,监听是否有客户端法过信息来。属性: 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,若有离开用户,则在聊天板块广播。3.4 下棋用二维数组模拟棋盘chessbody1717,黑方下棋,则黑方所下棋位置的值等于旗子的颜色加一,白方类似。最后1代表下了黑棋,2表示下了白棋,0表示没下棋。从横向、纵向、斜方向判断胜负。下完一步判断一次,有一个方向上同色棋子数超过5,则胜负已判断。n 四、详细设计n 4.1源程序代码n /wuziqi.java importjava.applet.*; importjava.awt.*; importjava.awt.event.*; importjava.applet.Applet; importjava.awt.Color; publicclasswuziqiextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener intcolor_Qizi=0;/旗子的颜色标识0:白子1:黑子 intintGame_Start=0;/游戏开始标志0未开始1游戏中 intintGame_Body=newint1616;/设置棋盘棋子状态0无子1白子2黑子 Buttonb1=newButton(游戏开始); Buttonb2=newButton(重置游戏); LabellblWin=newLabel(); CheckboxckbHB=newCheckbox2; CheckboxGroupckgHB=newCheckboxGroup(); publicvoidinit() setLayout(null); addMouseListener(this); add(b1); b1.setBounds(330,50,80,30); b1.addActionListener(this); add(b2); b2.setBounds(330,90,80,30); b2.addActionListener(this); ckbHB0=newCheckbox(白子先,ckgHB,false); ckbHB0.setBounds(320,20,60,30); ckbHB1=newCheckbox(黑子先,ckgHB,false); ckbHB1.setBounds(380,20,60,30); add(ckbHB0); add(ckbHB1); ckbHB0.addItemListener(this); ckbHB1.addItemListener(this); add(lblWin); lblWin.setBounds(330,130,80,30); Game_start_csh(); publicvoiditemStateChanged(ItemEvente) if(ckbHB0.getState()/选择黑子先还是白子先 color_Qizi=0; else color_Qizi=1; publicvoidactionPerformed(ActionEvente) Graphicsg=getGraphics(); if(e.getSource()=b1) Game_start(); else Game_re(); publicvoidmousePressed(MouseEvente) publicvoidmouseClicked(MouseEvente) Graphicsg=getGraphics(); intx1,y1; x1=e.getX(); y1=e.getY(); if(e.getX()300|e.getY()300) return; if(x1%2010) x1+=20; if(y1%2010) y1+=20; x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); publicvoidmouseEntered(MouseEvente) publicvoidmouseExited(MouseEvente) publicvoidmouseReleased(MouseEvente) publicvoidmouseDragged(MouseEvente) publicvoidmouseMoved(MouseEvente) publicvoidpaint(Graphicsg) draw_qipan(g); publicvoidset_Qizi(intx,inty)/落子 if(intGame_Start=0)/判断游戏未开始 return; if(intGame_Bodyx/20y/20!=0) return; Graphicsg=getGraphics(); if(color_Qizi=1)/判断黑子还是白子 g.setColor(Color.black); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval(x-10,y-10,20,20); intGame_Bodyx/20y/20=color_Qizi+1; if(Game_win_1(x/20,y/20)/判断输赢 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; if(Game_win_2(x/20,y/20)/判断输赢 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; if(Game_win_3(x/20,y/20)/判断输赢 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; if(Game_win_4(x/20,y/20)/判断输赢 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; publicStringGet_qizi_color(intx) if(x=0) return黑子; else return白子; publicvoiddraw_qipan(GraphicsG)/画棋盘15*15 G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(inti=1;i16;i+) G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); publicvoidGame_start()/游戏开始 intGame_Start=1; Game_btn_enable(false); b2.setEnabled(true); publicvoidGame_start_csh()/游戏开始初始化 intGame_Start=0; Game_btn_enable(true); b2.setEnabled(false); ckbHB0.setState(true); for(inti=0;i16;i+) for(intj=0;j16;j+) intGame_Bodyij=0; lblWin.setText(); publicvoidGame_re()/游戏重新开始 repaint(); Game_start_csh(); publicvoidGame_btn_enable(booleane)/设置组件状态 b1.setEnabled(e); b2.setEnabled(e); ckbHB0.setEnabled(e); ckbHB1.setEnabled(e); publicbooleanGame_win_1(intx,inty)/判断输赢横 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i15) break; if(intGame_Bodyx1+iy1=intGame_Bodyxy) t+=1; else break; for(inti=1;i5;i+) if(x14) returntrue; else returnfalse; publicbooleanGame_win_2(intx,inty)/判断输赢竖 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i15) break; if(intGame_Bodyx1y1+i=intGame_Bodyxy) t+=1; else break; for(inti=1;i5;i+) if(x14) returntrue; else returnfalse; publicbooleanGame_win_3(intx,inty)/判断输赢左斜 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i15) break; if(intGame_Bodyx1+iy1-i=intGame_Bodyxy) t+=1; else break; for(inti=1;i5;i+) if(x14) returntrue; else returnfalse; publicbooleanGame_win_4(intx,inty)/判断输赢左斜 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i15) break; if(intGame_Bodyx1+iy1+i=intGame_Bodyxy) t+=1; else break; for(inti=1;i5;i+) if(x14) returntrue; else returnfalse; 4.2 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(: +receive); 五、运行调试与分析讨论 图 51 棋盘图51 棋盘图,当选择好黑白角色后点击开始,便可以下棋;点击重置时重新开始下棋;点击退出时结束游戏,并退出。 该棋盘未实现网络棋盘,只能自己跟自己下棋。还欠缺悔棋步骤,可以用Vector存储已下的棋子的信息,调用repaiant() 然后再画除最后一步的棋盘,实现悔棋操作。由于对Socket 用法还不熟悉,不能将棋盘通信与聊天通信区分开来,也就不能实现联网下棋。 图52ChatServer如果用户登录则监听 listening .、accept a client使用了Socket,和多线程技术。定义了Vector 存储用户线程,实现ChatServer将信息传递给每个用户,接收每个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村振兴头雁计划培训学习心得体会
- 低温轴承采购合同范本
- 第三章培训与开发(人力资源三级)案例分析题及答案
- 关于督查工作的心得体会【四篇】
- 第八章 解析几何2026年高三数学第一轮总复习
- 职测信息处理题目及答案
- 短视频营销推广方案计划
- 2025年趣味益智游戏题库及答案
- 2025年山东省政府采购评审专家考试经典试题及答案
- CN120108096A 基于多模态融合算法的火灾最优逃生路线规划方法及系统 (无锡学院)
- JG/T 337-2011混凝土结构防护用渗透型涂料
- 《天然植物化学成分与抗肿瘤机制》课件
- 肿瘤危重症护理从急救到安宁的全程管理2025
- 自行车比赛课件
- 开利30HXY-HXC螺杆冷水机组开机、运行维护手册
- 儿童暴发性心肌炎诊治专家建议(2025)解读课件
- 托育服务政策法规与职业伦理 课件全套 黄鑫 第1-8章 绪论、托育服务政策法规概述-托育职业伦理教育、修养与评价
- 3.2《做自尊的人》课件-2024-2025学年统编版道德与法治七年级下册
- 全陪导游工作流程
- 高层次人才引进协议合同范本
- 2025年心理辅导:声音疗愈《听听声音》课件设计
评论
0/150
提交评论