java貪食蛇 極速不死版

fp34 9年前發布 | 4K 次閱讀 Java

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>

 本文由用戶 fp34 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!