




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java期中课程设计报告题目: 贪食蛇游戏程序 姓 名: 学 号: 院 系: 专 业: 年 级: 贪吃蛇游戏程序设计1、 基本内容描述运用java技术开发出贪吃蛇游戏,这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。图形的实现是从蛇头的新位置开始画出蛇。用户可以用上下左右键控制蛇头的方向,用空格键暂停或继续,非常简单!可以实现如下功能:1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。3. 游戏界面大小可以任意指定,数据从文件读入。4. 利用swing实现良好的GUI界面。2、 需求分析(1) 系统功能要求:1. 利用方向键来改变蛇的运行方向。2. 空格键暂停或继续游戏,并在随机的地方产生食物。3. 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。(2) 系统设计思路:1. 贪吃蛇是很经典的格子游戏。所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。格子思想决定了此类游戏在设计时的算法思想。2. 方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。3. 方向键控制是上下左右对一个方块的控制,用四个判断语句实现。4. 蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个方块的位置, 第三个方块移动到第二个方块的位置第N个方块移动到第N-1个方块的位置。这样连续的移动就是蛇的移动了。方向控制键控制了第一个方块的移动后,后面方块跟着移动 ,这样也实现了方向键控制对长蛇的移动。5. 食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。6. 蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。因此有两个需要解决的问题:问题一:如何知道是否吃到食物?问题二:吃到食物后身体变长?解决问题一的方法是需要一个判断语句,当蛇头即构成蛇的第一个方块跟食物所在方块的坐标一样时判断吃到食物。解决问题二则要相对复杂一些,需要多个判断语句构成。7. 游戏结束的方法,当蛇碰到边框时或者吃到自己时游戏结束。根据这个思想可以用判断语句实现 。然后是游戏结束后的处理,比如显示继续玩游戏还是退出游戏,并显示所吃到的食物的个数和时间等。3、 系统设计1. 总体设计和个模块设计 import javax.swing.*; import java.util.ArrayList; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.event.*; public class Snake extends JFrame final static int Width = 340; final static int Height = 450;final static int nodeWidth = 10;final static int nodeHeight = 10; /蛇身的坐标static int x;static int y;/食物的坐标static int fx;static int fy;static ArrayListsnakebody; /设置蛇身static int key ;static int l;static int t;static int speed;static Timer timer;static JLabel b=new JLabel(+l);/计分数的static JFrame sframe;/框架/设置蛇的坐标public static class Node int x; int y; int s; Node(int x, int y) this.x = x; this.y = y; /游戏面板public static class Gamepanel extends JPanel public Gamepanel() JPanel o=new JPanel(); JLabel a=new JLabel(SCORE); o.add(a); o.add(b); o.setLayout(new FlowLayout(FlowLayout.LEFT,30,0); add(o,BorderLayout.NORTH);timer=new Timer(speed,new TimerListener();timer.start(); protected void paintComponent(Graphics g) super.paintComponent(g); /将游戏背景填充成白色 g.setColor(Color.WHITE); g.fillRect(0,25,340,450); switch(key) case 0: eatfood(x,y+10);y=y+10;break; case 1: eatfood(x,y-10);y=y-10;break; case 2: eatfood(x-10,y);x=x-10;break; case 3: eatfood(x+10,y);x=x+10;break; default: ; snakebody.remove(snakebody.size()-1); /模拟移动,头部加一个尾部减一个 /如果吃上食物,则重新产生食物 if(x=fx&y=fy) eatfood(fx,fy); l+; changefood(); /刷新时间 speed=80-(l/10)*10; /使速度改变 timer.setDelay(speed); /将蛇头和蛇身还有食物填充在白色的背景下 g.setColor(Color.YELLOW); drawNode(g,snakebody.get(0); g.setColor(Color.BLACK); for(int i=1;i(Width-25)|(yHeight-70)|x0|y(Width-25)|y(Height-70)|x0|y25)x=55;y=55;return false;return true;/判断蛇身是否撞到自己public static boolean ifinbody(int fx,int fy)for(int i=1;isnakebody.size();i+)if(fx=snakebody.get(i).x&fy=snakebody.get(i).y)return true;return false;/画新加的头public static void drawNode(Graphics g, Node n) g.fillRect(n.x,n.y,nodeWidth,nodeHeight); /如果吃上食物,则在头部加一个public static void eatfood(int x,int y)Node n=new Node(x,y);snakebody.add(0,n);/改变食物的坐标public static void changefood()fx=25+(int)(Math.random()*10)*10; fy=25+(int)(Math.random()*20)*10;/开始游戏public static void startgame() x=55; y=55; /随机产生食物的坐标 fx=25+(int)(Math.random()*10)*10; fy=25+(int)(Math.random()*20)*10; snakebody=new ArrayList(); /蛇一开始往又走 key = 3; l=0; /设置空格暂停的标志 t=0; speed=80; Node n=new Node(50,50); /设置蛇身的坐标 snakebody.add(n); /标题 sframe = new JFrame(GreedySnake); Gamepanel panel=new Gamepanel(); /给框架设置监听器 sframe.addKeyListener ( new KeyListener() public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_DOWN: if(ifinbody(x,y+10)=false) key=0; break; case KeyEvent.VK_UP: if(ifinbody(x,y-10)=false) key=1; break; case KeyEvent.VK_LEFT: if(ifinbody(x-10,y)=false) key=2; break; case KeyEvent.VK_RIGHT: if(ifinbody(x+10,y)=false) key=3; break; /空格为暂停 case KeyEvent.VK_SPACE: if(t=0) timer.stop(); t=1; else timer.start(); t=0; break; default: ; public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) ); sframe.add(panel); /设置菜单框 JMenuBar menubar = new JMenuBar(); sframe.setJMenuBar(menubar); JMenu menu1=new JMenu(Game); JMenu menu2=new JMenu(Help); menubar.add(menu1); menubar.add(menu2); /分别写三个按钮的监听器 JMenuItem newgame=new JMenuItem(New Game); menu1.add(newgame);newgame.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event) newgame(); ); JMenuItem moption=new JMenuItem(Quit); menu1.add(moption);moption.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event) System.exit(0); ); JMenuItem about=new JMenuItem(About); menu2.add(about); about.addActionListener ( new ActionListener() public void actionPerformed( ActionEvent event ) timer.stop(); JOptionPane.showMessageDialog(null,GreedySnaken+Version 1.0n+Made by Sherlock); timer.start(); ); sframe.pack();sframe.setTitle(GreedySnake);sframe.setSize(Width,Height);sframe.setLocationRelativeTo(null);sframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);sframe.setVisible(true);public static void main(String args)startgame(); 2. 流程图或类图开始初始化界面和蛇身放置食物蛇开始运动蛇吃到食?蛇长大蛇死亡?继续?退出界面NNYNY游戏者按键选择Y4、 系统实现与测试系统实现工具我使用了NetBeans IDE 8.0在NetBeans下运行程序:运行结果初始界面: 试玩一段时间后的界面: 标题菜单栏Game:New Game Quit Help:About 5、 个人体会 通过一学期的学习,我对Java课程更加了解了,Java是一门功能强大的语言工具,在整个工程设计专题中我觉得贪吃蛇的游戏是最简单的,因此期中作业阅读了大量书籍,自己改了无数程序,终于完成了简单版本的贪食蛇。但是我的设计功能有限,还有好多地方值得加强。比如:游戏结束无显示,可以加一个游戏结束标志并显示分数等。 通过这次课程设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45706-2025眼镜镜片折射率试验方法
- 民航安全技术管理专业教学标准(高等职业教育专科)2025修订
- 2025年中国聚合丁苯橡胶(SSBR)行业市场全景分析及前景机遇研判报告
- 心理咨询案例培训课件
- 中国飞行模拟器行业市场发展现状及前景趋势与投资分析研究报告(2024-2030)
- 全自动凝胶成像系统行业深度研究分析报告(2024-2030版)
- 法治大培训课件
- 2025年中国芜菁种植行业市场运行现状及投资战略研究报告
- 中试总结报告范文
- 2025年 无锡市工会社会工作者招聘考试笔试试题附答案
- 2025年江苏高考政治试卷真题解读及答案讲解课件
- 2025上半年山东高速集团有限公司社会招聘211人笔试参考题库附带答案详解析集合
- 病媒生物防制,整改措施
- Q∕SY 1769-2014 油气井常规钢丝作业技术规范
- 正常分娩护理查房
- 部编版八年级历史(下)全册教案
- 2022年人教版二年级数学(下册)期末试卷及答案(汇编)
- JIS G3125-2021 高级耐大气腐蚀轧制钢材
- (完整版)学生课堂学习自我评价表
- 梁俊娇税收筹划课后思考题
- DTLDTC带式输送机工艺流程图
评论
0/150
提交评论