贪吃蛇项目实践!(下)

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

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实现五子棋游戏(一)
软件测试|教你使用Python实现五子棋游戏(一)
|
2月前
|
API C语言 C++
贪吃蛇游戏(必备知识篇)
贪吃蛇游戏(必备知识篇)
108 1
|
4月前
|
算法 程序员 定位技术
探索代码世界的奇幻旅程
【8月更文挑战第30天】 在编程的世界里,每一个代码块都像是一块拼图,它们共同构建起一个庞大而复杂的数字宇宙。本文将通过一系列生动的比喻和实例,带领读者走进编程的奇幻世界,揭示那些隐藏在键盘敲击声背后的奥秘与乐趣。从初学者的迷茫到资深开发者的洞见,我们将一起经历技术成长的心路历程,解锁编程带来的无限可能。
40 2
|
6月前
|
人工智能 安全 定位技术
游戏开发丨基于Pygame的AI版贪吃蛇小游戏
游戏开发丨基于Pygame的AI版贪吃蛇小游戏
127 4
|
7月前
|
存储 程序员 定位技术
贪吃蛇项目实践!(上)
大家好,今天我带着大家从0构建起贪吃蛇项目的高楼大厦~ 要实现这个游戏,我们需要实现哪些功能呢? 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏
86 1
|
7月前
|
Python
python实现贪吃蛇小游戏(附源码 简单易上手)
python实现贪吃蛇小游戏(附源码 简单易上手)
364 0
|
算法 JavaScript Java
游戏开发:碰撞模型,球球大作战小游戏【VB编程经典案例】
游戏开发:碰撞模型,球球大作战小游戏【VB编程经典案例】
132 0
零基础VB教程066期:贪吃蛇游戏开发第二节 让蛇动起来
零基础VB教程066期:贪吃蛇游戏开发第二节 让蛇动起来
103 0
|
开发工具
是时候重新介绍一下小蚂蚁的游戏开发服务了
这可能是你能找到的门槛最低的游戏开发课程了,无需具备游戏开发经验,无需美术经验,也无需编程经验,只需你有一颗想要做游戏的心。跟随着这个系统全面的游戏开发课程,它会一步一步的帮助你做出第一个小游戏,带你进入游戏开发世界的大门。
115 0

热门文章

最新文章