java贪吃蛇游戏代码.doc_第1页
java贪吃蛇游戏代码.doc_第2页
java贪吃蛇游戏代码.doc_第3页
java贪吃蛇游戏代码.doc_第4页
java贪吃蛇游戏代码.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、java贪吃蛇游戏代码 思路 :主要是模拟蛇的运动。只要对蛇头进行操作,然后让前一种状态先的蛇头位置复制给现在蛇身的第二个部分,让前一状态的蛇的第二个部分的位置复制给现在蛇身的第三个部分.以此类推,从而达到模拟蛇运动的状态。 GluttonousSnake.java /贪吃蛇图形界面 import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable;

2、 import java.util.Observer; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swi

3、ng.JTextField; import javax.swing.border.TitledBorder; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class GluttonousSnake extends JFrame implements ActionListener private JButton upB

4、utton, downButton, leftButton, rightButton;/控制方向按钮 private JTextField score;/分数 private SnakeCanvas snake;/蛇的模型 public GluttonousSnake() super( 贪吃蛇 /设置标题 this.setSize(725, 515);/设置大小 this.setDefaultCloseOperation(EXIT_ON_CLOSE);/设置退出按键 this.setLocationRelativeTo(null);/设置窗口居中 JPanel p = new JPanel()

5、;/控制按钮和显示分数面板 p.setBorder(new TitledBorder( 控制和显示区 );/设置这个面板的标题 this.getContentPane().add(p, East /设置此面板的位置 p.setLayout(new GridLayout(4, 1);/设置此面板的布局方式,为网格布局方式 JPanel p2 = new JPanel();/在此面板中添加显示分数的面板 p2.setLayout(new FlowLayout();/设置为流布局方式 p2.add(new JLabel( 得分: ); score = new JTextField( 0 score.

6、setEditable(false); p2.add(score); p.add(p2); /添加按钮,有图片的并添加事件监听 upButton = new JButton( , new ImageIcon( up.png ); upButton.setActionCommand( up upButton.addActionListener(this); downButton = new JButton( , new ImageIcon( down.png ); downButton.setActionCommand( down downButton.addActionListener(thi

7、s); leftButton = new JButton( , new ImageIcon( left.png ); leftButton.setActionCommand( left leftButton.addActionListener(this); rightButton = new JButton( , new ImageIcon( right.png ); rightButton.setActionCommand( right rightButton.addActionListener(this); p.add(upButton); JPanel p1 = new JPanel()

8、; p1.setLayout(new GridLayout(1, 2); p1.add(leftButton); p1.add(rightButton); p.add(p1); p.add(downButton); addMenu();/添加菜单 start(); this.setResizable(false); this.setVisible(true); private void start() snake = new SnakeCanvas(); this.getContentPane().add(snake); private void addMenu() JMenuBar menu

9、bar = new JMenuBar(); this.setJMenuBar(menubar); JMenu game = new JMenu( 游戏 JMenu help = new JMenu( 帮助 JMenuItem jitemNew = new JMenuItem( 新游戏 jitemNew.setActionCommand( new jitemNew.addActionListener(this); JMenuItem jitemPause = new JMenuItem( 暂停 jitemPause.setActionCommand( pause jitemPause.addAc

10、tionListener(this); JMenuItem jitemExit = new JMenuItem( 退出 jitemExit.setActionCommand( exit jitemExit.addActionListener(this); game.add(jitemNew); game.add(jitemPause); game.addSeparator();/菜单里设置分隔线 game.add(jitemExit); menubar.add(game); menubar.add(help); public static void main(String args) new

11、GluttonousSnake(); public void actionPerformed(ActionEvent e) if (e.getActionCommand().equalsIgnoreCase( exit ) System.exit(EXIT_ON_CLOSE); if (e.getSource() instanceof JButton) if (e.getActionCommand().equalsIgnoreCase( up ) /响应向上按钮按下事件 snake.setDirect(1);/设置蛇头运动方向 snake.repaint();/对蛇模型重新画 snake.ti

12、mer.start();/定时器开始 return; if (e.getActionCommand().equalsIgnoreCase( down ) snake.setDirect(2); snake.repaint(); snake.timer.start(); return; if (e.getActionCommand().equalsIgnoreCase( left ) snake.setDirect(3); snake.repaint(); snake.timer.start(); return; if (e.getActionCommand().equalsIgnoreCase

13、( right ) snake.setDirect(4); snake.repaint(); snake.timer.start(); return; if (e.getSource() instanceof JMenuItem) if (e.getActionCommand().equalsIgnoreCase( new ) /this.getContentPane().remove(snake); snake.init(); snake.repaint(); snake.timer.start(); if (e.getActionCommand().equalsIgnoreCase( pa

14、use ) snake.timer.stop(); JOptionPane.showMessageDialog(this, 继续请按“确定” snake.timer.start(); public class SnakeCanvas extends MapCanvas implements ActionListener private int number = 5;/蛇身的初始长度 public Timer timer;/定时器 private Body bodys;/蛇身 private Body food;/食物 public int score=0;/分数 private int spe

15、ed=250;/定时器延时事件 int direct = 3;/蛇头初始方向 private int mapflag = new int455455;/地图标记 /初始化 public void init() this.direct=3; this.number=5; this.bodys = new Bodythis.number; mapflag = new int455455; for (int i = 0, x = 300; i this.number; i+, x += 30) bodysi = new Body(x, 180); mapflagbodysi.xbodysi.y =

16、2;/如果是蛇体 设标记为2 food = creatFood();/创建食物 public SnakeCanvas() init(); timer = new Timer(speed, this);/创建定时器对象 timer.start();/定时器启动 private class Body /蛇头成员 int x, y; Body(int x, int y) this.x = x; this.y = y; public void paint(Graphics g) /画图 super.paint(g); if(bodys=null) return ; for (int i = 0; i

17、this.number; i+) if(i=0)/设置蛇头颜色不同 g.setColor(Color.blue); else g.setColor(Color.black); mapflagbodysi.xbodysi.y = 2; g.fillOval(bodysi.x, bodysi.y, 30, 30);/画蛇体 g.setColor(Color.red); g.fillOval(food.x, food.y, 30, 30);/画食物 public Body creatFood() int x = 0, y = 0; do /随机生成食物位置 Random r = new Random

18、();/创建随机数对象 x = r.nextInt(450);/在0到所给的数中随机产生一个伪随机数 y = r.nextInt(450); /System.out.println(mapflagxy+ ! while (x % 30 != 0 | y % 30 != 0 | mapflagxy=2 );/保证位置不是蛇身的部分,并且确保整齐性 /System.out.println(x + + y); mapflagxy = 1;/将食物标记为1,下面就可以通过标记的不同来判断是吃到食物还是自身,从而进行不同的操作 return new Body(x, y); public void act

19、ionPerformed(ActionEvent e) if(bodys=null) return ; if(!isMove()/如果移动失败,游戏结束 JOptionPane.showMessageDialog(this, Game Over ! bodys=null; timer.stop(); return ; repaint(); /蛇移动,原理:仅需对蛇头进行操作,然后将蛇头之前的位置赋值给现在蛇身的第二个部分, /让之前的第二个部分复制个现在的第三个部分。以此类推,模拟蛇运动(这是关键) public void move(int x,int y) Body b=new Bodybo

20、dys.length; for(int i=0;i this.number;i+) bi=new Body(bodysi.x,bodysi.y); this.bodys0.x=x; this.bodys0.y=y; for(int i=1;i this.number;i+) this.bodysi=bi-1; setMapflag(); private void setMapflag() /地图标记的刷新 mapflag=new int455455; mapflagfood.xfood.y=1; for(int i=0;i this.number;i+) mapflagbodysi.xbodysi.y=2; /判断是否移动成功 public boolean isMove() if(bodys=null) return fa

温馨提示

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

评论

0/150

提交评论