还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
网络益智游戏《游戏开发》课程设计报告JAVA姓名云红卫学号081012130题专业软件技术班级软件082计算机科学与技术系年月20096byte[]buf=msg.getBytes;snd=new DatagramPacketbuf,buf.length,rec.getAddress,rec.getPort;serv.sendsnd;//发送serv.receiverec;//接收客户端的回复msg=new Stringrec.getData,0,rec.getLength;//如果是“quit”指令,终止程序if msg.compareTonquitn==0{break;//如果是“1”,选择猜数字游戏if msg.compareTon1==0{guessZimu;//是“2L选择猜大小游戏else{guessPro;}//关闭套接字System,out.printin断开连接”;serv.close;}catchSocketException se{se.printStackTrace;}catchIOException ie{ie.printStackTrace;〃猜字母游戏的方法static voidguessZimu{〃储存生成的随机字母char zimu;//储存客户端发送来的答案char ans=0;int i;System,out.printin开始进行猜字母游戏n〃生成随机的字母zimu=getZimu;//输出生成的随机字母System.out.printlnzimu+n;System.out.printlnans+〃进行游戏fori=l;i=10;i++//接受客户端发来的数据包tryserv.receiverec;}catchIOException ie{ie.printStackTrace;〃数据包中提取答案msg=new Stringrec.getData,O,rec.getLength;char[]chars=msg.toCharArray;ans=chars[O];〃输出答案第+i+”次的答案”;;System.out.printlnans+//调用judge方法判断答案的匹配情况ifjudgezimu,ans==1{〃如果答案完全匹配,返回正确的提示信息msg=恭喜你猜对了!]System,outprintln答案正确”;byte[]buf=msg.getBytes;snd=newDatagramPacketbuf,buf.length,rec.getAddress,rec.getPort;tryserv.sendsnd;}catchIOException ie{ie.printStackTrace;}break;〃如果超过1次未猜对,结束游戏ifi10{〃生成正确的答案char[]n二new char[l];String str=new Stringn;//返回游戏结束的提示信息msg=没机会了,正确答案是:“+str;System,out.printing游戏结束”;byte[]buf=msg.getBytes;snd=new DatagramPacketbuf,buf.length,rec.getAddress,rec.getPort;tryserv.sendsnd;}catchIOException ie{ie.printStackTrace;//猜大小游戏的方法static voidguessPro{int num,i,j,t;System,out.printin开始进行猜大小游戏”;Random rnd=new Random;//生成一个〜100的随机数不含100num=rnd.nextlntlOO;//输出生成的随机数生成的随机数:+num;try//进行游戏for i=1;i=10;i++{//接收客户端发来的数据包serv.receiverec;//提取其中的答案msg=new Stringrec.getData,0,rec.getLength;//将其转化为整数形式t二intFloat.parseFloatmsg;〃输出答案第+i+”次的答案+msg+n;//根据不同情况,返回相应的信息if tnum{msg=小了,再大点!”;}else if tnum{msg=”大了,再小点!”;else{msg二恭喜你猜对了!”;结果+msg;//数据封装byte[]buf=msg.getBytes;snd=new DatagramPacketbuf,buf.length,rec.getAddress,rec.getPort;//发送serv.sendsnd;//如果答案正确,输出提示信息,终止游戏ift==num{System,out.printing答案正确”;break;//如果超过10次未猜对,也终止游戏ifi10{//生成正确答案char[]n=new char
[2];n
[0]=charnum/10+48;n[l]=charnum%10+48;String str=new Stringn;msg二”没有机会了,正确答案是+str;System,out.printin游戏结束”;byte[]buf=msg.getBytes;snd二new DatagramPacketbuf,buf.length,rec.get Address,rec.getPort;serv.sendsnd;}catchIOException ie{ie.printStackTrace;〃判断答案匹配情况的方法static charjudgechar zimu,char ans{int a=2;ifans==zimu{a-;else{msg-你答错了”;byte[]buf=msg.getBytes;snd=new DatagramPacketbuf,buf.length,rec.getAddress,rec.getPort;try{serv.sendsnd;}catchIOException ie{ie.printStackTrace;〃如果答案匹配,则返回1ifa-l{return1;〃否则返回0else{return0;}//生成随机数的方法static chargetZimu//zimu数组存储生成的随机数Random random=new Random;int r=0;r=random.nextInt57+65;whiler90r97||r-0r=random.nextInt57+65;char zimu=charr;return zimu;
②类的代码:Clientimportjava.net.*;import java.io.*;//客户端类public classClient{//存储套接字static DatagramSocketclient;//存储端口号static intport;//存放接收到的数据包中的信息static byte[]info=new byte
[1000];//存储接收到的数据包static DatagramPacketrec二new DatagramPacketinfo,info.length;//存储要发送的数据包static DatagramPacketsnd;//存储要发送或提取出的信息static Stringmsg;//localHost变量存储本地主机的IP地址//host变量存储服务器的IP地址static InetAddresslocalHost,host;//服务器IP地址的字符串形式static StringIP;//服务器IP地址的字节数组形式static byte[]IPAddr=new byte
[4];//主方法public static void mainString[]args{System.out.printin网络益智游戏-----客户端try//第1个参数为服务器IP地址,将其转存到字节数组中IP=args[O];toIPAddr;port=intFloat.parseFloatargs
3.13系统设计
3.23系统测试和使用说明46系统测试
4.16系统使用说明
4.27课程设计总结57遇到的问题和解决方法
5.17心得体会
5.28参考文献68附录79网络益智游戏实践过程概述1此次软件技术专业JAVA游戏开发课程设计于2009年6月在实验楼三楼机房进行,持续时间为两周本次课程设计主要是利用所学的面向对象程序设计语言——JAVA来编写程序,实现特定功能,以加深对JAVA的理解课程设计题目描述2我们设计的网络益智游戏是一台计算机做服务器产生一个随机数和随机字母,另一台计算机做客户端来猜系统需求分析与设计3系统需求分析
3.1随着现在生活节奏的不断加快,现在许多的人们在工作之余,需要通过一些益智小游戏,来调节一下自己的情绪,释放一下自己的疲劳而网络益智游戏正好符合人们的要求,它不需要你过多的去思考答案,只是轻松一下紧张的神经,放松一下心情,就像开心农场一样,在人们的工作之余调节一下系统设计
3.2系统总体设计
3.
2.1系统功能分析本系统要用到以下的Java编程技术实现的功能
①网络功能这一程序将由一个服务器程序和一个客户端程序构成客户端用来猜测随机字母和随机数的大小服务器用来产生随机字母和随机数,来确定是否猜中
②多线程功能当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程程序详细设计
3.
2.21程序框架本系统的程序框架主要包括服务器端和客户端两部分服务器端服务器端通过类和方法来产生随机字母和随机数,来判断客户端送过来的答案是否正确客户端客户端通过类和方法来连接服务器,并把猜测的答案发送到服务器,并接受服务器判断之后的结果基本类的设计Server类Server服务器类,其中定义了6个成员变量和5个成员方法serv变量用于存储套接字,port变量存储端口号,info数组存放接收到的数据包中的信息,rec变量存储接收到的数据包,snd变量存储要发送的数据包,msg变量存储要发送或提取出的信息main方法是主方法,用于创建套接字,选择要进行的游戏;guessZimu方法用于进行猜字母游戏;guessPro方法用于进行猜大小游戏;judge方法用于判断试猜答案的匹配情况,并将结果返回给客户端;getZimu方法是用来生成随机字母在main方法中,首先将参数转化为端口号,据此创建一个套接字然后等待客户端的数据包,收到的第1个数据包中包含的是该客户端的IP地址,将其输出接着,就开始与客户端进行交互先发送消息,让客户端选择要玩的游戏,客户端将作出的选择封装在数据包中发回如果客户但回复的是“quit”指令,则终止程序,关闭套接字;如果是“1”,代表选择猜字母游戏,调用guessZimu方法;如果是“2”,代表选择猜大小游戏,调用guessPro方法GuessZimu方法是进行猜数字的游戏,先调用getZimu方法,生成一个随机字母,并输出游戏者有10次试猜机会,每次接收到包含试猜答案的数据包后,都先把试猜答案输出,再调用judge方法判断答案的匹配情况如果答案完全匹配,返回答案正确的提示信息,否则继续进行游戏如果超过10次未猜对,也结束游戏,并向客户端返回正确答案judge方法是判断试猜答案与正确答案匹配情况的方法,组合答案匹配情况的信息,存储到字符串msg中,并封装到数据包发送给客户端如果答案完全匹配,则返回1,否则返回0ogetZimu方法是用来生成随机数序列的,它创建了一个Random类对象,并调用它的nextlnt方法来生成随机数每次生成的随机数,都要与已生成随机数比较,如果有重复,则重新生成,直到不与己生成的随机数重复guessPro方法是用来进行猜大小游戏的,它创建了一个Random类对象,并调用它的nextlnt方法来生成一个0~100之间的随机数,存放到num变量中,并输出游戏者有10次试猜机会,每次接收到包含试猜答案的数据包后,都先把试猜答案输出,再将其转化为int型数与num比较大小,根据大小情况向客户端返回相应提示信息,同时也在服务器端输出如果答案完全匹配,返回答案正确的提示信息,否则继续进行游戏如果超过10次未猜对,也结束游戏,并向客户端返回正确答案Client类Client类其中定义了10个成员变量和4个成员方法serv变量用于存储套接字,port变量存储端口号,info数组存放接收到的数据包中的信息,rec变量存储接收到的数据包,snd变量存储要发送的数据包,msg变量存储要发送或提取出的信息,localHost变量存储本地主机的IP地址,host变量存储服务器的IP地址,IP变量是服务器IP地址的字符串形式,IPAddr数组是服务器IP地址的字节数组形式main方法是主方法,用于创建套接字,选择游戏,控制程序的终止;playGuessZimu方法是进行猜字母游戏的方法;playGuessPro方法是进行猜大小游戏的方法;toIPAddr方法用于将字符串形式的IP地址转换为字节数组形式在main方法中,首先调用toIPAddr方法,将存储服务器IP地址第1个参数,转存到字节数组中,再把第2个参数转化为端口后,据此创建一个套接字和存储服务器地址的InetAddress类对象host然后调用InetAddress类对象的getLocalHost方法,获得本机IP地址,并传送给服务器,告知服务器要加入游戏然后,接收服务器发来的数据包,根据其中的提示信息,选择游戏或退出程序如果输入的是“quit”指令,则终止程序,关闭套接字;如果输入的是1,选择玩猜字母游戏,调用playGuessZimu方法;如果输入的是2,选择玩猜大小游戏,调用playGuessPro方法playGuessZimu方法负责猜字母游戏的发送和接收,每次试猜,它都完成以下过程:将键盘键入的数据封装到数据包,发送给服务器,再接收服务器的回复提取其中的匹配情况信息,并输出,再把存储试猜次数的ent变量加1如果完全匹配,输出答案正确的提示信息,终止游戏,否则继续游戏如果已经试猜10次,将服务器返回的正确答案输出,再终止游戏playGuessPro方法负责猜大小游戏的发送和接收,其运行与处理过程与playGuessZimu方法类似toIPAddr方法将一个存储IP地址的字符串转化为字节数组它从字符串的尾部开始向前搜索,在遇到号前所搜索到的数字都是属于IP地址的某一段,将它累加到变量t中直到遇到号,将t清零后重新开始累加系统测试和使用说明4系统测试
4.1使用JDK运行程序时,将server子目录和client子目录下分别放在两台计算机上分别用来做服务器和客户端在服务器端的计算机上打开一个DOS窗口,使用命令Javac Server.java用来编译服务器上的源代码使用命令java Server6666运行服务器程序Server,启动服务器端,DOS窗口显示网络益智游戏一一服务器,如图5所示:图服务器运行界面5在另一台客户端的计算机上打开另一个DOS囱口,输入命令javac Clientjava进行编译然后输入命令java Client
192.
168.
0.726666运行第客户端程序,Client执行后,windows窗口会显示如图6所示:C\Docunents andSettings\st02E E\jauac Server.jaua[版本Microsoft UindousXP
5.
1.2600]C版权所有月络益智游戏一一服,加入游戏「始1985-2\00j1auMaiScerrovseorft66C6o6rp.进行猜字母游曩…正罢勺数进次白呈士口次白悬兼士口白口尖了对大点手士前卜口三恭工点女辞存先总褪等你小了的戈图客户端程序的运行界面6系统使用说明
4.2由于字母和数字都是随机产生的,我们猜测字母的时候只能依靠我们子的运气去随机猜
123.sqfkLpyRrE-jB,Trst••80058985•m_ml/BLl--r:WKS:测,猜数字大小的时候,我们可以根据服务器给我们发过来的信息,来猜测课程设计总结5遇到的问题和解决方法
5.1在用JAVA编写程序时,我遇到了很多困难,如怎样用Socket类实现客户端和服务器端的通信,怎样来把字符串转换为一个个的字符通过查阅相关书籍以及在网上搜索资料,我们了解到要使用java.net类中的MessageListenning来负责侦听客户端的消息,使用Thread类创建线程接收客户端发出的消息,使用MulticastSendingThreas类向客户端广播消息在本系统中,我们用到了前者设计是以Java独立应用程序来实现的,程序中要捕获异常,就要用到多种捕获异常类,这些类是在J2SE编程环境下自动引入的java.lang包类的异常类心得体会
5.2在这次的面向对象程序设计中,我主要运用了JAVA语言的多线程、异常处理、网络传输等,综合运用了JAVA语言我深刻感受到了面向对象语言中类库的强大功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础这次设计中,再一次让我感受到了网络通信中服务器和客户相互通信的特点,同时也加深了对网络通信知识的理解通过这次为时二周的课程设计,我学到了很多的东西,下面就这在这次课程设计中的心得体会总结如下在这次的面向对象程序设计中,主要是运用JAVA语言来编写,并可运用其他的技术在我的系统中,还采用了多线程、异常处理、网络传输等技术,而这些知识都是我们没有学过的,这就要求我们去查阅相关书籍正因为这样,才锻炼了我的自学能力,为以后的学习打下了基础这次设计中,我深刻感受到了面向对象语言中类库的强大功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础同时,我也感受到了网络通信中服务器和客户相互通信的特点,加深了对网络通信知识的理解,拓宽了我的知识面通过二周的努力,这次课程设计圆满的结束了,在这个过程中,我学到了很多的知识,同时也非常感谢杭志老师帮助与指导在以后的学习中,我会更加努力的学好专业知识,并将所学知识用于实践当中去,以便牢固掌握知识参考文献6
[1]陆光义,先锋.Java游戏编程导学.北京:清华大学出版社,2004
[2]飞思科技产品研发中心.精通Java.北京:电子工业出版社,2004
[3]朱福喜等Java项目设计与开发范例.电子工业出版社,2005
[4]Robert C.Martin著,黄晓春译.UML FORJAVA PROGRAMMERS.清华大学出版社,2004附录7基本类的程序代码1
①类的代码S erverimportjava.net.*;import java.io.*;import java.util.*;import java.lang.String.*;//服务器类public classServer{//存储套接字static DatagramSocketserv;//存储端口号static intport;//存放接收到的数据包中的信息static byte[]info=new byte
[1000];//存储接收到的数据包static DatagramPacketrec=new DatagramPacketinfo,info.length;//存储要发送的数据包static DatagramPacketsnd;//存储要发送或提取出的信息static Stringmsg;//主方法public staticvoid mainString[]args{System,out.printing网络益智游戏------服务器try//将第1个参数转化为端口号port=intFloat.parseF!oatargs
[0];//创建套接字serv=new Datagramsocketport;//等待客户端连接serv.receiverec;//输出加入游戏的计算机的IP地址msg=new Stringrec.getData,0,rec.getLength;System.out.printlnmsg+”加入游戏”;whiletrue{//发送消息,让客户端选择要玩的游戏msg=请选择游戏
1.猜字母
2.猜大小”;//数据封装。
个人认证
优秀文档
获得点赞 0