贪吃蛇项目实践!(下)

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

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);
     }
}

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

相关文章
|
4天前
|
存储 程序员 定位技术
贪吃蛇项目实践!(上)
大家好,今天我带着大家从0构建起贪吃蛇项目的高楼大厦~ 要实现这个游戏,我们需要实现哪些功能呢? 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏
14 1
|
4天前
javaOOP实现跳高大挑战!手把手教你实现小游戏!
javaOOP实现跳高大挑战!手把手教你实现小游戏!
16 2
javaOOP实现跳高大挑战!手把手教你实现小游戏!
|
4天前
|
Python
使用Python开发连连看游戏的技术指南
使用Python开发连连看游戏的技术指南
45 0
|
4天前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
206 1
|
4天前
|
算法
连连看游戏系列教程开篇
连连看游戏系列教程开篇
23 0
|
4天前
|
Python
python实现贪吃蛇小游戏(附源码 简单易上手)
python实现贪吃蛇小游戏(附源码 简单易上手)
152 0
|
4天前
|
数据可视化 小程序 前端开发
【iVX】十五分钟制作一款小游戏,iVX真有怎么神?
【iVX】十五分钟制作一款小游戏,iVX真有怎么神?
66 0
|
7月前
|
前端开发 Python
python开发五子棋小游戏如何实现
python开发五子棋小游戏如何 实现
62 0
|
10月前
|
算法 JavaScript Java
|
小程序 容器
如何做一个塔防小游戏(一)
实现一个防守塔非常的简单,因为小游戏制作工具已经为我们提供了现成的“行为”了。 选中作为炮塔的精灵,然后在属性区的下方点击“管理行为”按钮,在行为对话框中开启“炮塔”行为。这个行为已经为我们提供了制作一个防守塔所需的大部分的功能了。
126 0