




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计实验报告Java Programming Assignment专 业:计算机科学与技术 班 级: 计科0803班 学 号: 0808030319 姓 名: 孙海涛 2011 年 6 月 10 日1、 任务(问题)描述 这个程序主要实现贪吃蛇的游戏,模仿现有的游戏,主要实现贪吃蛇的运动、产生食物,吃掉食物,改变方向,并且在吃掉食物后蛇体增长,得分增加。在碰到四周的边界或者撞到自身时,游戏结束,并且能实现游戏的暂停,开始和重新开始游戏的功能。二、设计与实现(多少个Java文件,每个文件中的类)类 名属 性方 法备 注SnakeGame无Public static void main(主方法)驱动类,用来构造主框架SnakeRunnableprivate Snake snakepublic SnakeRunnable(构造方法)主要实现蛇的前行控制线程private JPanel componentpublic void runStatusRunnableprivate JLabel scoreLabelpublic StatusRunnable(构造方法)控制蛇体状态更新的线程,根据蛇的状态更新各状态标签的内容private JLabel statusLabelprivate Snake snakepublic void runNodepublic static final int W(蛇节点的宽)public Node(构造方法)蛇体节点的类,包括蛇身各节点的高度,宽度,所在坐标等属性public static final int H(蛇节点的高)int x(蛇节点的横坐标)int y(蛇节点的纵坐标)Snakeboolean isRunpublic Snake该类是蛇主要行为的实现类,其中的属性包括蛇的运行状态,蛇的运行方向,蛇的速度,得分,产生的食物。主要的方法有:判断食物是否被吃掉的方法,是否碰撞的方法,产生食物的方法,改变方向的方法,控制移动的方法等。用ArrayList存蛇身各节点。ArrayListbodyprivate boolean isEatenNode foodprivate boolean isCollisionint directionpublic void makeFoodint statuspublic void changeDirectionint scorepublic void moveint speedSnakePanelSnake snakepublic void paintComponent次类主要完成在面板上绘蛇身,在每次SnakeRunnable线程执行一次就根据蛇的状态重绘蛇身。SnakeFrame包含面板中的各种组件的实例,如菜单条,菜单项,标签等。public SnakeFrame这是次游戏的主框架类,其中创建了各组件的对象,并且添加了事件监听和响应。private void initprivate void newGame附:源程序代码框架u 公共类:SnakeGame,主要是作为程序的入口,并且创建主框架的对象,设置界面设计与事件处理窗体背景和可见性public class SnakeGamepublic static void main(String args)SnakeFrame frame=new SnakeFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setBackground(Color.white);frame.setVisible(true);u 蛇运动的线程类:SnakeRunnable,主要通过线程的睡眠来控制蛇的间断性前行,每睡眠一次就重绘一次。class SnakeRunnable implements Runnablepublic SnakeRunnable(Snake snake,JPanel component)this.snake=snake;ponent=component;public void run()while(true)trysnake.move();component.repaint();Thread.sleep(snake.speed);catch(Exception e)private Snake snake;private JPanel component;u 更新蛇体状态的线程:StatusRunnableclass StatusRunnable implements Runnablepublic StatusRunnable(Snake snake,JLabel statusLabel,JLabel scoreLabel)this.statusLabel=statusLabel;this.scoreLabel=scoreLabel;this.snake=snake;public void run()String sta=;while(true)switch(snake.status)case Snake.RUNNING:sta=Running;break;case Snake.PAUSED:sta=Pause;break;case Snake.GAMEOVER:sta=GameOver;break;statusLabel.setText(sta);scoreLabel.setText(+snake.score);tryThread.sleep(100);catch(Exception e)private JLabel scoreLabel;private JLabel statusLabel;private Snake snake;u 蛇体节点的类:Nodeclass Nodepublic static final int W=20;public static final int H=20;int x;int y;public Node(int x,int y)this.x=x;this.y=y;u 蛇的实现类:Snake。主要完成蛇的状态改变以及碰撞检测,移动的功能,其中定义了蛇的各项属性:蛇的运行状态,蛇的前行方向,蛇的速度等,并且以静态常量的方式规定了具体的各属性的不同级别的大小。class Snakeboolean isRun;ArrayListbody;Node food;int direction;int score;int status;int speed;public static final int SLOW=500;public static final int MID=300;public static final int FAST=100;public static final int RUNNING=1;public static final int PAUSED=2;public static final int GAMEOVER=3;public static final int LEFT=1;public static final int UP=2;public static final int RIGHT=3;public static final int DOWN=4;public Snake()speed=Snake.SLOW;score=0;isRun=false;status=Snake.PAUSED;direction=Snake.RIGHT;body=new ArrayList();body.add(new Node(60,20);body.add(new Node(40,20);body.add(new Node(20,20);makeFood();.u 实现蛇体重绘的面板类:SnakePanel。该类中重写了paintComponent方法实现蛇体的动态重绘。class SnakePanel extends JPanelSnake snake;public SnakePanel(Snake snake)this.snake=snake;public SnakePanel()public void paintComponent(Graphics g)super.paintComponents(g);Node node=null;g.setColor(Color.cyan);for(int i=0;isnake.body.size();i+)node=snake.body.get(i);g.fillRect(node.x, node.y, node.H, node.W);node=snake.body.get(snake.body.size()-1);g.setColor(Color.gray);g.fillRect(node.x, node.y, node.H, node.W);node=snake.food;g.setColor(Color.red);g.fillRect(node.x, node.y, node.H, node.W);u 游戏主框架类:SnakeFrame该类完成了主页面的设计与控件的添加,并且完成了事件监听和处理的工作。class SnakeFrame extends JFrameprivate JLabel statusLabel;private JLabel speedLabel;private JLabel scoreLabel;private JPanel snakePanel;private Snake snake;private JMenuBar bar;JMenu gameMenu;JMenu helpMenu;JMenu speedMenu;JMenuItem newItem;JMenuItem pauseItem;. private void init()snakePanel=new JPanel();speedLabel=new JLabel();snake=new Snake();setSize(380,460);setLayout(null);this.setResizable(false);bar=new JMenuBar();gameMenu=new JMenu(Game);newItem=new JMenuItem(New Game);gameMenu.add(newItem);pauseItem=new JMenuItem();gameMenu.add(pauseItem);beginItem=new JMenuItem();gameMenu.add(beginItem);. private void newGame()this.remove(snakePanel);this.remove(statusLabel);this.remove(scoreLabel);this.remove(speedLabel);speedLabel=new JLabel();statusLabel=new JLabel();scoreLabel=new JLabel();/snakePanel=new JPanel();snake=new Snake();snakePanel=new SnakePanel(snake);snakePanel.setBackground(Color.white);snakePanel.setBounds(0,0,300,400);.3、 界面设计与事件处理主界面如下: 其顶层容器为Frame,添加了菜单条,其中包括游戏新建,速度控制等条目,还有蛇体运动的矩形框,是在面板中绘的。右侧还有显示蛇运行状态、速度、得分的标签。 游戏界面为:事件处理:本程序中主要是菜单事件和键盘事件。具体实现代码如下: 菜单事件:ActionListener l=new ActionListener()public void actionPerformed(ActionEvent e)if(e.getSource()=pauseItem)snake.isRun=false;if(e.getSource()=beginItem)snake.isRun=true;if(e.getSource()=newItem)newGame();if(e.getSource()=slowItem)snake.speed=Snake.SLOW;speedLabel.setText(Slow);if(e.getSource()=midItem)snake.speed=Snake.MID;speedLabel.setText(Mid);if(e.getSource()=fastItem)snake.speed=Snake.FAST;speedLabel.setText(Fast); 键盘事件addKeyListener(new KeyListener()public void keyPressed(KeyEvent e)switch(e.getKeyCode()case KeyEvent.VK_DOWN:snake.changeDirection(Snake.DOWN);break;case KeyEvent.VK_UP:snake.changeDirection(Snake.UP);break;case KeyEvent.VK_LEFT:snake.changeDirection(Snake.LEFT);break;case KeyEvent.VK_RIGHT:snake.changeDirection(Snake.RIGHT);break;case KeyEvent.VK_SPACE:if(snake.isRun=true)snake.isRun=false;snake.status=Snake.PAUSED;break;if(snake.isRun=false)snake.isRun=true;snake.status=Snake.RUNNING;break;四、(其它)该游戏的主要实现部分是怎样实现蛇的移动和实现蛇的变长,还有蛇体与边界以及与自身的碰撞检测。本程序运用多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城镇污水管网建设项目建设管理方案(参考)
- xx河流排水防涝设施建设项目质量管理方案(参考范文)
- 2025年非离子型纤维素醚项目合作计划书
- 宪法知识学习题库
- 2025年天猫养车项目发展计划
- 下关穴治疗疼痛的现代技术融合
- 无人驾驶电动拖拉机平台的设计及试验
- 现代泌尿肿瘤学阅读笔记
- 2025年GPS高空探测系统项目发展计划
- 文化旅游的发展
- 2025年贵州省中考语文试卷真题(含答案)
- 2025年广西公需科目答案02
- 人教精通版五年级上学期Lesson25教学课件
- 鲁教版九年级英语课文原文及翻译Unit1
- 《工业固废资源化技术及应用》课程教学大纲
- [北京]输变电工程标准工艺应用图册(图文并茂)
- 2020年雀巢公司北京总部十周年庆典暨雀巢家庭日活动策划案ppt课件
- 1000MW机组锅炉长伸缩式吹灰器检修规程
- 清关发票装箱单样本
- 地下水八大离子-阴阳离子平衡计算公式
- 广州人才绿卡申请表
评论
0/150
提交评论