




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE19烟台工程职业技术学院系专业级课程设计(论文)题目:Java五子棋游戏设计姓名学号指导教师(签名)二○一零年七月十二日PAGE1Java五子棋游戏设计——xxx摘要五子棋游戏大家都比较熟悉,且老少皆宜,我个人也很喜欢五子棋游戏,易学易操作,使用Java编写一个五子棋游戏,闲暇之时既可以开动智力又可以得到愉悦。程序实现选择对弈桌及角色(执黑、执白、观看)。在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。前言Java是由美国的sunmicrosystems公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。使得许多用过的人都爱不释手。Java既是一种程序设计语言,也是一个完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台(JRE,JavaRuntimeEnvironment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行的操作系统无关。Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。Java技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推进,全球形成了一股巨大的Java应用浪潮。 这个五子棋游戏正是用这个平台做的,在实践中充分体现出了Java面向对象给我们带来的方便。多用户聊天程序也让我体会到了Java多线程的强大功能。一设计思路、(一)、工作原理图(二)、功能的规划1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。a.棋盘的绘制publicvoiddraw_qipan(GraphicsG)//画棋盘15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(inti=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300);}}b.添加按钮与按钮胡规划Buttonb1=newButton("开始"); Buttonb2=newButton("重置游戏"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); publicvoidinit(){ ckbHB[0]=newCheckbox("执白",ckgHB,false); ckbHB[1]=newCheckbox("执黑",ckgHB,false); ckbHB[2]=newCheckbox("观看",ckgHB,false); }C.鼠标棋子胡相应触发事件publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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.按钮的触发事件publicvoidactionPerformed(ActionEvente){ Graphicsg=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;}2.编写一个功能判断落子的位置及画出相应的黑白棋子publicvoidset_Qizi(intx,inty)//落子{ if(intGame_Start==0)//判断游戏未开始{ return;} if(intGame_Body[x/20][y/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_Body[x/20][y/20]=color_Qizi+1;}3.判断胜负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; }}4.添加用户聊天功能NetchatClientchat=newNetchatClient();chat.frame();chat.setVisible(true);二、具体实现(一)、创建棋盘类PublicclassWcyChessextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{ intcolor_Qizi=0;//旗子的颜色标识0:白子1:黑子 intintGame_Start=0;//游戏开始标志0未开始1游戏中 intintGame_Body[][]=newint[16][16];//设置棋盘棋子状态 intm=-1; Buttonb1=newButton("开始"); Buttonb2=newButton("重置游戏"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); CheckboxGroupckgHB=newCheckboxGroup(); NetchatClientchat=newNetchatClient(); 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); ckbHB[0]=newCheckbox("执白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=newCheckbox("执黑",ckgHB,false); ckbHB[1].setBounds(380,20,60,30); ckbHB[2]=newCheckbox("观看",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);} publicvoiditemStateChanged(ItemEvente){ if(ckbHB[0].getState())//选择黑子还是白子{ color_Qizi=0; } else{ color_Qizi=1;}} publicvoidmousePressed(MouseEvente){} publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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);} publicvoidactionPerformed(ActionEvente){ Graphicsg=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;}} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseDragged(MouseEvente){} publicvoidmouseMoved(MouseEvente){} publicvoidpaint(Graphicsg){ draw_qipan(g);}(二)、判断输赢功能实现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;}//判断输赢程序实现在详细过程 publicbooleanGame_win_1(intx,inty){//横向判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break; } if(intGame_Body[x1+i][y1]==intGame_Body[x][y]){ t+=1; } else{ break;}} for(inti=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){ returntrue;} else{ returnfalse; }} publicbooleanGame_win_2(intx,inty){//纵向判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break;} if(intGame_Body[x1][y1+i]==intGame_Body[x][y]){ t+=1;} else{ break; }}for(inti=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){ returntrue;} else{ returnfalse; } } publicbooleanGame_win_3(intx,inty)//左斜判断输赢{ intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break; } if(intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){ t+=1;} else{ break;} } for(inti=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){ returntrue;} else{ returnfalse; }} publicbooleanGame_win_4(intx,inty){//左斜判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15) { break; } if(intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){ t+=1;} else{ break; } } for(inti=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){ returntrue;} else{ returnfalse; }}(三)、实现聊天功能类packageNetchatClient;importJava.awt.*;importJava.awt.event.*;importJ.*;importJava.io.*;importJavax.swing.*;publicclassNetchatClientextendsFrame{ Framex=newFrame("liaotianchengxu");TextFieldtf=newTextField();TextAreata=newTextArea();Sockets=null;DataOutputStreamdos=null;publicstaticvoidmain(String[]args){newNetchatClient().frame();}publicvoidframe(){System.out.println("frame()");setLocation(20,400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVisible(true);connect();this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventarg0){cconnect();System.exit(0);}});addWindowListener(newWindowAdapter()//窗口适配器{ publicvoidwindowClosing(WindowEvente){ System.exit(0);//程序退出}});tf.addActionListener(newnclistener());}publicvoidconnect(){System.out.println("connnect()..");try{s=newSocket("",8888);//设置客户端的IP和端口dos=newDataOutputStream(s.getOutputStream());}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicvoidcconnect(){try{dos.close();s.close();}catch(IOExceptione){e.printStackTrace();}}publicclassnclistenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringst=tf.getText();ta.setText(st);tf.setText("");try{dos.writeUTF(st);dos.flush();}catch(IOExceptione1){e1.printStackTrace();}}}}三、测试结果(一)、进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。用户也可以在下面的聊天框中进行聊天。(二)选择角色,点击开始,开始下棋分析:首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!(三)、下完后点击重新开始分析:下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.(四)、游戏过程中退出,自动判输分析:在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输(五)、改进想法这个系统基本上实现了要求但是在有些方面还不够完善。1.观看角色点击后不会出发什么事件,虽然观看者并不需要做什么但是点击之后并没有发生任何反应总感觉缺点什么。想加个什么功能,但是又不知道加什么才不至于画蛇添足。2.问题比较大的可能是聊天功能了,本来聊天面板应该和棋盘面板在同一个面板上面,但是聊天功能的程序是写在了另一个类里,并且那个类是继承了Frame类的,是一个Application程序,而棋盘是一个Applet程序,所以当我添加这个类到Applet面板上并不能显示,所以我就打包那个NetchatClient类,在棋盘类中加载这个类,并调用该类的方法才实现了聊天功能。3.聊天功能本身也还不够完善,因为每次发送聊天的内容后都会覆盖掉原来的内容,这使得用户不能很直观的看到聊天的内容。但是在修改的过程中出现了许多的问题,所以也就将就者先用了。四、设计体会与小结这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是那么的完善。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。好在有一定的C++基础Java与C++语法类似,并把C++中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能。所以理解起来也比较容易。但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我在这方面就遇到了不少的问题。总结这次课设,我还是收获不少。虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。结束语首先感谢陈娅冰老师,在整个设计过程中,出现过很多的难题,但都在老师的帮助下顺利解决了,通过设计我也更加巩固了知识,了解问题,改正不足。六、参考文献1.叶核亚编著、陈道蓄主审.Java课程设计实用教程(第三版)北京.电子工业出版社2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社3.丁振凡Java语言实用教程:北京邮电大学出版社4.七、附录(代码)NetchatClient.javapackageNetchatClient;importjava.awt.*;importjava.awt.event.*;import.*;importjava.io.*;importjavax.swing.*;publicclassNetchatClientextendsFrame{ Framex=newFrame("liaotianchengxu");TextFieldtf=newTextField();TextAreata=newTextArea();Sockets=null;DataOutputStreamdos=null;publicstaticvoidmain(String[]args){newNetchatClient().frame();}publicvoidframe(){System.out.println("frame()");setLocation(20,400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据库的安全性与管理策略试题及答案
- 托儿所火灾应急预案范文(3篇)
- 软件设计师考试核心试题及答案解析
- 计算机软件考试常见错误分析
- 行政管理社会服务试题及答案总结
- 便捷复习的试题及答案高效利用
- 企业财务健康状况与战略制定的关系试题及答案
- 高考数学难题攻略与答案
- 法学概论的重要概念归纳与试题及答案
- 2025年网络安全架构与运营考察试题及答案
- 卫生部手术分级目录(2023年1月份修订)
- YY/T 0299-2022医用超声耦合剂
- MT 181-1988煤矿井下用塑料管安全性能检验规范
- GB/T 193-2003普通螺纹直径与螺距系列
- 因纳特工商管理综合实训软件V4.00
- 四议两公开工作法课件
- 国有企业干部选拔任用条例
- 2022年保山数字产业发展有限责任公司招聘笔试题库及答案解析
- 通用造价35kV~750kV线路(国网)课件
- Unit 1 Lesson 1 Lifestyles 课件 高中英语新北师大版必修第一册(2022-2023学年)
- 村级组织权力清单、责任清单和负面清单x
评论
0/150
提交评论