人工贪吃蛇的设计

潘sir让我们写个贪吃蛇
这里写图片描述
贪吃蛇分为三部分,一全局变量的构建、二蛇的移动、三食物的投放。
首先,构造把全局的条件做好。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_MAX_LENGTH 20
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_FOOD '$'
#define WALL_CELL '*'
int snakeX[SNAKE_MAX_LENGTH] = {1,2,3,4,5};
int snakeY[SNAKE_MAX_LENGTH] = {1,1,1,1,1};
int snakeLength = 5;
int game = 2;//利用while循环,如果不是game则游戏结束
char map[12][12]= {
    "************",  //初始状态
    "*XXXXH     *",  //直接打表
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "*          *",
    "************",
};
// define vars for snake, notice name of vars in C

其次,来让蛇移动起来

void snakeMove(int x, int y){//让蛇移动
    map[snakeX[snakeLength-1]][snakeY[snakeLength-1]] = SNAKE_BODY;
    map[snakeX[snakeLength-1]+x][snakeY[snakeLength-1]+y] = SNAKE_HEAD;
    for (int i = 0; i < snakeLength; ++ i){
        snakeX[i] = snakeX[i+1];
        snakeY[i] = snakeY[i+1];
    }
    snakeX[snakeLength-1] = x + snakeX[snakeLength-1];
    snakeY[snakeLength-1] = y + snakeY[snakeLength-1];
}
int main(void) {
    put_FOOD(); //放个食物
    while (game) {
        output();
        char c = getchar();
        switch (c) {
            case 'W': case 'w': snakeMove(0, -1); break;
            case 'S': case 's': snakeMove(0, 1); break;
            case 'A': case 'a': snakeMove(-1, 0); break;
            case 'D': case 'd': snakeMove(1, 0); break;
        }
        gameover();
//        system("cls");
    }
//    printf("The game is over");
}

最后,投放食物。食物应该按照什么规律投放呢?没有规律,随机投放,所以会用到stdlib.h,time.h头文件。

void put_FOOD(void) {
    int i, j, k;
    i = 1 + (rand() % 9);
    j = 1 + (rand() % 9);
    for (k = 0; k < snakeLength - 1; ++ k) {
        if (snakeX[k] == i && snakeY[k] == j) {
            put_FOOD();
        }
    } //蛇身不可后退
    map[i][j] = SNAKE_FOOD;
}

void output() {
    int i, j;
    for (i = 0; i < 12; ++ i) {
        for (j = 0; j < 12; ++ j) {
            printf("%c", map[i][j]);
        }
        printf("\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值