Java 课程设计贪吃蛇.docx
- 文档编号:12818468
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:45
- 大小:476.44KB
Java 课程设计贪吃蛇.docx
《Java 课程设计贪吃蛇.docx》由会员分享,可在线阅读,更多相关《Java 课程设计贪吃蛇.docx(45页珍藏版)》请在冰豆网上搜索。
Java课程设计贪吃蛇
课程设计说明书
课程名称:
Java语言程序设计
设计题目:
学生成绩管理系统
院系:
计算机科学与信息工程学院
学生姓名:
肖文
学号:
***********
专业班级:
计算机科学与技术(14嵌入)
******
2015年12月27日
课程设计任务书
设计题目
贪吃蛇小游戏程序
学生姓名
肖文
所在院系
计科
专业、年级、班
14计科嵌入
设计要求:
1.贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。
2.游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。
3.游戏界面大小可以任意指定,数据从文件读入。
4.利用swing实现良好的GUI界面。
学生应完成的工作:
1.贪食蛇的前移算法主要是蛇身结点前移,后面的覆盖前面的蛇身结点。
依靠的调用编写的成员方法实现。
2.在贪吃蛇中蛇头来控制蛇的移动方向,依靠的调用编写的成员方法实现。
3.要求用户界面采用图形用户界面,影响方向键的控制。
4.重复的调用paint()函数来实现对界面的重绘和食物的重置。
5.源程序中要有充分的注释,报告中要有详细的流程图。
6.运行的结果以及图形用户界面要进行屏幕拷贝,插入报告中。
幕拷贝,插入报告中。
参考文献阅读:
1.《Java语言程序设计》(美)Y·DanielLiang机械工业出版社
2.赵毅主编.跨平台程序设计语言——Java.西安:
西安电子科技大学出版社,2006
3.王路群.Java高级程序设计.北京:
中国水利水电出版社,2006
工作计划:
1,12月21日,选择该课题,然后分析结构。
2,12月21日至25日开始编写各个模块。
3,12月28日至29日,对设计的系统进行测试以及进行修改。
4,12月30日,贪吃蛇完成。
任务下达日期:
2015年12月10日
任务完成日期:
2015年12月24日
指导教师(签名):
学生(签名):
贪吃蛇小游戏
摘要:
贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对于提前的我而言都是神秘的。
我希望通过自己所学知识把它剖析开来,真真正正的了解它的本质和精髓。
虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践的项目中提高自己的编程能力,因此我选定了这个项目。
关键词:
贪吃蛇;java;学习;放松
4.模块划分及调用关系8
9.附录源代码………………………………………………………………....16
1.设计背景
1.1问题描述
贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对于提前的我而言都是神秘的。
我希望通过自己所学知识把它剖析开来,真真正正的了解它的本质和精髓。
虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践的项目中提高自己的编程能力,因此我选定了这个项目。
1.2问题分析
这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,,也就是蛇尾不能改作蛇头。
当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。
图形的实现是从蛇头的新位置开始画出蛇。
用户可以用上下左右键控制蛇头的方向。
非常简单。
2.设计方案
2.1算法分析
1.贪吃蛇是很经典的格子游戏。
所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。
格子思想决定了此类游戏在设计时的算法思想。
2.方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。
3.方向键控制是上下左右对一个方块的控制,用四个判断语句实现。
4.蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个方块的位置,第三个方块移动到第二个方块的位置⋯⋯第N个方块移动到第N-1个方块的位置。
这样连续的移动就是蛇的移动了。
方向控制键控制了第一个方块的移动后,后面方块跟着移动,这样也实现了方向键控制对长蛇的移动。
5.食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。
6.蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。
因此有两个需要解决的问题:
问题一:
如何知道是否吃到食物?
问题二:
吃到食物后身体变长?
解决问题一的方法是需要一个判断语句,当蛇头即构成蛇的第一个方块跟食物所在方块的坐标一样时判断吃到食物。
解决问题二则要相对复杂一些,需要多个判断语句构成。
7.游戏结束的方法,当蛇碰到边框时或者吃到自己时游戏结束。
根据这个思想可以用判断语句实现。
然后是游戏结束后的处理,比如显示继续玩游戏还是退出游戏,并显示所吃到的食物的个数和时间等。
2.2类的设计
1>.创建的类的描述。
1.Login类,登陆界面要求输入登陆者输入用户名和密码,分别设Go和Cancel两个登陆选项。
Login
属性:
用户名密码
Go(进入游戏)Cancel(取消)
操作:
Enter()Close()
2.SnakeFrame类,创建游戏窗口主界面。
采用图形界面设计,有窗体,菜单栏和游戏操作界面。
3.SnakeModel类,此类为蛇的初始化状态及模型,所有的游戏的开始都通过此类初始化及对蛇的操作。
SnakeModel
属性:
rows,cols,snakeHead,runingDiriction,locRO,snake,playBlocks
snakeFood,gameScore,AddScore
操作:
LocationROgetSnakeHead(),LocationROgetSnakeTail(),
LocationgetRuningDiriction(),LinkedListgetSnake(),
LinkedListgetOthers(),getScore(),getAddScore(),
setSnakeHead(LocationsnakeHead),LocationROgetSnakeFood(),setSnakeFood(),moveTo(Objecta,LinkedListfromlist,LinkedListtolist),
init(),SnakeModel(introws1,intcols1),move(Locationdirection)
4.SnakePanel类,此类为游戏界面创建蛇的面板和蛇的移动控制实现。
SnakePanel
属性:
gridsPanel,row;col;gridsPanel;direction;snake;snakeBody;otherBlocks;snakeHead;snakeFood;gameScore=0;speed;
AddScore;t;isEnd;notExit;
操作:
SnakePanel(SnakeFrameparent,introw,intcol),newGame(longspeed)
stopGame(),returnGame(),getGameScore(),updateTextFiled(Stringstr)
updateColors(),run(),keyPressed(KeyEventevent)
keyReleased(KeyEventevent),keyTyped(KeyEventevent)
change(SnakeFrameparent,introw2,intcol2)
5.LocationRO类,随机生成的食物位置。
用来随机生成食物。
引导蛇的移动方向。
6.Location类,对蛇的位置的描述类。
Location
属性:
xy
操作:
Location(intx,inty),getX(),getY(),setX(intx),
setY(inty),equalOrRev(Locatione),equals(Locatione),
reverse(Locatione)
2>.类之间的调用关系。
3.用户界面
1.登陆界面
2.游戏主界面
【程序技巧】
1.为游戏设置权限,为游戏设置登陆界面。
2.游戏界面采用图形界面美观大方易操作。
3.功能齐全,可以选择开始,暂停,继续可以随时操控游戏状态,方便易操作,人性化设计。
4.设置菜单功能齐全,可以让界面显示网格和取消显示网格,还可以根据自己的实际能力情况选择游戏的等级。
5.窗口大小菜单可以根据自己的需要和爱好调整窗体的大小,可以选择大中小三种窗体。
适合不同的需要。
6.本程序设置了作者信息菜单可以查询程序的制作人的信息等。
7.对于新手用户,我为他们设置了操作指南菜单,帮助他们方便快捷的学会游戏的操作步骤。
4.模块划分及调用关系
主要模块
【模块流程图】
1.
游戏界面模块和登陆模块流程图。
2.游戏模块
否是
否
是
否
是
5.运行说明及系统运行测试
1.安装eclipse,在其上运行。
2.如图在eclipse中创建java项目,在src下建立SnakeGameDemo包将所有的源程序放入包中,在项目中建立img图片文件夹,将文件中需要的图片放入其中以便调用。
3.主函数在Login类中,只需运行Login.java程序进入登陆界面,输入用户名和密码进入游戏。
4.在文件菜单下开始,暂停,继续游戏。
5.对第一次进入的用户请先看操作说明。
1、程序上机调试报告
【语法错误及其排除】
1.将所有外部类定义为公共类,可以直接拿来应用,必须引入一个包来定义一个类来进行使用。
程序中的蛇是用网格布局中的小面板组成,蛇的身体由等大的小网格组成。
2.键盘事件未进行监听以致键盘操作无法进行,监听函数有错误。
最后加入正确的监听函数。
3.在eclipse上运行,程序出现乱码,通过调试编辑器解决。
【算法错误及其排除】
1.游戏开始出现的方块是随机给的,但每个游戏中只给一种形状的方块,最后将随机函数放在游戏开始中,程序方可执行;
2.贪吃蛇在吃掉一个食物后,不能实现分数累加,在游戏中改变成员方法
publicbooleangetAddScore(){
returnAddScore;
}
3.游戏在运行过程中不能暂停,在游戏中增加暂停控制
publicvoidstopGame(){
requestFocus();
isEnd=true;
}
2、程序测试结果
【测试数据】
1.游戏登陆测试,用户名:
,密码:
123456.
2.进入主界面。
3.测试文件菜单;游戏开始,贪吃蛇窗墙则游戏结束;退出提示。
4.测试设置菜单。
5.测试窗口大小菜单。
6.测试作者信息菜单。
7.测试帮助菜单。
【输出结果】
1.登陆测试2.进入主界面
3.测试文件菜单
文件主界面1>.菜单/开始
2>.贪吃蛇窗墙则游戏结束3>.退出提示。
文件/退出。
4.测试设置菜单.5.测试窗口大小菜单。
6.测试作者信息菜单。
7.测试帮助菜单。
6.收获与致谢
在做Java设计之前也有做过c语言的课程设计,但规模很小。
在管理系统、各种应用软件和游戏中,我觉得对游戏的设计还有点热情。
因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。
大学期间用c语言做过班级通讯录等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限。
综合运用以前所学习的知识,设计一个JAVA贪吃蛇游戏,并能实现以下的功能:
游戏界面登录、游戏开始、游戏暂停、游戏重新开始、游戏的结束和很好的图形化界面操作。
总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。
7.参考文献
1.《Java语言程序设计》(美)Y·DanielLiang机械工业出版社
2.赵毅主编.跨平台程序设计语言——Java.西安:
西安电子科技大学出版社,2006
3.王路群.Java高级程序设计.北京:
中国水利水电出版社,20068.附件
指导教师评语:
1、课程设计报告:
a、内容:
不完整□完整□详细□
b、方案设计:
较差□合理□非常合理□
c、实现:
未实现□部分实现□全部实现□
d、文檔格式:
不规范□基本规范□规范□
2、出勤:
全勤□缺勤次
3、答辩:
a、未能完全理解题目,答辩情况较差□
b、部分理解题目,部分问题回答正确□
c、理解题目较清楚,问题回答基本正确□
d、理解题目透彻,问题回答流利□
课程设计报告成绩:
,占总成绩比例:
50%
课程设计其它环节成绩:
环节名称:
出勤,成绩:
,占总成绩比例:
20%
环节名称:
答辩,成绩:
,占总成绩比例:
30%
总成绩:
指导教师签字:
年月日
附录
源代码:
packageSnakeGameDemo;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Graphics;
importjava.awt.GridLayout;
importjava.awt.Image;
importjava.awt.Label;
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('*');//回显字符为*用于输入密码,设置为不可见
b1=newJButton("Go");//新建按钮b1,b2
b2=newJButton("Cancel");
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分别加入容器cp
cp.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);
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{//插入登陆界面图片
Imageimg=Toolkit.getDefaultToolkit().getImage("imgs/201.jpg");//添加图片
publicvoidpaint(Graphicsg){
g.drawImage(img,0,0,this);
}
}
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;
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("等级");
ButtonGroupgroupDegree=newButtonGroup();
JRadioButtonMenuItemoneItem=newJRadioButtonMenuItem("初级");
JRadioButtonMenuItemtwoItem=newJRadioButtonMenuItem("中级");
JRadioButtonMenuItemthreeItem=newJRadioButtonMenuItem("高级");
//设置“窗口大小”菜单
JMenuwindowsMenu=newJMenu("窗口大小");
JMenuwindowsMenu1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 贪吃蛇 贪吃