疯狂贪吃蛇java实现课程设计报告.docx
- 文档编号:11463382
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:45
- 大小:1.10MB
疯狂贪吃蛇java实现课程设计报告.docx
《疯狂贪吃蛇java实现课程设计报告.docx》由会员分享,可在线阅读,更多相关《疯狂贪吃蛇java实现课程设计报告.docx(45页珍藏版)》请在冰豆网上搜索。
疯狂贪吃蛇java实现课程设计报告
安阳工学院计算机科学与信息工程学院
JAVA程序设计课程综合项目报告
项目题目:
疯狂贪吃蛇
专业班级:
11计科信息
学生姓名:
潘强
学生学号:
201103020005指导教师姓名:
许研
2013年12月
一、系统目标..............................................3
二、系统设计思路..........................................3
三、系统详细设计..........................................4
四、系统实现..............................................8
五、系统设计总结.........................................14
六、参考文献.............................................15
2
疯狂贪吃蛇
一、系统目标
运用java技术开发出贪吃蛇游戏,这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。
当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。
图形的实现是从蛇头的新位置开始画出蛇。
用户可以用上下左右键控制蛇头的方向。
非常简单!
可以实现如下功能:
1.贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。
2.游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。
3.游戏界面大小可以任意指定,数据从文件读入。
4.利用swing实现良好的GUI界面。
二、系统设计思路
1.贪吃蛇是很经典的格子游戏。
所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。
格子思想决定了此类游戏在设计时的算法思想。
2.方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。
3.方向键控制是上下左右对一个方块的控制,用四个判断语句实现。
4.
蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个
方块的位置,第三个方块移动到第二个方块的位置⋯⋯第N个方块移动到第N-1
3
个方块的位置。
这样连续的移动就是蛇的移动了。
方向控制键控制了第一个方块的移动后,后面方块跟着移动,这样也实现了方向键控制对长蛇的移动。
5.食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。
6.蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。
因此有两个需要解决的问题:
问题一:
如何知道是否吃到食物?
问题二:
吃到食物后身体变长?
解决问题一的方法是需要一个判断语句,当蛇头即构成蛇的第一个方块跟食物所在方块的坐标一样时判断吃到食物。
解决问题二则要相对复杂一些,需要多个判断语句构成。
7.游戏结束的方法,当蛇碰到边框时或者吃到自己时游戏结束。
根据这个思想可以用判断语句实现。
然后是游戏结束后的处理,比如显示继续玩游戏还是退出游戏,并显示所吃到的食物的个数和时间等。
三、系统详细设计
【类的设计】
1>.创建的类的描述。
1.Login类,登陆界面要求输入登陆者输入用户名和密码,分别设Go和Cancel两个登陆选项。
2.SnakeFrame类,创建游戏窗口主界面。
采用图形界面设计,有窗体,菜单栏和游戏操作界面。
3.SnakeModel类,此类为蛇的初始化状态及模型,所有的游戏的开始都通过此类初始化及对蛇的操作。
4
Login登陆
setSnakeFood(),moveTo(Objecta,LinkedListfromlist,LinkedList
tolist),
init(),SnakeModel(introws1,intcols1),move(Locationdirection)
4.SnakePanel类,此类为游戏界面创建蛇的面板和蛇的移动控制实现。
属性:
gridsPanel,row;col;gridsPanel;direction;snake;snakeBody;otherBlocks;snakeHead;snakeFood;
gameScore=0;speed;
AddScore;t;isEnd;notExit;
5.LocationRO类,随机生成的食物位置。
用来随机生成食物。
引导蛇的移动方向。
6.Location类,对蛇的位置的描述类。
2>.类之间的调用关系。
【用户界面】
1.登陆界面2.游戏主界面
5
【程序技巧】
1.为游戏设置权限,为游戏设置登陆界面。
2.游戏界面采用图形界面美观大方易操作。
3.功能齐全,可以选择开始,暂停,继续可以随时操控游戏状态,方便易操作,人性化设计。
4.设置菜单功能齐全,可以让界面显示网格和取消显示网格,还可以根据自己的实际能力情况选择游戏的等级。
5.窗口大小菜单可以根据自己的需要和爱好调整窗体的大小,可以选择大中小三种窗体。
适合不同的需要。
6.本程序设置了作者信息菜单可以查询程序的制作人的信息等。
7.对于新手用户,我为他们设置了操作指南菜单,帮助他们方便快捷的学会游戏的操作步骤。
【模块划分及调用关系】
6
主要模块
开始
结束
【模块流程图】
1.游戏界面模块和登陆模块流程图。
开始
输入用户名和密码
结束
7
2.游戏模块
是否结束
否
暂停
是
是否开
是否碰到蛇身\墙
否是否吃到食物
是
是
束
四、系统实现
【测试数据】
1.游戏登陆测试,用户名:
杨文,密码:
123456.
2.进入主界面。
3.测试文件菜单;游戏开始,贪吃蛇窗墙则游戏结束;退出提示。
4.测试设置菜单。
5.测试窗口大小菜单。
6.测试作者信息菜单。
7.测试帮助菜单。
【输出结果】
1.登陆测试2.进入主界面
8
3.测试文件菜单
文件主界面1>.菜单/开始
9
2>.贪吃蛇窗墙则游戏结束3>.退出提示。
文件/退出。
10
4.测试设置菜单.5.测试窗口大小菜单。
11
6.测试作者信息菜单。
12
7.测试帮助菜单。
13
五、系统设计总结
通过一学期的学习,我自己认为自己学java没学好,而在整个新技术专题中我觉得贪吃蛇的游戏应该是最简单的。
通过这次课程设计,我对java又有了更深刻的认识。
也有了更深一步的喜爱,决定一定要努力学好java,并能更好的应用于以后的工作中。
这次贪吃蛇的设计,我做的不是很完美,也没想象中的那么好,但也获得了许多宝贵的经验:
1)在设计程序之前,务必要对自己所要设计的题目和内容有一个系统的,大概的了解,知道所设计的题目和内容包含哪些资源。
14
2)设计程序采用什么编程语言并不是非常重要,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。
3)在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩及成绩的一种必经之路。
4)要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白自己的思路,这样也为资料的保存和交流提供了方便。
在以后的学习和工作中,我希望我能把这些经验应用起来。
为以后的工作顺利进行,也让自己获得一定的能力,能够拥有一份好的工作。
六、参考文献
[1]
[2]
魏伟译.JBuilder开发人员指南[M].北京:
机械工业出版社,2001.1.胡雷,叶曙光,徐饪.JBuilder9.0入门与提高[M].北京:
机械工业出
版社,2004.
[3]
[4]
田勇,孙新.Jbuilder开发人员指南[M].北京:
机械工业出版社,2001.李尊朝,苏军.Java语言程序设计(第二版)[M].北京:
中国铁道出版社
2009.
[5]
黄晓东.Java课程设计案例精编(第二版)[M].北京:
中国水利水电出版
社,2008.
[6]
陆光义,宋现锋.Java游戏编程导学[M].北京:
清华大学出版社.
2004.
附件:
详细代码
1.Login类
packageSnakeGameDemo;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Graphics;
importjava.awt.GridLayout;
importjava.awt.Image;
importjava.awt.Label;
15
importjava.awt.Panel;
importjava.awt.TextField;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
//登陆界面
publicclassLoginextendsJFrame{
privateTextFieldf1;//创建文本框
privateTextFieldf2;
privateJButtonb1;//创建按钮
privateJButtonb2;
publicLogin(){//登陆界面
Containercp=getContentPane();//获取容器cp.setLayout(newGridLayout(4,1));//设置布局管理为网格四行
一列
Labell1=newLabel("用户名");//创建标签了l1,l2
Labell2=newLabel("密
码");
Panelp1=newPanel();//创建面板,p1,p2,p3,p4
Panelp2=newPanel();
Panelp3=newPanel();
MyPanel1p4=newMyPanel1();//创建插入图片平面p4
f1=newTextField(10);
f2=newTextField(10);
f2.setEchoChar('*');//回显字符为*用于输入密码,设置为不可
见
16
b1=newJButton("确定");//新建按钮b1,b2
b2=newJButton("取消");
p1.add(l1);//第一行添加label1
p1.add(f1);
p2.add(l2);
p2.add(f2);
p3.add(b1);
p3.add(b2);
cp.add(p4);//面板p4,p1,p2,p3分别加入容器cpcp.add(p1);
cp.add(p2);
cp.add(p3);
b1.addActionListener(newEnter());//添加按钮事件响应b2.addActionListener(newClose());
}
classEnterimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
JButtonbt=(JButton)e.getSource();
if((f1.getText()).equals("潘强")&&(f2.getText()).
equals("123456")
&&bt==b1)
{
JFrame.setDefaultLookAndFeelDecorated(true);SnakeFrameframe=newSnakeFrame();//创建游戏
主界面
frame.setSize(frame.col*11+11,frame.row*11+100);
frame.setResizable(false);
17
frame.setLocation(500,200);//设置窗体位置frame.setTitle("疯狂贪吃蛇");frame.setVisible(true);
}
elseJOptionPane.showMessageDialog(null,"用户
名或密码错误,请重新登录!
");//错误用户提示
}
}
classCloseimplementsActionListener{//关闭登陆按钮响应publicvoidactionPerformed(ActionEvente){
JButtonbt=(JButton)e.getSource();
if(bt==b2){
System.exit(0);//退出
}
}
}
//主函数程序开始
publicstaticvoidmain(String[]args){
Loginlog=newLogin();
log.setTitle("疯狂贪吃蛇界面登陆");
log.setBounds(500,200,300,300);
log.setBackground(Color.blue);
log.setVisible(true);
}
}
classMyPanel1extendsJPanel{//插入登陆界面图片
Image
img=Toolkit.getDefaultToolkit().getImage("imgs/201.jpg");//添加
18
图片
publicvoidpaint(Graphicsg){g.drawImage(img,0,0,this);
}
}
2.SnakeFrame类
packageSnakeGameDemo;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.FlowLayout;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.ButtonGroup;
importjavax.swing.JCheckBoxMenuItem;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JRadioButtonMenuItem;
importjavax.swing.JTextField;
importSnakeGameDemo.SnakePanel;
19
publicclassSnakeFrameextendsJFrameimplementsActionListener{
introw=20;
intcol=30;
SnakePanelp=newSnakePanel(this,row,col);
JMenuBarmenubar=newJMenuBar();//菜单条
JMenufileMenu=newJMenu("文件");//菜单
JMenuItemnewgameitem=newJMenuItem("开始");//菜单条目JMenuItemstopitem=newJMenuItem("暂停");
JMenuItemrunitem=newJMenuItem("继续");
JMenuItemexititem=newJMenuItem("退出");
//"设置"菜单
JMenuoptionMenu=newJMenu("设置");
/*
*等级选项
*ButtonGroup
创建一组按钮选项
*JRadioButtonMenuItem是属于一组菜单项中的一个菜单项,该组中只能选择一个项。
*被选择的项显示其选择状态。
选择此项的同时,其他任何以前被选择的项都切换到未选择状
态。
*Panel是最简单的容器类。
应用程序可以将其他组件放在面板提供的空间内,这些组件包括
其他面板。
*/
JMenudegreeMenu=newJMenu("等级");
20
ButtonGroupgroupDegree=newButtonGroup();JRadioButtonMenuItemoneItem=newJRadioButtonMenuItem("
初级");
JRadioButtonMenuItemtwoItem=newJRadioButtonMenuItem("
中级");
JRadioButtonMenuItemthreeItem=new
JRadioButtonMenuItem("高级");
//设置“窗口大小”菜单
JMenuwindowsMenu=newJMenu("窗口大小");
JMenuwindowsMenu1=newJMenu("视图");
ButtonGroupgroupDegree1=newButtonGroup();JRadioButtonMenuItemminItem=newJRadioButtonMenuItem("
小");
JRadioButtonMenuItemmidItem=newJRadioButtonMenuItem("
中");
JRadioButtonMenuItemmaxItem=newJRadioButtonMenuItem("
大");
//设置“作者信息”菜单
JMenuXinXi=newJMenu("关于开发者");
JMenuItemXinXiItem=newJMenuItem("软件相关");
//设置“帮助”菜单
JMenuhelpMenu=newJMenu("帮助");
JMenuItemhelpItem=newJMenuItem("操作指南");
//可以被选定或取消选定的菜单项.
finalJCheckBoxMenuItemshowGridItem=newJCheckBoxMenuItem("显示网格");
JLabelscorelabel;//为分数创建标签
publicJTextFieldscoreField;//显示分数的文本框
privatelongspeedtime=200;
21
privateStringhelpstr="游戏说明:
\n1:
方向键控制蛇移动的方向."+
"\n2:
单击菜单'文件->开始'开始游戏."+
"\n3:
单击菜单'文件->暂停'或者单击键盘空格键暂停游戏."+"\n4:
单击菜单'文件->继续'继续游戏."+
"\n5:
单击菜单'设置->等级'可以设置难度等级."+
"\n6:
单击菜单'设置->显示网格'可以设置是否显示网格."+"\n7:
红色为食物,吃一个得10分同时蛇身加长."+
"\n8:
蛇不可以出界或自身相交,否则结束游戏.";
SnakeFrame(){
setJMenuBar(menubar);
fileMenu.add(newgameitem);
fileMenu.add(stopitem);
fileMenu.add(runitem);
fileMenu.add(exititem);
menubar.add(fileMenu);
oneItem.setSelected(true);//设置可选择
groupDegree.add(oneItem);
groupDegree.add(twoItem);
groupDegree.add(threeItem);
degreeMenu.add(oneItem);
degreeMenu.add(twoItem);
degreeMenu.add(threeItem);
optionMenu.add(degreeMenu);
minItem.setSelected(true);
groupDegree1.add(minItem);
groupDegree1.add(midItem);
groupDegree1.add(maxItem);
22
windowsMenu1.add(minItem);
windowsMenu1.add(midItem);
windowsMenu1.add(maxItem);
windowsMenu.add(windowsMenu1);
//风格选项
showGridItem.setSelected(true);
optionMenu.add(showGridItem);
menubar.add(optionMenu);
helpMenu.add(helpItem);
XinXi.add(XinXiItem);
menubar.add(windowsMenu);
menubar.add(XinXi);
menubar.add(helpMenu);
Containercontentpane=getContentPane();contentpane.setLayout(newFlowLayout());//设置布局管理contentpane.add(p);
scorelabel=newJLabel("得
分:
"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 疯狂 贪吃 java 实现 课程设计 报告