首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java贪食蛇 极速不死版

java贪食蛇 极速不死版

原创
作者头像
大师级码师
修改2021-09-23 14:35:08
修改2021-09-23 14:35:08
3550
举报
文章被收录于专栏:大师级码师大师级码师
代码语言:javascript
复制
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
/**

@url http://download.csdn.net/detail/leasystu/4308246

@author Easy
*/
public class InterFace extends JFrame {
 public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 20, L = 1,

     R = 2, U = 3, D = 4;
 
BufferedImage offersetImage = new BufferedImage(WIDTH, HEIGHT,

     BufferedImage.TYPE_3BYTE_BGR);;
 
Rectangle rect = new Rectangle(20, 40, 15  50, 15  35);
 Snake snake;
 Node node;
public InterFace() {

 snake = new Snake(this);
 createNode();
 this.setBounds(100, 100, WIDTH, HEIGHT);
 this.addKeyListener(new KeyAdapter() {
     public void keyPressed(KeyEvent arg0) {
         System.out.println(arg0.getKeyCode());
         switch (arg0.getKeyCode()) {
         case KeyEvent.VK_LEFT:
             snake.dir = L;
             break;
         case KeyEvent.VK_RIGHT:
             snake.dir = R;
             break;
         case KeyEvent.VK_UP:
             snake.dir = U;
             break;
         case KeyEvent.VK_DOWN:
             snake.dir = D;
         }
     }
 });
 this.setTitle("贪吃蛇 0.1   By : Easy");
 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
 this.setVisible(true);
 new Thread(new ThreadUpadte()).start();
 
}
public void paint(Graphics g) {

 Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();
 g2d.setColor(Color.white);
 g2d.fillRect(0, 0, WIDTH, HEIGHT);
 g2d.setColor(Color.black);
 g2d.drawRect(rect.x, rect.y, rect.width, rect.height);
 if (snake.hit(node)) {
     createNode();
 }
 snake.draw(g2d);
 node.draw(g2d);
 g.drawImage(offersetImage, 0, 0, null);
 
}
class ThreadUpadte implements Runnable {

 public void run() {
     while (true) {
         try {
             Thread.sleep(SLEEPTIME);
             repaint();
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
     }
 }
 
}
public void createNode() {

 int x = (int) (Math.random() * 650) + 50, y = (int) (Math.random() * 500) + 50;
 Color color = Color.blue;
 node = new Node(x, y, color);
 
}
public static void main(String args[]) {

 new InterFace();
 
}
}


class Node {
    int x, y, width = 15, height = 15;
    Color color;

public Node(int x, int y, Color color) {
    this(x, y);
    this.color = color;
}

public Node(int x, int y) {
    this.x = x;
    this.y = y;
    this.color = color.black;
}

public void draw(Graphics2D g2d) {
    g2d.setColor(color);
    g2d.drawRect(x, y, width, height);
}

public Rectangle getRect() {
    return new Rectangle(x, y, width, height);
}
 
}
class Snake {
    public List<Node> nodes = new ArrayList<Node>();
    InterFace interFace;
    int dir = InterFace.R;

public Snake(InterFace interFace) {
    this.interFace = interFace;
    nodes.add(new Node(20 + 150, 40 + 150));
    addNode();
}

public boolean hit(Node node) {
    for (int i = 0; i < nodes.size(); i++) {
        if (nodes.get(i).getRect().intersects(node.getRect())) {
            addNode();
            return true;
        }
    }
    return false;
}

public void draw(Graphics2D g2d) {
    for (int i = 0; i < nodes.size(); i++) {
        nodes.get(i).draw(g2d);
    }
    move();
}

public void move() {
    nodes.remove((nodes.size() - 1));
    addNode();
}

public synchronized void addNode() {
    Node nodeTempNode = nodes.get(0);
    switch (dir) {
    case InterFace.L:
        if (nodeTempNode.x <= 20) {
            nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);
        }
        nodes.add(0, new Node(nodeTempNode.x - nodeTempNode.width,
                nodeTempNode.y));
        break;
    case InterFace.R:
        if (nodeTempNode.x >= 20 + 15 * 50 - nodeTempNode.width) {
            nodeTempNode = new Node(20 - nodeTempNode.width, nodeTempNode.y);
        }
        nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,
                nodeTempNode.y));
        break;
    case InterFace.U:
        if (nodeTempNode.y <= 40) {
            nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);
        }
        nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y
                - nodeTempNode.height));
        break;
    case InterFace.D:
        if (nodeTempNode.y >= 40 + 15 * 35 - nodeTempNode.height) {
            nodeTempNode = new Node(nodeTempNode.x,
                    40 - nodeTempNode.height);
        }
        nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y
                + nodeTempNode.height));
        break;
    }
}
 
}</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档