java游戏开发课程设计报告.docx

上传人:b****7 文档编号:9540429 上传时间:2023-02-05 格式:DOCX 页数:26 大小:110.40KB
下载 相关 举报
java游戏开发课程设计报告.docx_第1页
第1页 / 共26页
java游戏开发课程设计报告.docx_第2页
第2页 / 共26页
java游戏开发课程设计报告.docx_第3页
第3页 / 共26页
java游戏开发课程设计报告.docx_第4页
第4页 / 共26页
java游戏开发课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

java游戏开发课程设计报告.docx

《java游戏开发课程设计报告.docx》由会员分享,可在线阅读,更多相关《java游戏开发课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

java游戏开发课程设计报告.docx

java游戏开发课程设计报告

 

《JAVA游戏开发》课程设计报告

 

题 目网络益智游戏

 

姓名:

云红卫

学号:

081012130

专业:

软件技术

班级:

软件082

 

计算机科学与技术系

2009年6月

 

目录

1实践过程概述4

2课程设计题目描述4

3系统需求分析与设计4

3.1系统需求分析4

3.2系统设计4

4系统测试和使用说明7

4.1系统测试7

4.2系统使用说明8

5课程设计总结8

5.1遇到的问题和解决方法8

5.2心得体会9

6参考文献9

7附录10

网络益智游戏

1实践过程概述

此次软件技术专业JAVA游戏开发课程设计于2009年6月在实验楼三楼机房进行,持续时间为两周。

本次课程设计主要是利用所学的面向对象程序设计语言——JAVA来编写程序,实现特定功能,以加深对JAVA的理解。

2课程设计题目描述

我们设计的网络益智游戏:

是一台计算机做服务器产生一个随机数和随机字母,另一台计算机做客户端来猜。

3系统需求分析与设计

3.1系统需求分析

随着现在生活节奏的不断加快,现在许多的人们在工作之余,需要通过一些益智小游戏,来调节一下自己的情绪,释放一下自己的疲劳。

而网络益智游戏正好符合人们的要求,它不需要你过多的去思考答案,只是轻松一下紧张的神经,放松一下心情,就像开心农场一样,在人们的工作之余调节一下。

3.2系统设计

3.2.1系统总体设计

系统功能分析

本系统要用到以下的Java编程技术实现的功能:

①网络功能:

这一程序将由一个服务器程序和一个客户端程序构成。

客户端用来猜测随机字母和随机数的大小。

服务器用来产生随机字母和随机数,来确定是否猜中。

②多线程功能:

当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。

3.2.2程序详细设计

(1)程序框架

本系统的程序框架主要包括服务器端和客户端两部分。

服务器端

服务器端通过类和方法来产生随机字母和随机数,来判断客户端送过来的答案是否正确。

客户端

客户端通过类和方法来连接服务器,并把猜测的答案发送到服务器,并接受服务器判断之后的结果。

基本类的设计:

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,否则返回0。

getZimu()方法是用来生成随机数序列的,它创建了一个Random类对象,并调用它的nextInt()方法来生成随机数。

每次生成的随机数,都要与已生成随机数比较,如果有重复,则重新生成,直到不与已生成的随机数重复。

guessPro()方法是用来进行猜大小游戏的,它创建了一个Random类对象,并调用它的nextInt()方法来生成一个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()方法负责猜字母游戏的发送和接收,每次试猜,它都完成以下过程:

将键盘键入的数据封装到数据包,发送给服务器,再接收服务器的回复。

提取其中的匹配情况信息,并输出,再把存储试猜次数的cnt变量加1。

如果完全匹配,输出答案正确的提示信息,终止游戏,否则继续游戏。

如果已经试猜10次,将服务器返回的正确答案输出,再终止游戏。

playGuessPro()方法负责猜大小游戏的发送和接收,其运行与处理过程与playGuessZimu()方法类似。

