欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    最新JAVA开放性实验报告贪吃蛇.doc

    • 资源ID:35278173       资源大小:180KB        全文页数:17页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    最新JAVA开放性实验报告贪吃蛇.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateJAVA开放性实验报告贪吃蛇JAVA程序设计与应用开发JAVA程序设计开放性实验报告 专 业: 计算机科学与技术 班 级: 2012级2班 学 号: 姓 名: 实验2贪吃蛇游戏设计(4学时)1.实验内容(1) 创建软件主窗体和相关控制菜单;在窗体中以图形模拟蛇的形状,使用键盘控制图形在窗体中任意移动,模拟贪吃蛇的行为.(2) 在窗体中可以设置障碍或奖励物品,以达到游戏的娱乐性。2.预习内容Java GUI编程;鼠标和键盘的事件处理;Java多媒体编程。3.实验类型综合性4.实验目的(1)了解JavaGUI编程特别是窗体,菜单;熟悉Java的事件委托处理机制,能完成鼠标和键盘的事件处理;(2)熟悉Java中的多媒体技术如:音频文件的播放控制,游戏中各种事件的音效添加。熟悉Java中的绘图操作,可以使用绘图函数进行图形的绘制和重绘等基本操作;(3)熟悉模块的划分及游戏控制类的编写,了解相关的游戏设计和实现模式;(4)设计可视化界面,添加其他必要组件,对窗体进行相应的键盘事件处理,使蛇能移动,依据实验内容结合自己的设计想法,实现模拟贪吃蛇的游戏效果。5.实验要求依据实验内容,编写相关类,实现所需软件功能。6实验过程(分析设计、源文件、执行结果)代码如下:-1、Node类public class Node private int x;private int y;public Node()public Node(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 /伪代码可以理解为注释,重写:下面的方法名是否在父类中存在,如果没有/的话会报错。/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 false;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;public 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 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 && 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 LinkedList<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;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 /private 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();/面板后区信息焦点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("重新再来");/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.addActionListener(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().dir=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.Random;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<Node> foods=new HashSet<Node>();/设置食物 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(Set<Node>foods) this.foods=foods; private Service se =new Service(); public Wormpanel() setWorm(new Worm();/生成一条蛇 foods=initFoods(n);/生成食物 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 Node(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.paint(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.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)foods=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.clearRect(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);Service.interrupted();/跳出线程public Worm getWorm() return worm;public void setWorm(Worm worm) this.worm = worm;class MoveListener 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=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.getGraphics(); worm.dir=100; return; else if(worm.dir=100) paintEnd(Wormpanel.this.getGraphics(); return; if(worm.dir=-100) return; Node head=worm.getLinkedListWorm().get(0); int x=head.getX()+dir/10*10; int y=head.getY()+dir%10*10; Node n=new Node(x,y); if(foods.contains(n)&&!worm.getLinkedListWorm().contains(n) foods.remove(n); worm.getLinkedListWorm().addFirst(n); worm.dir=dir; else try worm.step(dir); catch (Exception e) paintEnd(Wormpanel.this.getGraphics(); return; Wormpanel.this.repaint(); 执行结果:(1)游戏开始(2)菜单栏(3)结束7 实验总结 在这次试验中主要是对Java中的知识进一步的熟悉,了解javaCUI编程特别是窗口、菜单,熟悉Java的事件委托处理机制,完成鼠标和键盘的事件处理,在编写游戏中要把游戏划分为几个模块,以及运用多个类完成,了解相关的游戏设计和实现模式,在编写过程中还要设计可视化界面,添加其他必要组件,对窗体进行相应的键盘事件处理,使蛇能移动,在这次试验中用到了Node类、Worm类、WormDemo类、WormPanel类进行实现各个功能,在编写的过程中对一些部分不是很了解,对一些知识掌握不是很透彻,在今后的学习中应多看书,多思考,多联系,来提高自己的能力。

    注意事项

    本文(最新JAVA开放性实验报告贪吃蛇.doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开