这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【彩屏贪吃蛇小游戏】4、成果贴-完成基本游戏功能

共1条 1/1 1 跳转至

【彩屏贪吃蛇小游戏】4、成果贴-完成基本游戏功能

高工
2024-08-18 13:44:02     打赏

        接下来就是最终的成果展示了,实现的是一个比较完整的贪吃蛇游戏,基本功能包括:

                吃食物增加长度;

                撞到边界结束游戏(也就是重新开始);

        我们在上一步实现了基本啊方向控制,这个时候我们要一步一步增加基础游戏功能,第一步就是吃食物增加长度,首先要产生一个事物,理论上最好使用随机数生成函数,不过这个工程还是不太了解的,这里我们使用的rand()函数,属于一个伪随机数函数。

        主要产生随机食物的位置是初始化的时候以及吃到食物的时候:

rand_cnt = rand();
eat_snake.my_snake_food.iX = rand_cnt%24*10;
rand_cnt = rand();
eat_snake.my_snake_food.iY = rand_cnt%13*10;

        随机获取食物的横纵坐标,注意这里食物选择了和贪吃蛇身体一样的宽度,所以理论上显示屏幕最大是24*13;

        接下来就是吃食物的操作,实际上就是运行的头部遇到食物就算吃到了:

if(eat_snake.my_snake_body[0].iX == eat_snake.my_snake_food.iX && eat_snake.my_snake_body[0].iY == eat_snake.my_snake_food.iY){
    rand_cnt = rand();
    eat_snake.my_snake_food.iX = rand_cnt%24*10;
    rand_cnt = rand();
    eat_snake.my_snake_food.iY = rand_cnt%13*10;
    
    eat_snake.snake_body_len++;
}

        对于边界的判断不过是在达到边缘时的处理,之前的处理是传过去,现在是进行初始化从新开始:

void snake_move(){
        uint16_t i;
        for( i = eat_snake.snake_body_len; i > 0; i--){
                eat_snake.my_snake_body[i].iX = eat_snake.my_snake_body[i-1].iX;
                eat_snake.my_snake_body[i].iY = eat_snake.my_snake_body[i-1].iY;
            
                
        }
        if(eat_snake.snake_body_dir == 0){
            if(eat_snake.my_snake_body[0].iX >= 230){
                restart_flag = 1;
            }
            else{
                eat_snake.my_snake_body[0].iX += eat_snake.snake_body_width;
                eat_snake.my_snake_body[0].iY += 0;
            }
        }
        else if(eat_snake.snake_body_dir == 1){
            if(eat_snake.my_snake_body[0].iX == 0){
                restart_flag = 1;
            }
            else{
            eat_snake.my_snake_body[0].iX -= eat_snake.snake_body_width;
            eat_snake.my_snake_body[0].iY += 0;
            }
        }
        else if(eat_snake.snake_body_dir == 2){
            if(eat_snake.my_snake_body[0].iY >= 120){
                restart_flag = 1;
            }
            else{
                eat_snake.my_snake_body[0].iY += eat_snake.snake_body_width;
                eat_snake.my_snake_body[0].iX += 0;
            }
        }
        else if(eat_snake.snake_body_dir == 3){
            if(eat_snake.my_snake_body[0].iY == 0){
                restart_flag = 1;
            }
            else{
                eat_snake.my_snake_body[0].iY -= eat_snake.snake_body_width;
                eat_snake.my_snake_body[0].iX += 0;
            }
        }
        
        if(eat_snake.my_snake_body[0].iX == eat_snake.my_snake_food.iX && eat_snake.my_snake_body[0].iY == eat_snake.my_snake_food.iY){
            rand_cnt = rand();
            eat_snake.my_snake_food.iX = rand_cnt%24*10;
            rand_cnt = rand();
            eat_snake.my_snake_food.iY = rand_cnt%13*10;
            
            eat_snake.snake_body_len++;
            
        }
        
        if(restart_flag == 1){
            snake_init();
            restart_flag = 0;
        }
}

        整体的判断依然是在snake_move()中进行,实际上是在基础处理的基础上更改判断规则就可以了,不过这里实现的只是基础的贪吃蛇游戏功能,基本实现了游戏的操作,要是需要什么更加具有趣味性的操作,大家可以在此基础上进一步进行扩展。

        整体的效果如下:

【彩屏贪吃蛇小游戏成果展示】 https://www.bilibili.com/video/BV1otWAe9EA4/?share_source=copy_web&vd_source=6c53bcbe419a41b4d4827b64953cb205

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]