toIPAddr()方法将一个存储IP地址的字符串转化为字节数组。

它从字符串的尾部开始向前搜索,在遇到“.”号前所搜索到的数字都是属于IP地址的某一段,将它累加到变量t中。

直到遇到“.”号,将t清零后重新开始累加。

4系统测试和使用说明

4.1系统测试

使用JDK运行程序时,将server子目录和client子目录下分别放在两台计算机上。

分别用来做服务器和客户端。

在服务器端的计算机上打开一个DOS窗口,使用命令:

JavacServer.java用来编译服务器上的源代码。

使用命令:

javaServer6666运行服务器程序Server,启动服务器端,DOS窗口显示:

网络益智游戏——服务器,如图5所示:

图5服务器运行界面

在另一台客户端的计算机上打开另一个DOS窗口,输入命令:

javacClient.java进行编译

然后输入命令:

javaClient192.168.0.726666

运行第客户端程序,Client执行后,windows窗口会显示如图6所示:

图6客户端程序的运行界面

4.2系统使用说明

由于字母和数字都是随机产生的,我们猜测字母的时候只能依靠我们子的运气去随机猜测,猜数字大小的时候,我们可以根据服务器给我们发过来的信息,来猜测。

5课程设计总结

5.1遇到的问题和解决方法

在用JAVA编写程序时,我遇到了很多困难,如怎样用Socket类实现客户端和服务器端的通信,怎样来把字符串转换为一个个的字符。

通过查阅相关书籍以及在网上搜索资料,我们了解到要使用类中的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]RobertC.Martin著,黄晓春译.UMLFORJAVAPROGRAMMERS.清华大学出版社,2004

7附录

(1)基本类的程序代码:

①Server类的代码:

import.*;

importjava.io.*;

importjava.util.*;

importjava.lang.String.*;

//服务器类

publicclassServer{

//存储套接字

staticDatagramSocketserv;

//存储端口号

staticintport;

//存放接收到的数据包中的信息

staticbyte[]info=newbyte[1000];

//存储接收到的数据包

staticDatagramPacketrec=newDatagramPacket(info,info.length);

//存储要发送的数据包

staticDatagramPacketsnd;

//存储要发送或提取出的信息

staticStringmsg;

//主方法

publicstaticvoidmain(String[]args){

System.out.println("网络益智游戏——服务器");

try{

//将第1个参数转化为端口号

port=(int)Float.parseFloat(args[0]);

//创建套接字

serv=newDatagramSocket(port);

//等待客户端连接

serv.receive(rec);

//输出加入游戏的计算机的IP地址

msg=newString(rec.getData(),0,rec.getLength());

System.out.println(msg+"加入游戏");

while(true){

//发送消息,让客户端选择要玩的游戏

msg="请选择游戏:

1.猜字母2.猜大小";

//数据封装

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());serv.send(snd);

//发送

serv.receive(rec);

//接收客户端的回复

msg=newString(rec.getData(),0,rec.getLength());

//如果是“quit”指令,终止程序

if(pareTo("quit")==0){

break;

}

//如果是“1”,选择猜数字游戏

if(pareTo("1")==0){

guessZimu();

}

//是“2”,选择猜大小游戏

else{

guessPro();

}

}

//关闭套接字

System.out.println("断开连接……");

serv.close();

}catch(SocketExceptionse){

se.printStackTrace();

}catch(IOExceptionie){

ie.printStackTrace();

}

}

//猜字母游戏的方法

