版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 N
3、ode(int 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 /伪代码可以理解为注释,重写:下面的方法名是
4、否在父类中存在,如果没有/的话会报错。/public int hashCode()/假设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 f
5、alse;if(getClass()!=obj.getClass()return 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<Node> worm = new LinkedList<Node>();int dir;public static final int UP = -1;publi
6、c static final int DOWN = 1;public static final int LEFT = -10;public 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
7、Node(70, 90);getWorm().add(new Node(60, 90);getWorm().add(new Node(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 < Worm.COLS && y > 0 &&
8、 y < Worm.ROWS - 30&& !getWorm().contains(new Node(x, y) /!getWorm().contains(new Node(x, y)是否落到蛇身上getWorm().addFirst(new Node(x, y);getWorm().removeLast();/删除 else dir = 100;throw new RuntimeException("你错了!");public void step(int dir) / 控制蛇走的方向this.dir = dir;step();public Linke
9、dList<Node> getLinkedListWorm() return getWorm();public String toString() return getWorm().toString();/输出蛇public LinkedList<Node> getWorm() return worm;public void setWorm(LinkedList<Node> worm) this.worm = worm;3、WormDemo类import java.awt.Cursor;import java.awt.event.ActionEvent;im
10、port 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 /private Wormpanel panel;private static int dir;public WormDemo()panel=new Wormpanel();/形成蛇的界面add(panel);/将蛇面板放到游戏里面去set
11、Title("贪吃蛇");/题目setSize(500+15,400+35);/大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/关闭窗口就是关闭程序setCursor(new Cursor(12);/定义鼠标属性setVisible(true);/可视化为truepanel.requestFocus();/面板后区信息焦点setLocationRelativeTo(null);/设置窗口组建定义的位置this.setResizable(false);public static void main(String args)f
12、inal WormDemo wd=new WormDemo();/new一个自己创建的一个属性游戏窗口/设置一个监听JMenuBar jmb=new JMenuBar();/导包,然后设置wd.setJMenuBar(jmb);/往自己new的窗口加上监听JMenu fm=new JMenu("选项");jmb.add(fm);JMenuItem mi=new JMenuItem("重新再来");/mi.addActionListener(new ActionListener()public void actionPerformed(ActionEven
13、t 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.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)dir=
14、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().dir=dir;);fm.add(mi3);4、 Wormpanel 类import java.awt.Color;im
15、port 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.Random;import java.util.Set;import javax.imageio.ImageIO;impo
16、rt 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<Node> foods=new HashSet<Node>();/设置食物 public int n=10;/个数 public i
17、nt 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(Set<Node>foods) this.foods=foods; private Service se =new Service(); public Wormpanel() setWorm(new Worm();/生成一条蛇 foods=initFoods(n);/生
18、成食物 addKeyListener(listener);/加上监听器,监听键盘 se.start();/启动线程 public Set<Node> initFoods(int n) Set<Node>foods=new HashSet<Node>();/食物也是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 N
19、ode(x,y)/检查食物是否在蛇上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.p
20、aint(g);this.requestFocus();/设置接收信息/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
21、.fill3DRect(0, 375, 520, 10, false);g.fill3DRect(0, 0, 10, 502, false);for(int i=0;i<getWorm().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)food
22、s=initFoods(+n);t=t-200;Iterator<Node>food=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.clearRe
23、ct(0, 150, 550, 100);g.setColor(Color.black);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 MoveLi
24、stener extends KeyAdapterint dir;/设置键盘监听器public void keyPressed(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=Wo
25、rm.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)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《保单体检服务》课件
- 2025届四川省眉山一中办学共同体重点中学高三第三次模拟考试英语试卷含解析
- 广东省广州市2025届高三下学期一模考试数学试题含解析
- 2025届河北省石家庄二中润德学校高三适应性调研考试英语试题含解析
- 北京市首都师范大学附属回龙观育新学校2025届高考冲刺数学模拟试题含解析
- 云南省楚雄州2025届高三第四次模拟考试英语试卷含解析
- 上海市华东师大三附中2025届高考数学三模试卷含解析
- 山西省长治市潞州区长治二中2025届高三一诊考试语文试卷含解析
- 河南省驻马店2025届高三第五次模拟考试英语试卷含解析
- 云南省江川第二中学2025届高考适应性考试英语试卷含解析
- 2025年中考数学备考计划
- 高层建筑用电安全管理制度
- 2024学校安全工作总结
- 2024-2030年中国化工设计市场发展前景调研及投资战略分析报告
- 2024年低压电工复审模拟考试题库及答案(共230题)
- 2024-2025学年语文二年级上册统编版期末测试卷(含答案)
- 教育机构课程顾问咨询流程
- 2024年学校意识形态工作总结模版(5篇)
- 6《记念刘和珍君》《为了忘却的纪念》说课稿 2024-2025学年统编版高中语文选择性必修中册
- 智能化住宅小区施工合同
- 葡萄酒文化与鉴赏学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论