字符游戏-智能蛇

                      字符游戏-智能蛇

1让蛇动起来
2放置奖励的食物
3实现自动寻找


1让蛇动起来


字符表示:

 
 
  1. char BLANK_CHAR = ' ';
  2. char WALL_CHAR = '*';
  3. char SNAKE_HEAD_CHAR = 'H';
  4. char SNAKE_BODY_CHAR = 'X';
  5. char FOOD_CHAR = '$';

用 * 来围成墙体,用 $ 来表示食物,用 H 来表示蛇头,用 X 来表示蛇的身体。

绘出一个方形区域,这是蛇身活动的范围。

 
 
  1. char map[12][13] = {
  2. "************",
  3. "* *",
  4. "* *",
  5. "* *",
  6. "* *",
  7. "* *",
  8. "* *",
  9. "* *",
  10. "* *",
  11. "* *",
  12. "* *",
  13. "************",
  14. };

初始化变量:

 
 
  1. int snakeHeadX = 1, snakeHeadY = 1;
  2. int snakeBodyX[100] = {0}, snakeBodyY[100] = {0};
  3. int snakeBodyLen = 0;
  4. int snakeTailIndex = -1;
  5. int willBeLonger = 0;
  6. int foodX = 0, foodY = 0;
  7. int gameRunning = 1;

编写一个让蛇动起来的函数:

  1. void snakeMove(char control){
  2.  map[snakeHeadX][snakeHeadY]= BLANK_CHAR;
  3.  // record the previous snake head position
  4.  int prevSnakeHeadX= snakeHeadX;
  5.  int prevSnakeHeadY= snakeHeadY;
  6.  switch(control){
  7.   case'w':
  8.     snakeHeadX--;
  9.    break;
  10.   case'a':
  11.     snakeHeadY--;
  12.    break;
  13.   case's':
  14.     snakeHeadX++;
  15.    break;
  16.   case'd':
  17.     snakeHeadY++;
  18.    break;
  19.   default:
  20.    return;
  21.  }
  22.  if(map[snakeHeadX][snakeHeadY]!= BLANK_CHAR&&map[snakeHeadX][snakeHeadY]!= FOOD_CHAR)
  23.  {
  24.     gameOver();
  25.  }


就是说,当输入W时蛇会向上挪动一格,输入A时蛇会向左挪动一格,输入S时蛇会向下挪动一格,输入D时蛇会向右挪动一格。这样,我们就实现了对贪吃蛇行进方向的控制。


2放置奖励的食物


因为每次放置食物的地方随机,程序里应当包含stdlib.h头文件。而为了不用每次都设置不同seed,我们可以给程序中添加time.h头文件。
注意,放置食物的地方不可以事蛇的身体,更不能是墙体。
下面是实现该功能的代码:

  
  
  1. void spawnFood() {
  2. // Random food position
  3. foodX = rand() % 10 + 1;
  4. foodY = rand() % 10 + 1;
  5. while (map[foodX][foodY] != BLANK_CHAR) {
  6. foodX = rand() % 10 + 1;
  7. foodY = rand() % 10 + 1;
  8. }
  9. map[foodX][foodY] = FOOD_CHAR;
  10. }

3实现自动寻找
其实要设置变量表示食物位置,然后用蛇头位置计算出食物位置,然后蛇头判断食物位置方向能不能走,不能就换地方,具体代码如下:
以方向向右为例:

if (xdirection == 'D')
        {
            if (D == 1)
                next = 'D';
            else if (W == 1)
                next = 'W';
            else if (S == 1)
                next = 'S';
            else if (A == 1)
                next = 'A';
            else
            {
                system("cls");
                printf("OH YOUR SNAKE IS TOO STUPID\nGAME OVER!!!\nPRESS ENTER TO QUIT\n");
                getchar();
                return 0;
            }
        }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值