JAVA 开发《贪吃蛇》02-模型类

JAVA 开发《贪吃蛇》02-模型类

一、蛇类

package com.snake.model;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import static com.snake.constant.Constant.*;

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName MySnake
 * @ClassName Snake
 * @Description TODO
 * @createTime 2020年12月20日 01:30:00
 */
public class Snake {
    /**
     * 蛇的属性
     */
    private int lenght;  //蛇的长度            
    private int[] snakeX; //蛇的X坐标数组
    private int[] snakeY; //蛇的Y坐标数组
    private char fx;       //蛇的方向
    private BufferedImage[] headIm; //蛇头的图片储存数组
    private BufferedImage headImR;  //蛇头的图片
    private BufferedImage bodyIm;   //蛇身的图片
    private int fxNum;              //方向选择图片数值控制
    private boolean isStart;        //判断游戏是否开始
    private boolean isFail;         //判断游戏是否结束
    Random random = new Random();   //随机数值

    /**
     * 构造器,获得蛇的图片文件
     */
    public Snake() {
        //初始化蛇
        init();
        this.fxNum = 3;
        //实例数组,大小为4,存放上下左右方向的头图片
        headIm = new BufferedImage[4];
        //获取蛇头的图片,储存在数组中
        for (int i = 0; i < 4; i++) {
            File file = new File("static/snake_"+i+".png");
            try {
                headIm[i] = ImageIO.read(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //获取蛇身的图片
        File file01 = new File("static/body.png");
        try {
            bodyIm = ImageIO.read(file01);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 初始化蛇
     */
    private void init(){
        //设置游戏没有结束
        this.isFail = false;
        //初始长度
        this.lenght=3;
        //初始方向
        this.fx='R';
        //初始坐标
        this.snakeX = new int[800];
        this.snakeY = new int[800];
        //蛇头
        this.snakeX[0] =SIZE*(random.nextInt(8)+3);
        this.snakeY[0] =SIZE*(random.nextInt(7)+4);
        //蛇身
        this.snakeX[1] = this.snakeX[0] - SIZE;
        this.snakeY[1] = this.snakeY[0];
        this.snakeX[2] = this.snakeX[1] - SIZE;
        this.snakeY[2] = this.snakeY[1];
    }

    /**
     * 方法:蛇死亡初始化
     */
    public void snakeInit(){
        this.setLenght(3);
        this.setFx('R');
        this.setFxNum(3);
        this.setSnakeX(0,SIZE*(random.nextInt(8)+3));
        this.setSnakeY(0,SIZE*(random.nextInt(7)+4));

        this.setSnakeX(1,this.SnakeX(0) - SIZE);
        this.setSnakeY(1, this.SnakeY(0));

        this.setSnakeX(2,this.SnakeX(1) - SIZE);
        this.setSnakeY(2,this.SnakeY(1));
    }

    /**
     * 方法:蛇移动
     */
    public void snakeMove(){
        //先把蛇的图片提取出来
        this.headImR = headIm[this.fxNum];
        if(this.isStart == true && this.isFail == false) {
            //先把蛇的图片提取出来
            for (int i = lenght - 1; i > 0; i--) {
                this.snakeX[i] = snakeX[i - 1];
                this.snakeY[i] = snakeY[i - 1];
            }
            //判断方向
            if (fx == 'R') {
                this.snakeX[0] += SIZE;
                //边界判断
                if (this.snakeX[0] >= SIZE * MY_WIDTH) {
                    this.snakeX[0] = 0;
                }
            }
            //上
            if (fx == 'U') {
                this.snakeY[0] -= SIZE;
                //边界判断
                if (this.snakeY[0] < SIZE * 4) {
                    this.snakeY[0] = SIZE * MY_HEIGHT-SIZE;
                }
            }
            //下
            if (fx == 'D') {
                this.snakeY[0] += SIZE;
                //边界判断
                if (this.snakeY[0] >= SIZE * MY_HEIGHT) {
                    this.snakeY[0] = SIZE * 4;
                }
            }
            //左
            if (fx == 'L') {
                this.snakeX[0] -= SIZE;
                //边界判断
                if (this.snakeX[0] < 0) {
                    this.snakeX[0] = SIZE * MY_WIDTH-SIZE;
                }
            }
        }
    }

    /**
     * getter&&setter
     */
    public int getLenght() {
        return lenght;
    }

    public void setLenght(int lenght) {
        this.lenght = lenght;
    }

    public int getSnakeX(int i) {
        return snakeX[i];
    }

    public void setSnakeX(int i,int x) {
        this.snakeX[i] = x;
    }

    public int getSnakeY(int i) {
        return snakeY[i];
    }

    public void setSnakeY(int i,int y) {
        this.snakeY[i] = y;
    }

    public char getFx() {
        return fx;
    }

    public void setFx(char fx) {
        this.fx = fx;
    }

    public BufferedImage getBodyIm() {
        return bodyIm;
    }

    public void setBodyIm(BufferedImage bodyIm) {
        this.bodyIm = bodyIm;
    }

    public BufferedImage getHeadImR() {
        return headImR;
    }

    public void setHeadImR(BufferedImage headImR) {
        this.headImR = headImR;
    }

    public int getFxNum() {
        return fxNum;
    }

    public void setFxNum(int fxNum) {
        this.fxNum = fxNum;
    }

    public boolean isStart() {
        return isStart;
    }

    public void setStart(boolean start) {
        isStart = start;
    }

    public boolean isFail() {
        return isFail;
    }

    public void setFail(boolean fail) {
        isFail = fail;
    }
}

二、食物类

package com.snake.model;

import java.util.Random;
import static com.snake.constant.Constant.*;

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName MySnake
 * @ClassName Food
 * @Description TODO
 * @createTime 2020年12月22日 00:17:00
 */
public class Food {
    /**
     * 食物的属性
     */
    private int foodX; //食物的X坐标
    private int foodY; //食物的Y坐标
    Random random = new Random(); //随机数
    
  /**
     *构造器
     */
    public Food(){
        init();
    }

    /**
     * 初始化食物
     */
    private void init(){
        //随机获得X,Y坐标
        this.foodX = (random.nextInt(25)+1)*SIZE;
        this.foodY = (random.nextInt(20)+5)*SIZE;
    }

    /**
     * 方法:食物刷新
     */
    public void foodInit(){
        this.foodX = (random.nextInt(25)+1)*SIZE;
        this.foodY = (random.nextInt(20)+5)*SIZE;
    }

    /**
     * getter&&setter
     */
    public int getFoodX() {
        return foodX;
    }

    public void setFoodX(int foodX) {
        this.foodX = foodX;
    }

    public int getFoodY() {
        return foodY;
    }

    public void setFoodY(int foodY) {
        this.foodY = foodY;
    }
}

三、积分系统类

package com.snake.model;
import static com.snake.constant.Constant.*;
/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName MySnake
 * @ClassName ScoreSystem
 * @Description TODO
 * @createTime 2020年12月22日 14:31:00
 */
public class ScoreSystem {
    /**
     * 属性
     */
    private String scoreName;    //积分文字提示
    private String lengthName;   //长度文字提示
    private int scoreNum;        //积分数值
    private int lengthNum;       //长度数值
    private int X;               //显示X坐标
    private int Y;               //显示Y坐标
    /**
     * 构造器
     */
    public ScoreSystem(){
        init();
    }

    /**
     * 初始化
     */
    private void init(){
        this.scoreName = "积分:";
        this.lengthName = "长度:";
        this.scoreNum = 0;         //初始积分为0
        this.lengthNum = 3;        //初始长度3
        //初始化坐标
        this.X = SIZE*25;
        this.Y = SIZE+15;
    }

    /**
     * 方法:积分加10,长度加1
     */
    public void scoreAugment(){
        this.scoreNum += 10;
        this.lengthNum ++;
    }

    /**
     * 方法:死亡,积分,长度初始化
     */
    public void scoreInit(){
        this.scoreNum = 0;
        this.lengthNum = 3;
    }

    /**
     * getter&&setter
     */
    public String getScoreName() {
        return scoreName;
    }

    public void setScoreName(String scoreName) {
        this.scoreName = scoreName;
    }

    public String getLengthName() {
        return lengthName;
    }

    public void setLengthName(String lengthName) {
        this.lengthName = lengthName;
    }

    public int getScoreNum() {
        return scoreNum;
    }

    public void setScoreNum(int scoreNum) {
        this.scoreNum = scoreNum;
    }

    public int getLengthNum() {
        return lengthNum;
    }

    public void setLengthNum(int lengthNum) {
        this.lengthNum = lengthNum;
    }

    public int getX() {
        return X;
    }

    public void setX(int x) {
        X = x;
    }

    public int getY() {
        return Y;
    }

    public void setY(int y) {
        Y = y;
    }
}

四、死亡标题

package com.snake.model;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import static com.snake.constant.Constant.*;

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName MySnake
 * @ClassName DieTitle
 * @Description TODO
 * @createTime 2020年12月22日 13:47:00
 */
public class DieTitle {
    /**
     * 死亡标题属性
     */
    private BufferedImage dieImage;
    private int dieTitleImX;
    private int dieTitleImY;

    /**
     * 构造器,获得标题图片
     */
    public DieTitle(){
        init();
        File file = new File("static/fail.png");
        try {
            dieImage = ImageIO.read(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 初始化标题坐标
     */
    private void init(){
        this.dieTitleImX = (SIZE-1) * 7;
        this.dieTitleImY = SIZE * 13;
    }

    /**
     *getter&&setter
     */
    public BufferedImage getDieImage() {
        return dieImage;
    }

    public void setDieImage(BufferedImage dieImage) {
        this.dieImage = dieImage;
    }

    public int getDieTitleImX() {
        return dieTitleImX;
    }

    public void setDieTitleImX(int dieTitleImX) {
        this.dieTitleImX = dieTitleImX;
    }

    public int getDieTitleImY() {
        return dieTitleImY;
    }

    public void setDieTitleImY(int dieTitleImY) {
        this.dieTitleImY = dieTitleImY;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值