package org.example.snake;
import org.example.window.DrawPanel;
import java.awt.*;
/**
* 蛇
* @author xxf
* @create 2022-11-22
*/
public class Snake implements DrawPanel {
//蛇身长坐标
private final int[] snakeX = new int[1748];
private final int[] snakeY = new int[1748];
private int length;//蛇长度
private String toward;//蛇的走向
private final int widthBorder;//宽的边界
private final int heightBorder;//高的边界
private final int UNIT;//单元格
private static final String UP = "W";
private static final String DOWN = "S";
private static final String LEFT = "A";
private static final String RIGHT = "D";
public Snake(int WIDTH, int HEIGHT, int UNIT){
length = 3;
snakeX[0] = 460;snakeY[0]=380;
snakeX[1] = 440;snakeY[1]=380;
snakeX[2] = 420;snakeY[2]=380;
toward = "D";
this.widthBorder = WIDTH;
this.heightBorder = HEIGHT;
this.UNIT = UNIT;
}
/**
* 基本运动
*/
public void basicMove(){
//先移动身体,再移动头
bodyMove();
headMove();
}
private void headMove(){
//蛇头移动
switch (toward) {
case "W":
//上
snakeY[0] = snakeY[0] - UNIT;
//边界判断
if (snakeY[0] < 0) {
snakeY[0] = heightBorder - UNIT;
}
break;
case "S":
//下
snakeY[0] = snakeY[0] + UNIT;
//边界判断
if (snakeY[0] >= heightBorder) {
snakeY[0] = 0;
}
break;
case "A":
//左
snakeX[0] = snakeX[0] - UNIT;
//边界判断
if (snakeX[0] < 0) {
snakeX[0] = widthBorder - UNIT;
}
break;
case "D":
//右
snakeX[0] = snakeX[0] + UNIT;
//边界判断
if (snakeX[0] >= widthBorder) {
snakeX[0] = 0;
}
break;
}
}
private void bodyMove(){
//蛇身移动
for (int i = length; i > 0; i--) {
snakeX[i] = snakeX[i-1];
snakeY[i] = snakeY[i-1];
}
}
public void up(){
if(toward.equals(DOWN)) return;//如果是相反方向运动忽略
toward = UP;
}
public void down(){
if(toward.equals(UP)) return;//如果是相反方向运动忽略
toward = DOWN;
}
public void left(){
if(toward.equals(RIGHT)) return;//如果是相反方向运动忽略
toward = LEFT;
}
public void right(){
if(toward.equals(LEFT)) return;//如果是相反方向运动忽略
toward = RIGHT;
}
public void addLength(){
setLength(this.length++);
}
public void setLength(int length) {
this.length = length;
}
public int getLength(){
return length;
}
public int getSnakeHeadX(){
return snakeX[0];
}
public int getSnakeHeadY(){
return snakeY[0];
}
/**
* 判断头是否撞到自己身子
* @return
*/
public boolean isCollide(){
for (int i = 1; i < length; i++) {
if(snakeX[i]==snakeX[0]&&snakeY[i]==snakeY[0]) {
return true;
}
}
return false;
}
@Override
public void painting(Graphics g){
//画蛇身
for (int i = 0; i < length; i++) {
if(i<1){
g.fillRect(snakeX[i], snakeY[i],UNIT,UNIT);
continue;
}
g.drawRect(snakeX[i], snakeY[i],UNIT,UNIT);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏的实现.7z毕业设计基于 java的贪吃蛇游戏
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计基于 java的贪吃蛇游戏的实现.7z (12个子文件)
game
pom.xml 1KB
src
test
java
org
example
window
WindowTest.java 3KB
AppTest.java 700B
main
java
org
example
window
LayoutBuild.java 4KB
JFrameWindow.java 3KB
DrawPanel.java 153B
GamePanel.java 1KB
Coord.java 639B
snake
Snake.java 4KB
SnakePanel.java 3KB
Food.java 1KB
App.java 172B
共 12 条
- 1
资源评论
程序猿阿存
- 粉丝: 1148
- 资源: 1804
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功