⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snake.java

📁 一个小游戏 贪吃蛇 很好玩 大家下来
💻 JAVA
字号:
package com.fengbo;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.LinkedList;


/**
 * 介绍了怎么画出蛇身,蛇身的移动,蛇身的大小变化以及蛇的生死
 * @author fengbo
 *
 */
public class Snake {
	/*
	 * 表示方向的常量
	 */
	public static final int L=-1;
	public static final int R=1;
	public static final int U=2;
	public static final int D=-2;
	
	private int oldDirection;//保存蛇的方向
	
	int dir = D;
	
	//贪吃蛇的大小
	int SNAKE_WIDTH = 20;
	int SNAKE_HEIGHT = 20;
	private int SPEED = 1;//移动速度
	
	//把宽度和高度分成20份
	private int WIDTH = 20;
	private int HEIGHT = 20;
	
	//用来装蛇体
	LinkedList<Point> body=new LinkedList<Point>();
	Point oldTail ;//用来标记尾部		
	
	public SnakeGame sg ;	
	
	public Snake(SnakeGame sg) {
		this.sg = sg;
		init();
	}
	
	public void init() {
		int x = 10;
		int y = 10;
		//先画一个包含三个元素的蛇身
		for(int i=0; i<3; i++) {
			body.add(new Point(x--, y));
		}
		
		oldDirection = dir;
	}
	
	//画蛇
	public void draw(Graphics g) {		
		
		Color c = g.getColor();
		g.setColor(Color.RED);
		
		for(Point d: body) {
			g.fillOval((d.x * SNAKE_WIDTH), (d.y * SNAKE_HEIGHT), SNAKE_WIDTH, SNAKE_HEIGHT);
		}
		
		g.setColor(c);
		
		move();
	}
	
	//蛇的移动方法
	private void move() {
		//规定不能朝相反方向运动
		if(dir + oldDirection != 0) {
			oldDirection = dir;
		}
		
		oldTail = body.removeLast();
		
		int x = body.getFirst().x;
		int y = body.getFirst().y;
		switch(oldDirection) {
		case L:
			x -= SPEED;
			if(x < 0) {
				x = WIDTH - 1;
			}
			break;
		case U:
			y -= SPEED;
			if(y < 1) {
				y = HEIGHT - 2;
			}
			break;
		case R:
			x += SPEED;
			if(x > 20) {
				x = 0;
			}
			break;
		case D:
			y += SPEED;
			if(y > 20) {
				y = 2;
			}
			break;	
		}
		
		Point newhead=new Point(x,y);
		//加头
		body.addFirst(newhead);
	}
	
	//当吃到一个食物时加在尾部的方法
	public void eatFood() {
		body.add(oldTail);
	}
	
	//蛇移动的方向
	public void keyPress(KeyEvent e) {
		int key = e.getKeyCode();
		
		switch (key) {
			case KeyEvent.VK_LEFT:
				dir = L;
				break;
			case KeyEvent.VK_UP:
				dir = U;
				break;
			case KeyEvent.VK_RIGHT:
				dir = R;
				break;
			case KeyEvent.VK_DOWN:
				dir = D;
				break;		
		}
	}
	
	//拿到蛇头所占的区域
	public Rectangle getRecFirst() {
		Point d = body.getFirst();
		return new Rectangle((d.x * SNAKE_WIDTH), (d.y * SNAKE_HEIGHT), SNAKE_WIDTH, SNAKE_HEIGHT);		
	}
	
	//控制蛇的死亡
	public boolean hitbody(LinkedList<Point> body) {
		Point d = body.getFirst();
		int m = body.size() - 1;
		for(int i=1; i< m; i++) {
			Point t = body.get(i);
			if(d.getLocation().equals(t.getLocation())) {
				body.removeAll(body);				
				init();
				return true;
			}
		}
		return false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -