字符版本的贪吃蛇的设计

其实字符版本的贪吃蛇并不是很大的一个工作量,大概是在120行代码左右。而整个程序的设计也是充分体现着“自顶向下”的设计思路的。
主函数就是极其简单,毕竟最开始思考的时候就是想着什么条件下用户可以玩(蛇没有死掉),什么条件就结束。

int main() {
    playGame();
    printGameOver();
}

playgame过程就包括要把一些元素放上去了,其中也包含了整个游戏的大致过程,先打印出蛇、地图、墙等元素,考虑蛇的移动等,并判断游戏是否结束。

//游戏未结束则继续玩
void playGame() {
    initSnake();
    initFood();
    productFood();
    while (!gameover()) {
        system("cls");
        printMap();
        snakeMove();
        eatFood();
        productFood();
    }
}
//判断游戏是否结束
int gameover() {
    if (snake.x[0] == 0 || snake.x[0] == MAP_LENGTH + 1 
        || snake.y[0] == 0 || snake.y[0] == MAP_HIGHT + 1)
        return 1;
    int i;
    for(i = 1; i < snake.length; ++ i) {
        if( (snake.x[0] == snake.x[i]) && (snake.y[0] == snake.y[i]) )
            return 1;
    }
    return 0;
}

这就基本是贪吃蛇的基本函数了,剩下的事情就是要把每个函数要达到的目的给实现出来。这里就以snakemove为例子:

//根据玩家输入进行移动
void snakeMove() {
    int i;
    for (i = snake.length; i > 0; -- i) {
        snake.x[i] = snake.x[i - 1];
        snake.y[i] = snake.y[i - 1];
    }
    char input = getInput();
    if (input == 'W' || input == 'w') {
        snake.y[0] -= 1;
    }
    if (input == 'S' || input == 's') {
        snake.y[0] += 1;
    }
    if (input == 'A' || input == 'a') {
        snake.x[0] -= 1;
    }
    if (input == 'D' || input == 'd') {
        snake.x[0] += 1;
    }
}

以上便是设计的大致思路了,其实每个问题都要把它分解成多个小问题来解决,要时刻体现出自顶向下的思想,这样的思路才是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值