这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【彩屏贪吃蛇小游戏】3、过程贴-扩展贪吃蛇的控制

共2条 1/1 1 跳转至

【彩屏贪吃蛇小游戏】3、过程贴-扩展贪吃蛇的控制

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

本次的任务:

        基于彩屏驱动函数(已经实现贪吃蛇向右移动),实现贪吃蛇上下左右移动。

        我们首先学习一下目前工程的的基本代码结构,这一部分其实在教学课程中有介绍,首先对于屏幕的驱动这里就不需要再复述了,主要的结构包括小蛇的结构体以及循环1s绘制新的位置。

        目前的教学工程中已经实现了循环贪吃蛇向右移动,我们本次主要实现上下左右的移动控制,这里我们主要加入的就是模块上4个按键的控制与上下左右的移动的关联。

        我们首先要清楚在移动的时候会有个方向的问题,这个时候我们要在my_eat_snake结构体重增加一个成员就是snake_body_dir,咱们这里规定一下关联,就是当A对应上,B对应下,X对应左,Y对应右,在水平移动的时候只能相应上下的按键操作,上下移动的时候只能响应左右按键的操作。

        接下来我们就修改snake_move(),函数的内容:

void snake_move(){
    uint16_t i;
    for( i = eat_snake.snake_body_len - 1; 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){
        eat_snake.my_snake_body[0].iX += eat_snake.snake_body_width;
        if(eat_snake.my_snake_body[0].iX > 230){
            eat_snake.my_snake_body[0].iX = 10;
        }
        eat_snake.my_snake_body[0].iY += 0;
    }
    else if(eat_snake.snake_body_dir == 1){
        eat_snake.my_snake_body[0].iX -= eat_snake.snake_body_width;
        if(eat_snake.my_snake_body[0].iX < 10){
            eat_snake.my_snake_body[0].iX = 230;
        }
        eat_snake.my_snake_body[0].iY += 0;
    }
    else if(eat_snake.snake_body_dir == 2){
        eat_snake.my_snake_body[0].iY += eat_snake.snake_body_width;
        if(eat_snake.my_snake_body[0].iY > 120){
            eat_snake.my_snake_body[0].iY = 10;
        }
        eat_snake.my_snake_body[0].iX += 0;
    }
    else if(eat_snake.snake_body_dir == 3){
        eat_snake.my_snake_body[0].iY -= eat_snake.snake_body_width;
        if(eat_snake.my_snake_body[0].iY < 10){
            eat_snake.my_snake_body[0].iY = 120;
        }
        eat_snake.my_snake_body[0].iX += 0;
    }

}

        然后实现按键与方向的关联:

if(get_button(PIN_DIRECTION_KEY_A) == 1){
    LED_Toggle(PICO_Pack_G_PIN);
    if(eat_snake.snake_body_dir == 0 || eat_snake.snake_body_dir == 1)
        eat_snake.snake_body_dir = 3;
}
if(get_button(PIN_DIRECTION_KEY_B) == 1){
    LED_Toggle(PICO_Pack_G_PIN);
    if(eat_snake.snake_body_dir == 0 || eat_snake.snake_body_dir == 1)
        eat_snake.snake_body_dir = 2;
}
if(get_button(PIN_DIRECTION_KEY_X) == 1){
    LED_Toggle(PICO_Pack_G_PIN);
    if(eat_snake.snake_body_dir == 3 || eat_snake.snake_body_dir == 2)
        eat_snake.snake_body_dir = 1;
}
if(get_button(PIN_DIRECTION_KEY_Y) == 1){
    LED_Toggle(PICO_Pack_G_PIN);
    if(eat_snake.snake_body_dir == 3 || eat_snake.snake_body_dir == 2)
        eat_snake.snake_body_dir = 0;
}

        效果如下:

贪吃蛇方向控制.gif


助工
2024-08-18 20:16:46     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

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