五子棋JAVA语言专业课程设计方案报告.doc
《五子棋JAVA语言专业课程设计方案报告.doc》由会员分享,可在线阅读,更多相关《五子棋JAVA语言专业课程设计方案报告.doc(30页珍藏版)》请在咨信网上搜索。
《Java语言程序设计》 课程设计汇报 学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 指导老师: 郭韶升 课设时间: -03-17 至-03-26 二O一四 年 三月 二十六 日 目 录 一、设计要求…………………………………………....2 二、设计步骤…………………………………………....2 2.1程序步骤图………………………….…………...2 2.2程序功效分配……………………….………...3 三、设计正文…………………………………………....6 3.1创建棋盘类……………………………………….6 3.2判定输赢功效实现……………………………….9 3.3测试结果……………………………………….....9 四、心得体会…………………………………………...12 五、参考文件…………………………………………...12 附录 (源代码)……………………………………….13 一、课程设计要求 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并能够实现以下功效: 1.选择落子前后次序 2.重置棋盘 3.刷新重新开始 4.退出提醒 而且要求退出者判为负,但退出过程中要有提醒。以防不小心点错了。 最终判定某一方是否为五子连珠。 实现一个简单多用户五子棋游戏程序,包含以下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 二、设计步骤 2.1程序步骤图 2.2 程序功效分配 a. 棋盘绘制 public void draw_qipan(Graphics G) //画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(int i=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); } } b. 添加按钮 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } c. 鼠标棋子触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return; } if (x1%20>10) { x1+=10; } if(y1%20>10) { y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); } d. 按钮触发事件 public void actionPerformed(ActionEvent e) { Graphics g=getGraphics(); if (e.getSource()==b1) { Game_start(); } else{ Game_re(); } if(e.getSource()==exist){ Game_re(); lblWin.setText(Get_qizi_color(color_Qizi)+"输了!"); intGame_Start=0; } e. 判定落子位置及画出对应黑白棋子 public void set_Qizi(int x,int y) //落子{ if (intGame_Start==0) //判定游戏未开始{ return; } if (intGame_Body[x/20][y/20]!=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-10,y-10,20,20); intGame_Body[x/20][y/20]=color_Qizi+1; } f. 判定胜败 if (Game_win_1(x/20,y/20)) //判定输赢1{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_2(x/20,y/20)) //判定输赢2{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_3(x/20,y/20)) //判定输赢3{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_4(x/20,y/20)) //判定输赢4{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } } 三、设计正文 3.1创建棋盘类 Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子颜色标识 0:白子 1:黑子 int intGame_Start=0;//游戏开始标志 0未开始 1游戏中 int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态 int m=-1; Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); CheckboxGroup ckgHB=new CheckboxGroup(); NetchatClient chat=new NetchatClient(); public void init(){ 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); ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[1].setBounds(380,20,60,30); ckbHB[2]=new Checkbox("观看",ckgHB, false); add(ckbHB[0]); add(ckbHB[1]); add(ckbHB[2]); ckbHB[0].addItemListener(this); ckbHB[1].addItemListener(this); add(lblWin); lblWin.setBounds(330,180,80,30); lblWin.setBackground(Color.red); lblWin.setText("胜利者!");//没有显示? ckbHB[2].setBounds(440, 20,60, 30); add(exist); exist.setBounds(330,130,80,30); exist.addActionListener(this); // add(chat);chat.setBounds(20, 500, 300, 300); chat.frame(); chat.setVisible(true); Game_start_csh(); setSize(500,600); setVisible(true); } public void itemStateChanged(ItemEvent e) { if (ckbHB[0].getState()) //选择黑子还是白子{ color_Qizi=0; } else{ color_Qizi=1; } } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return; } if (x1%20>10) { x1+=10; } if(y1%20>10) { y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); } public void actionPerformed(ActionEvent e) { Graphics g=getGraphics(); if (e.getSource()==b1) { Game_start(); } else { Game_re(); } if(e.getSource()==exist){ Game_re(); lblWin.setText(Get_qizi_color(color_Qizi)+"输了!"); intGame_Start=0; } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g) { draw_qipan(g); } 3.2判定输赢功效实现 if (Game_win_1(x/20,y/20)){ //判定输赢1 lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_2(x/20,y/20)){ //判定输赢2 lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_3(x/20,y/20)) //判定输赢3{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_4(x/20,y/20)) //判定输赢4{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } 3.3 测试结果 a. 进入游戏界面 游戏开始界面有三个选择项,用户能够选择对应角色,选择 完成后点击开始进入游戏。 b. 选择角色,开始下棋 首先达成五个棋子连在一块赢了,并在红色区域显示谁赢了! c. 下完后,重新开始 下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏. d.游戏中点退出,自动判输 在下棋过程当中谁中途退出,即点击退出,系统自动判定谁输 四、课程设计心得体会 经过此次课程设计,将我本学期所学JAVA知识得到巩固和应用,在设计过程中我碰到了很到问题,不过在老师和同学们帮助和自己思索下还是很好完成了。这此课程设计还让我知道了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限资料。因为自己分析设计和程序经验不足,该系统设计和实现过程中,还有很多没有完善地方,比如用户界面设计不够美观,异常犯错处理比较差等多方面问题,这些全部有待深入完善和提升。对于文中出现不足和系统中出现问题敬请老师指导。 五、参考文件 1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3.丁振凡 Java 语言实用教程 :北京邮电大学出版社 附录 (源代码) import .*; import java.io.*; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.awt.Color; Public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子颜色标识 0:白子 1:黑子 int intGame_Start=0;//游戏开始标志 0未开始 1游戏中 int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态 int m=-1; Button b1=new Button("开始"); Button b2=new Button("重新开始"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); CheckboxGroup ckgHB=new CheckboxGroup(); public void init(){ 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); ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[1].setBounds(380,20,60,30); ckbHB[2]=new Checkbox("观看",ckgHB, false); add(ckbHB[0]); add(ckbHB[1]); add(ckbHB[2]); ckbHB[0].addItemListener(this); ckbHB[1].addItemListener(this); add(lblWin); lblWin.setBounds(330,180,80,30); lblWin.setBackground(Color.red); lblWin.setText("胜利者!");//没有显示? ckbHB[2].setBounds(440, 20,60, 30); add(exist); exist.setBounds(330,130,80,30); exist.addActionListener(this); Game_start_csh(); setSize(500,600); setVisible(true); } public void itemStateChanged(ItemEvent e){ if (ckbHB[0].getState()) //选择黑子还是白子 { color_Qizi=0; } else { color_Qizi=1; } } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){ return; } if (x1%20>10){ x1+=10; } if(y1%20>10){ y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1) } public void actionPerformed(ActionEvent e){ Graphics g=getGraphics(); if (e.getSource()==b1){ Game_start(); } else{ Game_re(); } if(e.getSource()==exist){ Game_re(); // color_Qizi=m; lblWin.setText(Get_qizi_color(color_Qizi)+"输了!"); intGame_Start=0; } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g); } public void set_Qizi(int x,int y){ //落子 if (intGame_Start==0) {//判定游戏未开始 return; } if (intGame_Body[x/20][y/20]!=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-10,y-10,20,20); intGame_Body[x/20][y/20]=color_Qizi+1; if (Game_win_1(x/20,y/20)){ //判定输赢1 lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_2(x/20,y/20)){ //判定输赢2{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_3(x/20,y/20)){ //判定输赢3 lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_4(x/20,y/20)){ //判定输赢4 lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } } public String Get_qizi_color(int x) { if (x==0) { return "黑子"; } else { return "白子"; } } public void draw_qipan(Graphics G){ //画棋盘 15*15 G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(int i=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); } } public void Game_start(){ //游戏开始 intGame_Start=1; Game_btn_enable(false); b2.setEnabled(true); } public void Game_start_csh() {//游戏开始初始化 intGame_Start=0; Game_btn_enable(true); b2.setEnabled(false); ckbHB[0].setState(true); for (int i=0;i<16 ;i++ ){ for (int j=0;j<16 ;j++ ){ intGame_Body[i][j]=0; } } lblWin.setText(""); } public void Game_re(){ //重新开始游戏 repaint(); Game_start_csh(); } public void Game_btn_enable(boolean e){ //设置组件状态 b1.setEnabled(e); b2.setEnabled(e); ckbHB[0].setEnabled(e); ckbHB[1].setEnabled(e); } public boolean Game_win_1(int x,int y){ //横向判定输赢 int x1,y1,t=1; x1=x; y1=y; for (int i=1;i<5 ;i++ ){ if (x1>15){ break; } if (intGame_Body[x1+i][y1]==intGame_Body[x][y]){ t+=1; } else{ break; } } for (int i=1;i<5 ;i++ ){ if (x1<1){ break; } if(intGame_Body[x1-i][y1]==intGame_Body[x][y]){ t+=1; } else{ break; } } if (t>4){ return true; } else{ return false; } } public boolean Game_win_2(int x,int y){ //纵向判定输赢 int x1,y1,t=1; x1=x; y1=y; for (int i=1;i<5 ;i++ ){ if (x1>15){ break; } if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){ t+=1; } else{ break; } } for (int i=1;i<5 ;i++ ){ if (x1<1){ break; } if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if (t>4){ return true; } else{ return false; } } public boolean Game_win_3(int x,int y){ //左斜判定输赢 int x1,y1,t=1; x1=x; y1=y; for (int i=1;i<5 ;i++ ){ if (x1>15){ break; } if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } for (int i=1;i<5 ;i++ ){ if (x1<1){ break; } if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if (t>4){ return true; } else{ return false; } } public boolean Game_win_4(int x,int y){ //左斜判定输赢 int x1,y1,t=1; x1=x; y1=y; for (int i=1;i<5 ;i++ ){ if (x1>15){ break; } if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){ t+=1; } else{ break; } } for (int i=1;i<5 ;i++ ){ if (x1<1){ break; } if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if (t>4){ return true; } else{ return false; } } } <applet code="wuziqi.class"height=500 width=600> </applet>- 配套讲稿:
如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。
关于本文