贪吃蛇小游戏【狂神说】

根据学习狂神说的贪吃蛇游戏实现,基于对其代码的实现

一、贪吃蛇实现功能
小蛇根据键盘方向键控制小蛇的移动方向,按一定速率移动。当按下空格键时,开始游戏;再次按下空格键时,暂停游戏。
小蛇不能回头吃自己,小蛇碰到自己的身体时,游戏就显示失败。

二、功能代码实现
1.初始化各个数据

public void init(){
        panel_Width = 850;//面板的宽度
        panel_Height = 600;//面板的高度
        length = 3;//小蛇初始时长度为3
        snake_X[0] = 100;snake_Y[0] = 100;//头的坐标
        snake_X[1] = 75;snake_Y[1] = 100;//第一节身体的坐标
        snake_X[2] = 50;snake_Y[2] = 100;//第二节身体的坐标
        snake_Orientation = "right";//初始头的方向为右
        /*Random random = new Random();随机数据*/
        //食物随机分布在界面上
        food_X = 25 + 25*random.nextInt(33);//生成1到34的随机数
        food_Y = 75 + 25*random.nextInt(23);//生成1到24的随机数
        
        score = 0;//初始化分数为0
        food_Value = 5;//每次吃到一个食物,则分数加5分
    }

2.游戏状态,开始,停止(isStart表示是否开始游戏,默认为暂停游戏状态)

        if (isStrat == false){
            g.setColor(Color.white);
            g.setFont(new Font("微软雅黑", Font.BOLD, 40));	//设置字体
            g.drawString("按下空格开始游戏", 300, 300);
        }

3.游戏失败(isFail表示游戏是否失败,默认为true,即成功状态)

//游戏失败
        if (isFail == true){
            g.setColor(Color.red);
            g.setFont(new Font("微软雅黑", Font.BOLD, 40));	//设置字体
            g.drawString("失败,按下空格重新开始", 220, 300);
        }

4.失败判定,即小蛇撞到自己的身体,则游戏失败

 for (int i = 1; i < length; i++) {	//遍历所有身体坐标
                    if (snake_X[0] == snake_X[i] && snake_Y[0] == snake_Y[i]){
                        isFail = true;
                        break;
                    }
                }

5.小蛇向前移动,每个身体部分的坐标就移动到上一节身体的坐标

for (int i = length-1; i > 0; i--) {//向前移动一节(每个身体都到上一节身体的坐标)
                snake_X[i] = snake_X[i-1];
                snake_Y[i] = snake_Y[i-1];
            }

6.定时器,以ms为单位,小蛇移动一次的时间,刷新时间越大,小蛇移动的越慢
对于此地定时器的实现是在继承事件监听(ActionListener)之后,先对画面进行重画,再启动计时器。每继承一次,就会进行时间的刷新。

 //定时器,以ms为单位
    // Timer timer = new Timer(1000, this);	//1000ms=1s,刷新时间(毫秒),1s执行一次
    Timer timer = new Timer(snake_Speed, this);	//刷新时间, 监听的目标对象

7.键盘监听事件

class keyboardListener extends KeyAdapter{
        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();//获得按下的键
            if (keyCode == KeyEvent.VK_SPACE){	//按下空格
                if (isFail == true){
                    isFail = false;
                    init();//初始化
                }else {
                 //当游戏不是处于失败状态时,按下空格按键,开始或暂停
                    isStrat = !isStrat;	//isStart取反
                }
                repaint();//重绘组件
            }
            //控制小蛇移动不能往回走
            if (keyCode == KeyEvent.VK_UP){
                if (snake_Orientation != "down"){
                    snake_Orientation = "up";	//蛇头变向
                }
            }else if (keyCode == KeyEvent.VK_DOWN){
                if (snake_Orientation != "up"){
                    snake_Orientation = "down";
                }
            }else if (keyCode == KeyEvent.VK_LEFT){
                if (snake_Orientation != "right"){
                    snake_Orientation = "left";
                }
            }else if (keyCode == KeyEvent.VK_RIGHT){
                if (snake_Orientation != "left"){
                    snake_Orientation = "right";
                }
            }
        }
    }

实现结果:
初始状态:小蛇长度为3,按下空格后,小蛇开始移动

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值