简单的贪吃蛇

首先关于贪吃蛇的程序基本的功能无非就是让蛇移动,生成食物,吃到自己或者吃到墙就死了的结束判定,蛇吃食长大这几个部分。

1. 蛇移动可用如下函数实现:

其中包含了移动和吃食两种功能。

void snakeMove(int x, int y)
{
    if(map[snakeY[snakeLength-1]+y][snakeX[snakeLength-1]+x] != '$')//如果下一步没有食物则正常走 
    {
    int i, j;
    int a = snakeY[snakeLength-1];
    int b = snakeX[snakeLength-1];
    map[snakeY[snakeLength-1]][snakeX[snakeLength-1]] = 'X';//先假设蛇都是'X',以便之后对于蛇身进行移动 
    map[snakeY[0]][snakeX[0]] = ' ';//蛇尾走了后就变成' '。 
    for(i = 1; i<snakeLength-1; i++)
    {
        map[snakeY[i]][snakeX[i]] = map[snakeY[i+1]][snakeX[i+1]];//移动蛇身 
    }
    snakeX[snakeLength-1] += x;
    snakeY[snakeLength-1] += y;
    map[snakeY[snakeLength-1]][snakeX[snakeLength-1]] = 'H';
    for(j = 0; j<snakeLength-2; j++)//接下来更新对于蛇身的坐标。 
    {
        snakeX[j] = snakeX[j+1];
        snakeY[j] = snakeY[j+1];
    }
    snakeY[snakeLength-2] = a;//注意这里蛇头的坐标赋给第二个时要赋未改变位置时的值。 
    snakeX[snakeLength-2] = b;
    }
    else//如果下一步有食物,则将数组界加一,把新加的那个坐标定为食物的坐标也即为蛇头,其余坐标均为身子 
    { 
        snakeLength += 1;
        snakeX[snakeLength-1] = snakeX[snakeLength-2]+x;
        snakeY[snakeLength-1] = snakeY[snakeLength-2]+y;
        int i;
        for(i = 0; i < snakeLength-1; i++)
        {
            map[snakeY[i]][snakeX[i]] = 'X';
        }
        map[snakeY[snakeLength-1]][snakeX[snakeLength-1]] = 'H';
        ok = 0;
    } 
}

2. 生成食物

利用随机数来随机在地图内生成食物

void put_money()
{
    int x, y;
    while(ok == 0)
    {
    srand(time(0)); 
    x = rand() % (9) + 1;
    y = rand() % (9) + 1;
    if(map[y][x] == ' ')
    {
        map[y][x] = '$';//用随机数在地图空白处生成食物 
        ok = 1;
        break;
    }
    }
} 

3. 游戏结束的判定

如果蛇吃到了墙或者自己就死了

void gameover()
{
    int a = snakeX[snakeLength-1];
    int b = snakeY[snakeLength-1];
    if(a == 0 || b == 0 || a == 11 || b == 11)//判断是否在边界 
    {
        judge = 0;
    }
    int i;
    for(i = 0; i < snakeLength-1; i++)
    {
        if(b == snakeY[i] && a == snakeX[i])//判断是否吃到了身子 
        {
            judge = 0;
        }
    }
}

除了上述功能外,还要通过不断输出和清屏来实现蛇的连续移动。
主函数如下:

int main(void) {
    output();
    char ch;
    while(judge)//judge用来判断蛇是否越界 
    {
        put_money(); 
        ch =_getch();
        switch (ch) {
            case 'W':
                snakeMove(0, -1);//向上 
                break;
            case 'D':
                snakeMove(1, 0);//向右 
                break; 
            case 'A':
                snakeMove(-1, 0);//向左 
                break; 
            case 'S':
                snakeMove(0, 1);//向下 
                break;  
        }
        gameover();
        if(judge == 0)
        {
            break;
        }
        system("cls");
        output();
    }
    printf("game over!");
    return 0;
}

这样就可以写成一个简单的通过WASD来移动吃食的贪吃蛇了。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值