计算机网络课程设计.docx
- 文档编号:8923994
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:16
- 大小:84.54KB
计算机网络课程设计.docx
《计算机网络课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
计算机网络课程设计
题目:
贪吃蛇
姓名:
学号:
院系:
信息科学与技术学院
专业:
信息管理与信息系统
班级:
指导教师:
完成时间:
目录
1.题目及要求1
1.1题目1
1.2要求1
2.功能设计1
3.详细设计1
3.1设计方法1
3.2各功能模块程序的流程图2
3.3运行与测试3
3.4本设计的重点、难点及解决方法4
4.总结4
5.参考文献4
6.源程序5
1.题目及要求
1.1题目
贪吃蛇游戏设计
1.2要求
1)运用java程序设计语言编写出此游戏代码;
2)通过java编译工具myeclipse成功编译程序;
3)再利用myeclipse工具导出jar包;
4)利用Jsmooth工具将导出的jar包转换成exe文件。
2.功能设计
1)publicclassSnakeextendsJPanel{}:
定义Snake类继承JPanel类;
2)publicSnake(JFramejf){initOther();}:
为顶级窗口类JFrame添加事件处理函数;
3)privatevoidmakeFood(){}:
随机生成一个食物的位置;
4)privatevoidinitOther(){}:
做一些初始化的工作;
5)privatevoidhandleRound(){}:
处理多少关的函数;
6)publicvoidpaintComponent(Graphicsg){}:
把自己的组件全部画出来;
7)publicvoidmove(){}:
蛇移动的方法;
8)privatebooleanisEat(){}:
判断是否吃到了食物;
9)privatebooleanisDead(){}:
判断是否死了;
10)publicvoiddraw(Graphicsg){}:
把自己画出来;
11)publicstaticvoidmain(Stringarsg[]){}:
主函数。
3.详细设计
3.1设计方法
1)publicclassSnakeextendsJPanel{}:
一个Snake类继承JPanel类,不但拥有JPanel所拥有的属性,同时它还可以自己拥有自己的属性;
2)publicSnake(JFramejf){initOther();}:
为顶级窗口类JFrame添加事件处理函数,如生成食物位置,蛇的移动等;
3)privatevoidmakeFood(){}:
随机生成一个食物的位置,增加了游戏的有趣性;
4)privatevoidinitOther(){}:
做一些初始化的工作,给某些变量赋值;
5)privatevoidhandleRound(){}:
在当今的流行游戏中,升级游戏受到到了大多数人的喜爱,因此这个游戏也需要设置一些关数,这样可以大大提高人们的兴趣;
6)publicvoidpaintComponent(Graphicsg){}:
利用此函数把自己的组件全部画出来,以实现其功能;
7)publicvoidmove(){}:
设置蛇移动的方法,蛇的移动是随机的,但也可以通过键盘的方向键来控制蛇的移动,以使其能迟到随机产生的食物;
8)privatebooleanisEat(){}:
判断蛇是否吃到了食物,如果吃到了食物,那么蛇的长度增加,并且分数增加,到到一定的分数,可以进入第二关;
9)privatebooleanisDead(){}:
判断蛇是否死了,如果死了,意味着游戏也就结束了;
10)publicvoiddraw(Graphicsg){}:
把自己画出来,使自己能够在设定范围内活动;
11)publicstaticvoidmain(Stringarsg[]){}:
这是一个主函数,控制全局,即整个函数。
3.2各功能模块程序的流程图
各功能模块程序的流程图如下所示:
3.3运行与测试
这是游戏的初始画面
游戏进行中的画面
蛇碰壁死亡
3.4本设计的重点、难点及解决方法
本设计的重点之处在于编程思想的形成,设计图象界面,产生随机食物及其位置。
同时通过软件工具的处理,将其转换为exe文件,使得该程序的运行可以随处运行,而不需要装java虚拟机;难点程序编写中,整个程序框架的架构。
这就要求我们不仅要对这个游戏的玩法特别熟悉,而且还要熟练掌握java语言。
4.总结
通过这次课程设计,使我们掌握了更多关于网络方面的知识,光靠书本来做一个课程设计,我想这使远远不够的,还需要我们参考其他的数目,了解更多的知识。
俗话说“实践是检验真理的唯一标准”。
只有通过了实践才真正知道自己学到了什么东西,才强迫自己去学习更多的知识,可以说一个课程设计胜过了一个学期所学的本门课程的知识。
检验了我们的动手能力,现在的社会是一个竞争强烈的社会,其中动手操作能力是我们整体能力的一个体现,也是非常重要的一面。
此次课程设计还让我们去学一门语言,掌握一门语言,为以后这门语言的学习奠定了基础。
5.参考文献
郑丽,王行言等著,Java语言程序设计,北京:
清华大学出版社,2008.
耿祥义,张跃平编著,Java2实用教程,北京:
清华大学出版社,2006.
吴功宜编著,计算机网络(第二版),北京:
清华大学出版社,2007.
谢希仁,计算机网络教程,北京:
人民邮电出版社,2002.
6.源程序
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
importstaticjava.lang.Math.*;//静态导入
publicclassSnakeextendsJPanel{
privatestaticfinallongserialVersionUID=-2635820568420267379L;
privateStringdir;//要走的方向
privateintblockWidth=10;//块大小
privateintblockSpace=2;//块之间的间隔
privatelongsleepTime;//重画的进间间隔
privateMySnakemy;
privateinttotal;//代表蛇的长度
privateRectanglefood;//代表蛇的食物
privatevolatilebooleango;
privateintround;//表示第几关
publicSnake(JFramejf){
initOther();
//为顶级窗口类JFrame添加事件处理函数
jf.addKeyListener(newKeyAdapter(){
publicvoidkeyReleased(KeyEventke){
intcode=ke.getKeyCode();
if(code==KeyEvent.VK_RIGHT){
if(dir!
="WEST")
dir="EAST";
}
elseif(code==KeyEvent.VK_LEFT){
if(dir!
="EAST")
dir="WEST";
}
elseif(code==KeyEvent.VK_UP){
if(dir!
="SOUTH")
dir="NORTH";
}
elseif(code==KeyEvent.VK_DOWN){
if(dir!
="NORTH")
dir="SOUTH";
}
elseif(code==KeyEvent.VK_ENTER){
if(!
go)
initOther();
}
}
});
this.setBounds(300,300,400,400);
this.setVisible(true);
}
//随机生成一个食物的位置
privatevoidmakeFood(){
intx=40+(int)(random()*30)*12;
inty=10+(int)(random()*30)*12;
food=newRectangle(x,y,10,10);
}
//做一些初始化的工作
privatevoidinitOther(){
dir="EAST";
sleepTime=500;
my=newMySnake();
makeFood();
total=3;
round=1;
newThread(newRunnable(){
publicvoidrun(){
go=true;
while(go){
try{
Thread.sleep(sleepTime);
repaint();
}
catch(Exceptionexe){
exe.printStackTrace();
}
}
}
}).start();
}
//处理多少关的函数
privatevoidhandleRound(){
if(total==6){
round=2;
sleepTime=300;
}
elseif(total==10){
round=3;
sleepTime=200;
}
elseif(total==15){
round=4;
sleepTime=100;
}
elseif(total==18){
round=5;
sleepTime=50;
}
elseif(total==20){
round=6;
sleepTime=20;
}
elseif(total>21){
round=7;
sleepTime=15;
}
}
//把自己的组件全部画出来
publicvoidpaintComponent(Graphicsg){
g.setColor(Color.PINK);
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.setColor(Color.BLACK);
g.drawRect(40,10,358,360);
if(go){
my.move();
my.draw(g);
g.setFont(newFont("黑体",Font.BOLD,20));
g.drawString("您的得分:
"+(total*10)+"第"+round+"关",40,400);
}
else{
g.setFont(newFont("黑体",Font.BOLD,20));
g.drawString("游戏结束,按回车(ENTER)键重玩!
",40,440);
}
g.setColor(Color.RED);
g.fillRect(food.x,food.y,food.width,food.height);
}
privateclassMySnake{
privateArrayList
publicMySnake(){
list=newArrayList
list.add(newRectangle(160+24,130,10,10));
list.add(newRectangle(160+12,130,10,10));
list.add(newRectangle(160,130,10,10));
}
//蛇移动的方法
publicvoidmove(){
if(isDead()){
go=false;
return;
}
if(dir=="EAST"){
Rectanglerec=list.get(0);//找到蛇头
Rectanglerec1=newRectangle(rec.x+(blockWidth+blockSpace),rec.y,rec.width,rec.height);
list.add(0,rec1);
}
elseif(dir=="WEST"){
Rectanglerec=list.get(0);
Rectanglerec1=newRectangle(rec.x-(blockWidth+blockSpace),rec.y,rec.width,rec.height);
list.add(0,rec1);
}
elseif(dir=="NORTH"){
Rectanglerec=list.get(0);
Rectanglerec1=newRectangle(rec.x,rec.y-(blockWidth+blockSpace),rec.width,rec.height);
list.add(0,rec1);
}
elseif(dir=="SOUTH"){
Rectanglerec=list.get(0);
Rectanglerec1=newRectangle(rec.x,rec.y+(blockWidth+blockSpace),rec.width,rec.height);
list.add(0,rec1);
}
if(isEat()){
handleRound();
makeFood();
}
else{
list.remove(list.size()-1);
}
}
//判断是否吃到了食物
privatebooleanisEat(){
if(list.get(0).contains(food)){
total++;
returntrue;
}
else
returnfalse;
}
//判断是否死了,如果碰壁或者自己吃到自己都算死了
privatebooleanisDead(){
Rectangletemp=list.get(0);
if(dir=="EAST"){
if(temp.x==388)
returntrue;
else{
Rectanglecomp=newRectangle(temp.x+12,temp.y,10,10);
for(Rectanglerec:
list){
if(rec.contains(comp))
returntrue;
}
}
returnfalse;
}
elseif(dir=="WEST"){
if(temp.x==40)
returntrue;
else{
Rectanglecomp=newRectangle(temp.x-12,temp.y,10,10);
for(Rectanglerec:
list){
if(rec.contains(comp))
returntrue;
}
}
returnfalse;
}
elseif(dir=="NORTH"){
if(temp.y==10)
returntrue;
else{
Rectanglecomp=newRectangle(temp.x,temp.y-12,10,10);
for(Rectanglerec:
list){
if(rec.contains(comp))
returntrue;
}
}
returnfalse;
}
elseif(dir=="SOUTH"){
if(temp.y==358)
returntrue;
else{
Rectanglecomp=newRectangle(temp.x,temp.y+12,10,10);
for(Rectanglerec:
list){
if(rec.contains(comp))
returntrue;
}
}
returnfalse;
}
else{
returnfalse;
}
}
//把自己画出来
publicvoiddraw(Graphicsg){
for(Rectanglerec:
list){
g.fillRect(rec.x,rec.y,rec.width,rec.height);
}
}
}
publicstaticvoidmain(Stringarsg[]){
JFramejf=newJFrame("贪吃蛇");
Snakes=newSnake(jf);
jf.getContentPane().add(s,BorderLayout.CENTER);
jf.setBounds(300,300,500,500);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计