Java版贪吃蛇制作过程分享
2014-07-07 16:00
197 查看
这是本人写的第一个游戏 简单写下过程
开发环境:
Java SE 8 Ecplice
思路:蛇的可以看成是由一个一个正方形组成,用Arraylist来记录下每一个正方体的坐标位置,先把前一个方块的坐标替换下一个方块的坐标,再通过move方法移动蛇头,最后repaint,如此循环。
需要掌握:
1.JFrame和JPanel的使用方法
2.Arraylist的使用方法
3.线程的创建
4.KeyListener的使用
5.双缓冲
共有两个类:
Test:
<pre name="code" class="java">import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
public class Test {
public static void main(String args[]){
JFrame frame = new JFrame();
Mypanel mp = new Mypanel();
mp.setBackground(Color.WHITE);//设置JPanel背景色
mp.addKeyListener(mp);
frame.addKeyListener(mp);//绑定监听器
frame.add(mp,BorderLayout.CENTER);//把JPanel放到JFrame中央
frame.setSize(1920,1080);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Thread t = new Thread(mp);
t.start();//启动线程
}
}
Mypanel:
写得不是很详细 有问题微博 @-Mr-湯- 非常乐意为你解答
开发环境:
Java SE 8 Ecplice
思路:蛇的可以看成是由一个一个正方形组成,用Arraylist来记录下每一个正方体的坐标位置,先把前一个方块的坐标替换下一个方块的坐标,再通过move方法移动蛇头,最后repaint,如此循环。
需要掌握:
1.JFrame和JPanel的使用方法
2.Arraylist的使用方法
3.线程的创建
4.KeyListener的使用
5.双缓冲
共有两个类:
Test:
<pre name="code" class="java">import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
public class Test {
public static void main(String args[]){
JFrame frame = new JFrame();
Mypanel mp = new Mypanel();
mp.setBackground(Color.WHITE);//设置JPanel背景色
mp.addKeyListener(mp);
frame.addKeyListener(mp);//绑定监听器
frame.add(mp,BorderLayout.CENTER);//把JPanel放到JFrame中央
frame.setSize(1920,1080);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Thread t = new Thread(mp);
t.start();//启动线程
}
}
Mypanel:
import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import javax.swing.JPanel; public class Mypanel extends JPanel implements Runnable, KeyListener{ int p,o,q,w; //食物随机出现 int x_food = (int)(Math.random()*60)*30+100; int y_food = (int)(Math.random()*30)*30+100; int x[] = new int[10]; int y[] = new int[10]; int x_c[]; int y_c[]; int x_1 = 30; int y_1 = 0; int check_food = 0; int check_self = 0; ArrayList list_x = new ArrayList(); ArrayList list_y = new ArrayList(); Image ImageBuffer = null; Graphics GraImage = null; String direction = "right"; //构造函数 初始化蛇的位置 public Mypanel(){ for(int i = 0; i < 10; i++){ x[i] = 100 + 30*i; y[i] = 400; list_x.add(new Integer(x[i])); list_y.add(new Integer(y[i])); } } public void paint(Graphics g){ super.paint(g); g.setColor(Color.BLACK); g.fillRect(x_food, y_food, 30, 30); if(check_self == 1){ g.setColor(Color.BLACK); g.fillRect(0, 0, 1920, 1080); } for(int i = 0; i < list_x.size(); i++){ g.fillRect(((Integer) list_x.get(i)).intValue(), ((Integer) list_y.get(i)).intValue(), 30, 30); } } public void run(){ while(true){ for(int i = 0; i < list_x.size()-1; i++){ list_x.set(i,list_x.get(i + 1)); list_y.set(i,list_y.get(i + 1)); } move(direction); stay(); food(); carshcheck(); } } //重画 public void stay(){ try{ Thread.sleep(200); }catch(Exception e){} repaint(); } public void move(String d){ if(d == "right"){ p = 1; o = 0; } if(d =="left"){ p = -1; o = 0; } if(d =="up"){ p = 0; o = -1; } if(d =="down"){ p = 0; o = 1; } q = ((Integer) list_x.get(list_x.size()-1)).intValue(); w = ((Integer) list_y.get(list_y.size()-1)).intValue(); q += 30*p; w += 30*o; list_x.set(list_x.size()-1,new Integer(q)) ; list_y.set(list_y.size()-1,new Integer(w)) ;//代码检查要细心 } public void food(){ check_food = 0; if(direction == "left"){ x_1 = 30; y_1 = 0; } if(direction == "right"){ x_1 = -30; y_1 = 0; } if(direction == "up"){ x_1 = 0; y_1 = 30; } if(direction == "down"){ x_1 = 0; y_1 = -30; } if(q == x_food + x_1 && w == y_food + y_1){ list_x.add(new Integer(x_food)); list_y.add(new Integer(y_food)); check_food = 1; repaint(); x_food = (int)(Math.random()*60)*30+100; y_food = (int)(Math.random()*30)*30+100; } } //自身碰撞检测 public void carshcheck(){ for(int i = 0; i < list_x.size(); i++){ for(int j = i + 1; j < list_x.size(); j++){ if(list_x.get(i).equals(list_x.get(j)) && list_y.get(i).equals(list_y.get(j)) && check_food == 0){ check_self = 1; } } } } //按键处理 public void keyPressed(KeyEvent arg0) { if(arg0.getKeyCode()==37 && direction!="right"){ direction = "left"; } if(arg0.getKeyCode()==38 && direction!="down"){ direction = "up"; } if(arg0.getKeyCode()==39 && direction!="left"){ direction = "right"; } if(arg0.getKeyCode()==40 && direction!="up"){ direction = "down"; } } public void keyReleased(KeyEvent arg0) { } public void keyTyped(KeyEvent arg0) { } //双缓冲 public void update(Graphics g){ ImageBuffer = createImage(this.getWidth(), this.getHeight()); GraImage = ImageBuffer.getGraphics(); paint(GraImage); GraImage.dispose(); g.drawImage(ImageBuffer, 0, 0, this); } }
写得不是很详细 有问题微博 @-Mr-湯- 非常乐意为你解答
相关文章推荐
- 下面我将分享用Java制作简易画图板的过程。
- 一个项目完整制作过程的分享
- 分享]在linux(ubuntu)下将DV带制作成DVD的过程[转]
- 【转】老外分享2.5D角色美术制作过程
- 分享ubuntu-16.10具体制作过程
- 流程图的介绍以及制作全过程技巧分享
- mysql数据库绿色软件制作过程(跟大家分享一下,希望对新手有所帮助)
- [分享] WIN7x64封装体积小于4G制作过程
- 个人制作网站全过程分享
- 下面我将分享用Java制作简易画图板的过程。
- 短视频的崛起,会催生更多制作短视频的工具,Sketchvid 让用户记录并分享绘画过程
- 制作rhel5的U盘系统盘详细过程及系统分享
- 制作网页过程中经常要用到的代码
- 制作网页过程中有些代码是经常要用到的
- MMF与WAV格式的铃声制作全过程
- 毕业设计制作过程中的学习心得(有asp和jsp)
- QQ聊天记录保护器制作全过程
- BabyLinux制作过程详解(转)
- 使用iReport制作报表的详细过程(Windows环境下)
- 外挂制作全过程