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