疯狂贪吃蛇java实现课程设计报告Word格式文档下载.docx
《疯狂贪吃蛇java实现课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《疯狂贪吃蛇java实现课程设计报告Word格式文档下载.docx(45页珍藏版)》请在冰点文库上搜索。
![疯狂贪吃蛇java实现课程设计报告Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/8d75e377-b625-4a74-bcc4-72a112e1ef19/8d75e377-b625-4a74-bcc4-72a112e1ef191.gif)
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
.贪吃蛇窗墙则游戏结束3>
.退出提示。
文件/退出。
10
4.测试设置菜单.5.测试窗口大小菜单。
11
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){
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类
importjava.awt.FlowLayout;
importjavax.swing.ButtonGroup;
importjavax.swing.JCheckBoxMenuItem;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
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("
得
分: