字符版本贪吃蛇游戏设计及算法、或创新玩法

贪吃蛇是我们做的第一个程序游戏,对我这个代码痴来说难度还是挺大,不过既然立下了flag,就要下定决心来做好,并且老师也说贪吃蛇要伴随我们很长时间的,所以动力十足了。
解决思想:自顶向下,逐步求精
首先是贪吃蛇要解决的几个问题:
1.地图的生成
2.蛇头和蛇身
3.食物的随机生成及被吃
4.键盘控制蛇的的移动
5.蛇的死亡:撞墙或咬到蛇身会死
6.键盘控制蛇的的移动
游戏代码:
1.地图
char BLANK_CHAR = ’ ‘;
char WALL_CHAR = ‘*’;
char map[12][13] = {
**”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
“* *”,
**”,
};
2.蛇头和蛇身

3.食物的随机生成及被吃
void spawnFood() {
// Random food position
foodX = rand() % 10 + 1;
foodY = rand() % 10 + 1;
while (map[foodX][foodY] != BLANK_CHAR) {
foodX = rand() % 10 + 1;
foodY = rand() % 10 + 1;
}
map[foodX][foodY] = FOOD_CHAR;
}
检查食物是否被吃
if (snakeHeadX == foodX && snakeHeadY == foodY) {
willBeLonger = 1;
spawnFood();
}
蛇身加长
if (willBeLonger) {
willBeLonger = 0;
moved = 1;
// make space
for (int i = snakeBodyLen - 1; i > snakeTailIndex; –i) {
snakeBodyX[i + 1] = snakeBodyX[i];
snakeBodyY[i + 1] = snakeBodyY[i];
}
snakeBodyX[snakeTailIndex + 1] = prevSnakeHeadX;
snakeBodyY[snakeTailIndex + 1] = prevSnakeHeadY;
if (snakeTailIndex < 0) snakeTailIndex = 0;
map[prevSnakeHeadX][prevSnakeHeadY] = SNAKE_BODY_CHAR;
snakeBodyLen++;
}
4.蛇的移动
void snakeMove(char control) {
map[snakeHeadX][snakeHeadY] = BLANK_CHAR;
// record the previous snake head position
int prevSnakeHeadX = snakeHeadX;
int prevSnakeHeadY = snakeHeadY;
switch (control) {
case ‘w’:
snakeHeadX–;
break;
case ‘a’:
snakeHeadY–;
break;
case ‘s’:
snakeHeadX++;
break;
case ‘d’:
snakeHeadY++;
break;
default:
return;
}
5.蛇的死亡:撞墙或咬到蛇身会死
void gameOver() {
printf(“GAME OVER!!\n”);
gameRunning = 0;
}
判定蛇是否死亡
if (map[snakeHeadX][snakeHeadY] != BLANK_CHAR && map[snakeHeadX][snakeHeadY] != FOOD_CHAR) {
// DIED
gameOver();
}
在自顶向下,逐步分析的方法指导下,一步步解决好每一部分问题,还是挺清晰的。
这里写图片描述
做好之后运行是这样的,输入wasd即可控制蛇的移动了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值