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; 
		} 
	} 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10389.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论