📄 snake.java
字号:
package snakegame;
import java.awt.*;
import java.util.*;
import java.awt.geom.*;
public class Snake implements Data
{
public Snake()
{
array.add(new Point(10, 10));
array.add(new Point(10, 11));
array.add(new Point(10, 12));
array.add(new Point(10, 13));
array.add(new Point(10, 14));
currentFlag = UPFLAG;
lifeFlag = true;
}
public void move()
{
tair = (Point)array.get(array.size() - 1);
int len = array.size() - 2;
for(int i = len; i >= 0; i--)
{
Point leftPoint = (Point)array.get(i);
Point rightPoint = (Point)array.get(i + 1);
rightPoint.x = leftPoint.x;
rightPoint.y = leftPoint.y;
}
}
public void moveHeadLeft()
{
if(currentFlag == RIGHTFLAG || currentFlag == LEFTFLAG)
{
return;
}
move();
Point point = (Point)(array.get(0));
point.x = point.x - 1;
point.y = point.y;
if(point.x < LEFT)
{
lifeFlag = false;
}
currentFlag = LEFTFLAG;
}
public void moveHeadRight()
{
if(currentFlag == LEFTFLAG || currentFlag == RIGHTFLAG)
{
return;
}
move();
Point point = (Point)(array.get(0));
point.x = point.x + 1;
point.y = point.y;
if(point.x > RIGHT)
{
lifeFlag = false;
}
currentFlag = RIGHTFLAG;
}
public void moveHeadUp()
{
if(currentFlag == DOWNFLAG || currentFlag == UPFLAG)
{
return;
}
move();
Point point = (Point)(array.get(0));
point.x = point.x;
point.y = point.y - 1;
if(point.y < UP)
{
lifeFlag = false;
}
currentFlag = UPFLAG;
}
public void moveHeadDown()
{
if(currentFlag == UPFLAG || currentFlag == DOWNFLAG)
{
return;
}
move();
Point point = (Point)(array.get(0));
point.x = point.x;
point.y = point.y + 1;
if(point.x > DOWN)
{
lifeFlag = false;
}
currentFlag = DOWNFLAG;
}
public void draw(Graphics2D g2)
{
drawHead(g2);
drawBody(g2);
//drawtair(g2);
}
private void drawHead(Graphics2D g2)
{
int x = 0;
int y = 0;
Point point = (Point)array.get(0);
point = clientPoint(point);
x = point.x;
y = point.y;
int clientX[] = new int[3];
int clientY[] = new int[3];
switch(currentFlag)
{
case RIGHTFLAG:
clientX[0] = x;
clientY[0] = y;
clientX[1] = x + LONG;
clientY[1] = y + LONG / 2;
clientX[2] = x;
clientY[2] = y + LONG;
break;
case DOWNFLAG:
clientX[0] = x;
clientY[0] = y;
clientX[1] = x + LONG;
clientY[1] = y;
clientX[2] = x + LONG / 2;
clientY[2] = y + LONG;
break;
case LEFTFLAG:
clientX[0] = x;
clientY[0] = y + LONG / 2;
clientX[1] = x + LONG;
clientY[1] = y;
clientX[2] = x + LONG;
clientY[2] = y + LONG;
break;
case UPFLAG:
clientX[0] = x + LONG / 2;
clientY[0] = y;
clientX[1] = x + LONG;
clientY[1] = y + LONG;
clientX[2] = x;
clientY[2] = y + LONG;
break;
default:
break;
}
Polygon polygon = new Polygon(clientX, clientY, clientX.length);
g2.setColor(Color.RED);
g2.fill(polygon);
g2.setColor(Color.BLACK);
g2.draw(polygon);
}
private void drawBody(Graphics2D g2)
{
for(int i = 1; i < array.size(); i++)
{
Point point = (Point)(array.get(i));
point = clientPoint(point);
Rectangle2D.Double rect = new Rectangle2D.Double(point.x, point.y, LONG, LONG);
g2.setColor(Color.GREEN);
g2.fill(rect);
g2.setColor(Color.BLACK);
g2.draw(rect);
}
}
private void drawtair(Graphics2D g2)
{
}
public boolean isLife()
{
return lifeFlag;
}
public void addNode()
{
array.add(new Point(tair.x, tair.y));
}
public Point clientPoint(int x, int y)
{
int clientX = ACTUALLEFT + x * LONG;
int clientY = ACTUALUP + y * LONG;
return new Point(clientX, clientY);
}
public Point clientPoint(Point point)
{
return clientPoint(point.x, point.y);
}
public void moveRight()
{
tair = (Point)array.get(array.size() - 1);
Point point = (Point)array.get(0);
int tempX = point.x + 1;
int tempY = point.y;
boolean flag = false;
for(int i = 1; i < array.size(); i++)
{
Point tempPoint = (Point)array.get(i);
if(tempX == tempPoint.x && tempY == tempPoint.y)
{
flag = true;
break;
}
}
if(tempX <= RIGHT && !flag)
{
for(int i = array.size() - 1; i > 0; i--)
{
Point point1 = (Point)(array.get(i - 1));
Point point2 = (Point)(array.get(i));
point2.x = point1.x;
point2.y = point1.y;
}
point.x = tempX;
}
else
{
lifeFlag = false;
}
}
public void moveDown()
{
tair = (Point)array.get(array.size() - 1);
Point point = (Point)array.get(0);
int tempX = point.x;
int tempY = point.y + 1;
boolean flag = false;
for(int i = 1; i < array.size(); i++)
{
Point tempPoint = (Point)array.get(i);
if(tempX == tempPoint.x && tempY == tempPoint.y)
{
flag = true;
break;
}
}
if(tempY <= RIGHT && !flag)
{
for(int i = array.size() - 1; i > 0; i--)
{
Point point1 = (Point)(array.get(i - 1));
Point point2 = (Point)(array.get(i));
point2.x = point1.x;
point2.y = point1.y;
}
point.y = tempY;
}
else
{
lifeFlag = false;
}
}
public void moveLeft()
{
tair = (Point)array.get(array.size() - 1);
Point point = (Point)array.get(0);
int tempX = point.x - 1;
int tempY = point.y;
boolean flag = false;
for(int i = 1; i < array.size(); i++)
{
Point tempPoint = (Point)array.get(i);
if(tempX == tempPoint.x && tempY == tempPoint.y)
{
flag = true;
break;
}
}
if(tempX >= LEFT && !flag)
{
for(int i = array.size() - 1; i > 0; i--)
{
Point point1 = (Point)(array.get(i - 1));
Point point2 = (Point)(array.get(i));
point2.x = point1.x;
point2.y = point1.y;
}
point.x = tempX;
}
else
{
lifeFlag = false;
}
}
public void moveUp()
{
tair = (Point)array.get(array.size() - 1);
Point point = (Point)array.get(0);
int tempX = point.x;
int tempY = point.y - 1;
boolean flag = false;
for(int i = 1; i < array.size(); i++)
{
Point tempPoint = (Point)array.get(i);
if(tempX == tempPoint.x && tempY == tempPoint.y)
{
flag = true;
break;
}
}
if(tempY >= UP && !flag)
{
for(int i = array.size() - 1; i > 0; i--)
{
Point point1 = (Point)(array.get(i - 1));
Point point2 = (Point)(array.get(i));
point2.x = point1.x;
point2.y = point1.y;
}
point.y = tempY;
}
else
{
lifeFlag = false;
}
}
public ArrayList array = new ArrayList();
public int currentFlag = UPFLAG;
public Point tair;
public boolean lifeFlag;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -