“丑陋”的贪吃蛇

贪吃蛇作为初学语言的程序员来说是,个不错的练手项目,不过还是需要一定的基础的,而作为一个从没写过项目的小白来说,写这个贪吃蛇可谓难于上青天。
首先,是代码块与块之间的联系:

void game_begin(){
    int i,j;
    while(1){
        Sleep(500);
        direction();
        snake_move();
        show_map();
        if(over) {
            printf("game over\n");
            break;
        }

    }
}

很多时候,是知道这个程序需要什么函数去实现功能的,比如生成食物,生成地图,蛇的移动及数据记录等等,然后当这么多函数都写出来的时候,我发现我没能有效的结合这么多函数,尝试了好多次才终于结合为一个整体。
其次,是蛇吃到食物后长度的变化问题:
这里写图片描述(上图为了使程序更加直观,我调整了长宽)
我第一次尝试的时候,蛇吃到食物后记录的长度是会+1但要在下一次移动的时候才会显示,那么,怎么才能改进这步骤呢?

void check_snake(){
    if(map[snake[0].y][snake[0].x] == wall) over = 1;
    if(map[snake[0].y][snake[0].x] == food) {
        snake_len += 1;
        create_food();
    }
}
void snake_move(){
    int i , x ,y ;
    for(i=snake_len;i>=1;--i){
       snake[i].x = snake[i-1].x;
       snake[i].y = snake[i-1].y;
    }
    switch(direct){
    case 0:
        snake[0].y +=1;
        break;
    case 1:
        snake[0].y -=1;
        break;
    case 2:
        snake[0].x -= 1;
        break;
    case 3:
        snake[0].x += 1;
    }
    check_snake();
    reset_map();
}

如第一个代码片能看到的,我是用snake_move->check_snake->sholew_map 调整了函数的顺序来使长度的变化能马上显示出来
,而为了去得到这个数据,我在一开始的数据储存的时候就额外的输出len+1个元素,如果吃到食物,第len+1个元素就输出X否则输出空格。
在编写过程中我还遇到如何更新蛇的数据,一开始我设想用循环从i=0到i=len-1,但发现不行,必须如下才能实现:

void snake_move(){
int i , x ,y ;
for(i=snake_len;i>=1;--i){
snake[i].x = snake[i-1].x;
snake[i].y = snake[i-1].y;
}

做完种种步骤,基本上蛇就能动了,因为我最初想法只是为了做个贪吃蛇,所以我是用了在玩家不输入的情况下蛇自动移动,所以还是挺好玩的。感觉做的不错,只用了144行,下次继续努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值