All Downloads are FREE. Search and download functionalities are using the official Maven repository.

game.Snake Maven / Gradle / Ivy

package game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;


public class Snake {

	GamePanel gameP;
	private Point[] body;//点类型数组,保存蛇身个小球坐标
	public static final int MAXLENTH=50;//蛇身最大长度
	private int head;//指示蛇头位置
	private int tail;//指示蛇尾位置
	public int length;//蛇身长度
	private int speed;//运行速度
	public int x,y;//蛇头小球的横纵坐标
	public int r;//蛇身小球的半径
	
	public Snake(GamePanel gp){
		gameP=gp;//通过构造方法的参数来获取对GamePanel对象的引用
		body=new Point[MAXLENTH];
		head=-1;
		tail=-1;
		length=1;
		speed=10;
		x=50;
		y=50;
		r=10;
	}
	
	public void draw(Graphics g){//绘制贪吃蛇的图形
		System.out.println("head="+head+"  "+"tail="+tail);
		g.setColor(Color.BLUE);//设置蛇身为蓝色
		if(length>1){
			int i=tail;
			while(i!=head){//循环绘制蛇身各个小球
				g.fillOval(body[i].x, body[i].y, r, r);
				i=(i+1)%body.length;
			}
		}
		g.setColor(Color.RED);//设置蛇头为红色
		g.fillOval(body[head].x, body[head].y, r, r);
		if(length==1){
			length++;
		}
	}
	
	public void update(){//更新游戏逻辑(贪吃蛇的坐标)
		int direction=gameP.getDirection();
		switch(direction){
			case GamePanel.SOUTH:
				y+=speed;
				break;
			case GamePanel.NORTH:
				y-=speed;
				break;
			case GamePanel.EAST:
				x+=speed;
				break;
			case GamePanel.WEST:
				x-=speed;
				break;
		}
		head=(head+1)%body.length;//更新蛇头指针位置
		tail=(head+body.length-length+1)%body.length;//更新蛇尾指针坐标
		body[head]=new Point(x,y);//保存蛇头小球坐标值
	}
	
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy