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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 强制险单子丢了怎么办 车辆保险贴丢了怎么办 车险原单子丢了怎么办 车险保单丢了该怎么办? 审车保险单丢了怎么办 湖州公积金贷款买房具体信用怎么办 驾驶本扣分满了怎么办 摩托车被扣12分怎么办 驾照被扣12分怎么办 骑摩托被扣12分怎么办 摩托车没有驾照违章被扣分怎么办 高考登录密码丢了怎么办 高中档案遗失里面体检表怎么办 驾校不给补科一成绩单怎么办 外地驾照转广州体检表怎么办 驾照体检表签名签错怎么办 改完名字后护照怎么办 办健康证没有身份证怎么办 身份证掉了怎么办健康证 华师附小不搬了怎么办 健康证快到期了怎么办 老公想去日本打工怎么办 学生没有资产证明怎么办日本签证 在读证明学校不按模版怎么办 办日本签证没有户口本怎么办 日本大学留级续签失败怎么办 法国签证递交时间太晚怎么办 日本留学生签证更新拒签怎么办 永驻拒签了我该怎么办 越南签证拒签了怎么办 l1签证续签被拒怎么办 去日本跟团签证怎么办 手表里指针掉了怎么办 北京居住证过期半年了怎么办 居住证明居委会不盖章怎么办 小孩感冒鼻子不通气怎么办 1岁宝宝喉咙痰多怎么办 两个月喉咙有痰怎么办 10个月咳嗽有痰怎么办 昆山初级会计审核没有居住证怎么办 初级会计审核没有居住证怎么办