JAVA开放性实验报告贪吃蛇(共12页)_第1页
JAVA开放性实验报告贪吃蛇(共12页)_第2页
JAVA开放性实验报告贪吃蛇(共12页)_第3页
JAVA开放性实验报告贪吃蛇(共12页)_第4页
JAVA开放性实验报告贪吃蛇(共12页)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子与信息工程系开放性实验报告 JAVA程序设计开放性实验报告 专 业: 计算机科学与技术 班 级: 2012级2班 学 号: 姓 名: 实验2贪吃蛇游戏设计(4学时)1.实验内容(1) 创建软件主窗体和相关控制菜单;在窗体中以图形模拟蛇的形状,使用键盘控制图形在窗体中任意移动,模拟贪吃蛇的行为.(2) 在窗体中可以设置障碍或奖励物品,以达到游戏的娱乐性。2.预习内容Java GUI编程;鼠标和键盘的事件处理;Java多媒体编程。3.实验类型综合性4.实验目的(1)了解JavaGUI编程特别是窗体,菜单;熟悉Java的事件委托处理机制,能完成鼠标和键盘的事件处理;(2)熟悉Java中的多媒体技

2、术如:音频文件的播放控制,游戏中各种事件的音效添加。熟悉Java中的绘图操作,可以使用绘图函数进行图形的绘制和重绘等基本操作;(3)熟悉模块的划分及游戏控制类的编写,了解相关的游戏设计和实现模式;(4)设计可视化界面,添加其他必要组件,对窗体进行相应的键盘事件处理,使蛇能移动,依据实验内容结合自己的设计想法,实现模拟贪吃蛇的游戏效果。5.实验要求依据实验内容,编写相关类,实现所需软件功能。6实验过程(分析设计、源文件、执行结果)代码如下:1、Node类public class Node private int x;private int y;public Node()public Node(i

3、nt x,int y)this.x=x;this.y=y;public int getX()return x;public void setX(int x)this.x=x;public int getY()return y;public void setY(int y)this.y=y;public String toString()/方便类型转换/括号里不是String类型通过toString来转换,不然会输出一个地址return(+x+,+y+);Override /伪代码可以理解为注释,重写:下面的方法名是否在父类中存在,如果没有/的话会报错。/public int hashCode(

4、)/假设Node是list集合里面,只有把Node节点对象 /放在set集合时候写hashCode();final int prime = 31;int result = 1;result=prime*result+x;result=prime*result+y;return result;Override/比较Node对象是否在同一坐标都要写上equals方法public boolean equals(Object obj)if(this=obj)return true;if(this=null)return false;if(getClass()!=obj.getClass()return

5、 false;Node other=(Node)obj;if(x!=other.x)return false;if(y!=other.y)return false;return true;2、Worm 类import java.util.LinkedList;public class Worm private LinkedList worm = new LinkedList();int dir;public static final int UP = -1;public static final int DOWN = 1;public static final int LEFT = -10;p

6、ublic static final int RIGHT = 10;public static final int ROWS = 400;/ROWS行。宽度范围,public static final int COLS = 500;/COLS列。长度范围public Worm() getWorm().add(new Node(90, 90);/第90行90列,蛇扩大10倍getWorm().add(new Node(80, 90);getWorm().add(new Node(70, 90);getWorm().add(new Node(60, 90);getWorm().add(new No

7、de(50, 90);dir = RIGHT; public void step() / 走一步Node head=getWorm().get(0);/ 找到头节点int x = head.getX() + dir / 10 * 10;/X,Y横坐标与纵坐标int y = head.getY() + dir % 10 * 10;if (x 0 & x 0 & y Worm.ROWS - 30& !getWorm().contains(new Node(x, y) /!getWorm().contains(new Node(x, y)是否落到蛇身上getWorm().addFirst(new N

8、ode(x, y);getWorm().removeLast();/删除 else dir = 100;throw new RuntimeException(你错了!);public void step(int dir) / 控制蛇走的方向this.dir = dir;step();public LinkedList getLinkedListWorm() return getWorm();public String toString() return getWorm().toString();/输出蛇public LinkedList getWorm() return worm;public

9、 void setWorm(LinkedList worm) this.worm = worm;3、WormDemo类import java.awt.Cursor;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;public class WormDemo extends JFrame /p

10、rivate Wormpanel panel;private static int dir;public WormDemo()panel=new Wormpanel();/形成蛇的界面add(panel);/将蛇面板放到游戏里面去setTitle(贪吃蛇);/题目setSize(500+15,400+35);/大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/关闭窗口就是关闭程序setCursor(new Cursor(12);/定义鼠标属性setVisible(true);/可视化为truepanel.requestFocus();/面板后区

11、信息焦点setLocationRelativeTo(null);/设置窗口组建定义的位置this.setResizable(false);public static void main(String args)final WormDemo wd=new WormDemo();/new一个自己创建的一个属性游戏窗口/设置一个监听JMenuBar jmb=new JMenuBar();/导包,然后设置wd.setJMenuBar(jmb);/往自己new的窗口加上监听JMenu fm=new JMenu(选项);jmb.add(fm);JMenuItem mi=new JMenuItem(重新再来

12、);/mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)wd.panel.setWorm(new Worm();wd.panel.setN(10);wd.panel.setFoods(wd.panel.initFoods(wd.panel.n);wd.panel.setT(1000);wd.panel.repaint();/重新画wd.repaint(););fm.add(mi);JMenuItem mi2=new JMenuItem(暂停);mi2.addActionListe

13、ner(new ActionListener()public void actionPerformed(ActionEvent e)dir=wd.panel.getWorm().dir;wd.panel.getWorm().dir=-100;);fm.add(mi2);JMenuItem mi3=new JMenuItem(开始);mi3.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)/dir=wd.panel.getWorm().dir;wd.panel.getWorm().di

14、r=dir;);fm.add(mi3);4、 Wormpanel 类import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.HashSet;import java.util.Iterator;import java.util.Ran

15、dom;import java.util.Set;import javax.imageio.ImageIO;import javax.swing.JPanel;/JPanelpublic class Wormpanel extends JPanel/蛇的面板上有蛇,食物 private static final String TOOL_TIP_TEXT_KEY_ERROR = null;private Worm worm; private MoveListener listener=new MoveListener();/监听器 private Set foods=new HashSet();

16、/设置食物 public int n=10;/个数 public int t=1000;/时间 public int getN() return n; public void setN(int n) this.n=n; public int getT() return t; public void setT(int t) this.t=t; public void setFoods(Setfoods) this.foods=foods; private Service se =new Service(); public Wormpanel() setWorm(new Worm();/生成一条蛇

17、 foods=initFoods(n);/生成食物 addKeyListener(listener);/加上监听器,监听键盘 se.start();/启动线程 public Set initFoods(int n) Setfoods=new HashSet();/食物也是Random random=new Random();for(;)int x=random.nextInt(480)/10*10+10;int y=random.nextInt(360)%10*10+10;if(getWorm().getLinkedListWorm().contains(new Node(x,y)/检查食物是

18、否在蛇上continue;foods.add(new Node(x,y);if(foods.size()=n)break;return foods;/加入背景图片public static BufferedImage image;public static BufferedImage getImage() return image;public static void setImage(BufferedImage image)Wormpanel.image=image;/制作面板,形成面板的形式public void paint(Graphics g)super.paint(g);this.r

19、equestFocus();/设置接收信息/this.setBackground(Color.blue);/背景色tryg.drawImage(ImageIO.read(Wormpanel.class.getResource(yy.jpg), 0, 0, null);catch(IOException e)e.printStackTrace();g.setColor(Color.gray);/画笔色g.fill3DRect(0, 0, 502, 10, false);g.fill3DRect(500, 0, 11, 385, false);g.fill3DRect(0, 375, 520, 1

20、0, false);g.fill3DRect(0, 0, 10, 502, false);for(int i=0;igetWorm().getLinkedListWorm().size();i+)/画虫g.setColor(Color.cyan);/蓝绿色g.fill3DRect(getWorm().getLinkedListWorm().get(i).getX(),getWorm().getLinkedListWorm().get(i).getY(),10,10,false);/虫子的一节if(foods.size()=0)foods=initFoods(+n);t=t-200;Iterat

21、orfood=foods.iterator();g.setColor(Color.GREEN);while(food.hasNext()Node f=food.next();g.fill3DRect(f.getX(), f.getY(), 10, 10, false);/画结束界面public void paintEnd(Graphics g)g.setColor(Color.red);/设置画笔颜色g.setFont(new Font(TOOL_TIP_TEXT_KEY,ERROR,30);g.clearRect(0, 150, 550, 100);g.setColor(Color.blac

22、k);g.fill3DRect(0, 150, 550, 100, false);g.clearRect(150, 180, 200, 40);g.setColor(Color.red);g.drawString(you die!,150,200);Serrupted();/跳出线程public Worm getWorm() return worm;public void setWorm(Worm worm) this.worm = worm;class MoveListener extends KeyAdapterint dir;/设置键盘监听器public void k

23、eyPressed(KeyEvent e)System.out.println(您按下的是:+e.getKeyChar();switch(e.getKeyCode()case KeyEvent.VK_UP:dir=Worm.UP;break;case KeyEvent.VK_DOWN:dir=Worm.DOWN;break;case KeyEvent.VK_LEFT:dir=Worm.LEFT;break;case KeyEvent.VK_RIGHT:dir=Worm.RIGHT;break;System.out.println(getWorm();System.out.println(dir=+dir+,worm.dir=+getWorm();step(dir,getWorm(); class Service extends Thread public void run() try for(;) Thread.sleep(t); step(getWorm().dir,getWorm(); catch (Exception e) e.printStackTrace(); public void step(int dir,Worm worm) if(dir+worm.dir=0) paintEnd(Wormpanel.this.getGrap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论