staticvoidguessZimu(){

//储存生成的随机字母

charzimu;

//储存客户端发送来的答案

charans=0;

inti;

System.out.println("开始进行猜字母游戏……");

//生成随机的字母

zimu=getZimu();

//输出生成的随机字母

System.out.println(zimu+"");

System.out.println(ans+"");

//进行游戏

for(i=1;i<=10;i++)

{

//接受客户端发来的数据包

try{

serv.receive(rec);

}catch(IOExceptionie){

ie.printStackTrace();

}

//数据包中提取答案

msg=newString(rec.getData(),0,rec.getLength());

char[]chars=msg.toCharArray();

ans=chars[0];

//输出答案

System.out.println("第"+i+"次的答案:

");

System.out.println(ans+"");

//调用judge()方法判断答案的匹配情况

if(judge(zimu,ans)==1){

//如果答案完全匹配,返回正确的提示信息

msg="恭喜你猜对了!

";

System.out.println("答案正确");

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());

try{

serv.send(snd);}

catch(IOExceptionie){

ie.printStackTrace();}

break;

}

}

//如果超过10次未猜对,结束游戏

if(i>10){

//生成正确的答案

char[]n=newchar[1];

Stringstr=newString(n);

//返回游戏结束的提示信息

msg="没机会了,正确答案是:

"+str;

System.out.println("游戏结束");

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());

try{

serv.send(snd);

}

catch(IOExceptionie){

ie.printStackTrace();

}

}

}

//猜大小游戏的方法

staticvoidguessPro(){

intnum,i,j,t;

System.out.println("开始进行猜大小游戏……");

Randomrnd=newRandom();

//生成一个0~100的随机数(不含100)

num=rnd.nextInt(100);

//输出生成的随机数

System.out.println("生成的随机数:

"+num);

try{

//进行游戏

for(i=1;i<=10;i++){

//接收客户端发来的数据包

serv.receive(rec);

//提取其中的答案

msg=newString(rec.getData(),0,rec.getLength());

//将其转化为整数形式

t=(int)Float.parseFloat(msg);

//输出答案

System.out.print("第"+i+"次的答案:

"+msg+"");

//根据不同情况,返回相应的信息

if(t

msg="小了,再大点!

";

}

elseif(t>num){

msg="大了,再小点!

";

}

else{

msg="恭喜你猜对了!

";

}

System.out.println("结果:

"+msg);

//数据封装

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());

//发送

serv.send(snd);

//如果答案正确,输出提示信息,终止游戏

if(t==num){

System.out.println("答案正确");

break;

}

}

//如果超过10次未猜对,也终止游戏

if(i>10){

//生成正确答案

char[]n=newchar[2];

n[0]=(char)(num/10+48);

n[1]=(char)(num%10+48);

Stringstr=newString(n);

msg="没有机会了,正确答案是:

"+str;

System.out.println("游戏结束");

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());

serv.send(snd);

}

}catch(IOExceptionie){

ie.printStackTrace();

}

}

//判断答案匹配情况的方法

staticcharjudge(charzimu,charans){

inta=2;

if(ans==zimu){

a--;

}

else

{msg="你答错了";

byte[]buf=msg.getBytes();

snd=newDatagramPacket(buf,buf.length,rec.getAddress(),rec.getPort());

try{

serv.send(snd);

}catch(IOExceptionie)

{

ie.printStackTrace();

}

}

//如果答案匹配,则返回1

if(a==1){

return1;

}

//否则返回0

else{

return0;

}

}

//生成随机数的方法

staticchargetZimu()

{

//zimu数组存储生成的随机数

Randomrandom=newRandom();

intr=0;

r=random.nextInt(57)+65;

while(r>90&&r<97||r==0)

r=random.nextInt(57)+65;

charzimu=(char)r;

returnzimu;

}

}

②Client类的代码:

import.*;

importjava.io.*;

//客户端类

publicclassClient{

//存储套接字

staticDatagramSocketclient;

//存储端口号

staticintport;

//存放接收到的数据包中的信息

staticbyte[]info=newbyte[1000];

//存储接收到的数据包

staticDatagramPacketrec=newDatagramPacket(info,info.length);

//存储要发送的数据包

staticDatagramPacketsnd;

//存储要发送或提取出的信息

staticStringmsg;

//localHost变量存储本地主机的IP地址

//h

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1