Java版贪吃蛇制作过程分享
来源:互联网 发布:么么哒(网络词汇) 编辑:程序博客网 时间:2024/04/30 10:31
这是本人写的第一个游戏 简单写下过程
开发环境:
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-湯- 非常乐意为你解答
0 0
- Java版贪吃蛇制作过程分享
- Java简易版贪吃蛇的原理与制作
- 贪吃蛇制作
- 贪吃蛇的制作
- 自学制作贪吃蛇
- java一些练习-贪吃蛇MVC源码分享
- 控制台版贪吃蛇java
- JAVA简版贪吃蛇
- 分享贪吃蛇游戏源码
- 贪吃蛇android源码分享
- Android制作贪吃蛇游戏
- Qt制作贪吃蛇游戏
- C++贪吃蛇编程过程
- java贪吃蛇-一步一步写贪吃蛇
- 简易贪吃蛇(JAVA版)源代码
- 贪吃蛇 Java版(基于GUI)
- java 简单版贪吃蛇小游戏
- java控制台贪吃蛇小游戏(多线程版)
- Android基站定位——通过手机信号获取基站信息(一)
- [LeetCode]Search a 2D Matrix
- 实体店做网络营销的困惑
- mongodb查询find
- Take the Land - UVa 10074 变形最大子矩阵和
- Java版贪吃蛇制作过程分享
- Linux-2.6.25内核帧缓冲设备驱动分析
- Obejct-C学习--内存管理
- struts2中迭代标签的使用,用类似数组的方式取值
- 【性能测试】Jmeter+maven+Jenkins构建云性能测试平台
- windows使用nginx+memcached实现负载均衡和session或者缓存共享
- [LeetCode] Binary Tree Preorder Traversal
- hdu1465不容易系列之一(错排)
- 关于Android webView的用法