贪吃蛇项目实践!(下)

简介: 至此,我们的贪吃蛇项目就完结啦,我们下一个栏目见!

NextIsFood

比较蛇指向的节点和食物指向的节点是否相同

//pSnakeNode psn 是下⼀个节点的地址
//pSnake ps 维护蛇的指针
int NextIsFood(pSnakeNode psn, pSnake ps)
{
      return (psn->x == ps->_pFood->x) && (psn->y == ps->_pFood->y);
}

EatFood

//pSnakeNode psn 是下⼀个节点的地址
//pSnake ps 维护蛇的指针
void EatFood(pSnakeNode psn, pSnake ps)
{
      //头插法
    psn->next = ps->_pSnake;
    ps->_pSnake = psn;
     //打印蛇
    pSnakeNode cur = ps->_pSnake;
    while (cur)
    {
        SetPos(cur->x, cur->y);
        wprintf(L"%c", BODY);
        cur = cur->next;
     }
    ps->_Socre += ps->_foodWeight;
    //释放⻝物节点
    free(ps->_pFood);
    //创建新的⻝物
    CreateFood(ps);
}

NoFood

将下⼀个节点头插⼊蛇的⾝体,并将之前蛇⾝最后⼀个节点打印为空格,释放掉蛇⾝的最后⼀个节

点。


易错点:这⾥最容易错误的是,释放最后⼀个结点后,还得将指向在最后⼀个结点的指针改为NULL,保证蛇尾打印可以正常结束,不会越界访问。

//pSnakeNode psn 是下⼀个节点的地址
//pSnake ps 维护蛇的指针
void NoFood(pSnakeNode psn, pSnake ps)
{
   //头插法
   psn->next = ps->_pSnake;
   ps->_pSnake = psn;
   //打印蛇
   pSnakeNode cur = ps->_pSnake;
   while (cur->next->next)
   {
       SetPos(cur->x, cur->y);
       wprintf(L"%c", BODY);
       cur = cur->next;
    }
//最后⼀个位置打印空格,然后释放节点
   SetPos(cur->next->x, cur->next->y);
   printf(" ");
   free(cur->next);
   cur->next = NULL;
}

KillByWall

//pSnake ps 维护蛇的指针
int KillByWall(pSnake ps)
{
    if ((ps->_pSnake->x == 0)
    || (ps->_pSnake->x == 56)
    || (ps->_pSnake->y == 0)
    || (ps->_pSnake->y == 26))
   {
      ps->_Status = KILL_BY_WALL;
      return 1;
    }
return 0;
}

KillBySelf

判断蛇头的坐标是否和蛇⾝体的坐标冲突

//pSnake ps 维护蛇的指针
int KillBySelf(pSnake ps)
{
    pSnakeNode cur = ps->_pSnake->next;
    while (cur)
    {
      if ((ps->_pSnake->x == cur->x)&& (ps->_pSnake->y == cur->y))
      {
          ps->_Status = KILL_BY_SELF;
          return 1;
       }
      cur = cur->next;
    }
    return 0;
}

游戏结束

void GameEnd(pSnake ps)
{
    pSnakeNode cur = ps->_pSnake;
    SetPos(24, 12);
    switch (ps->_Status)
    {
       case END_NOMAL:
          printf("您主动退出游戏\n");
          break;
       case KILL_BY_SELF:
          printf("您撞上⾃⼰了 ,游戏结束!\n");
          break;
       case KILL_BY_WALL:
          printf("您撞墙了,游戏结束!\n");
          break;
     }
     //释放蛇⾝的节点
    while (cur)
    {
       pSnakeNode del = cur;
       cur = cur->next;
       free(del);
     }
}

至此,我们的贪吃蛇项目就完结啦,我们下一个栏目见!

相关文章
|
小程序 测试技术 Python
软件测试|教你使用Python实现五子棋游戏(一)
软件测试|教你使用Python实现五子棋游戏(一)
363 0
软件测试|教你使用Python实现五子棋游戏(一)
|
2天前
|
前端开发 安全 UED
贪吃蛇游戏创作手记:从构思到优化
使用通义灵码辅助开发贪吃蛇游戏的过程,从游戏框架搭建到代码优化,详细记录了遇到的问题及解决方案。重点讨论了安全性、逻辑Bug、异常处理、边界条件、性能效率和可维护性等方面的优化措施,最终成功完成游戏开发
|
5天前
|
API C语言 C++
贪吃蛇游戏(必备知识篇)
贪吃蛇游戏(必备知识篇)
24 1
|
5月前
javaOOP实现跳高大挑战!手把手教你实现小游戏!
javaOOP实现跳高大挑战!手把手教你实现小游戏!
35 2
javaOOP实现跳高大挑战!手把手教你实现小游戏!
|
4月前
|
前端开发 JavaScript
前端复刻经典小游戏之飞机大战(一)
前端复刻经典小游戏之飞机大战(一)
53 1
|
5月前
|
存储 程序员 定位技术
贪吃蛇项目实践!(上)
大家好,今天我带着大家从0构建起贪吃蛇项目的高楼大厦~ 要实现这个游戏,我们需要实现哪些功能呢? 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏
71 1
|
4月前
|
前端开发 JavaScript 安全
前端复刻经典小游戏之飞机大战(三)
前端复刻经典小游戏之飞机大战(三)
46 0
|
4月前
|
前端开发 JavaScript 测试技术
前端复刻经典小游戏之飞机大战(二)
前端复刻经典小游戏之飞机大战(二)
80 0
|
5月前
|
定位技术 API
手把手教你实现贪吃蛇(下)
手把手教你实现贪吃蛇(下)
71 0
|
5月前
|
程序员 API 定位技术
手把手教你实现贪吃蛇(上)
手把手教你实现贪吃蛇(上)
103 0