贪吃蛇(C语言)

贪吃蛇(C语言)

关于游戏

我在实现这个游戏时将其分为了三个部分
1.gameBegin(游戏开始):包括准备界面prepareUI()函数,设置光标不可见invisibleCursor函数,设置游戏界面gameUI函数,初始化蛇intialSnake函数,初始化食物initalFood函数 。

2.gameProcess(游戏进行):包括创建身体结点createSnakeBody
函数,创建食物createFood函数,蛇身体移动moveSnake函数,打印蛇、食物以及界面showSnake函数,判断游戏是否结束judgGame函数,记录分数recordScore函数。

3.gameEnd(游戏结束):包括游戏结束更新排行榜updateRanking函数,游戏结束界面endUI函数。

结构体设置

我在实现游戏时用到了三个结构体,分别来表示蛇,食物和排行榜 。蛇的结构体我使用了链表结构,在实现游戏的同时我也对链表的操作进行了练习。

    typedef struct {
        char bodylook;          //蛇身样式
        int x;                  //蛇身结点的x坐标
        int y;                  //蛇身结点的y坐标
        int motionNum;          //蛇身结点的当前运动方向
        struct SnakeBody *next; //指向下一蛇身结点
        struct SnakeBody *pre;  //指向前驱结点
    }SnakeBody;

    typedef struct {
        int x;  //食物的x坐标
        int y;  //食物的y坐标
    }Food;

    typedef struct {
        int score;  //分数
        char *name; //姓名
    }RankList;

游戏难点

总的来说贪吃蛇这个游戏比较简单,我在实现这个游戏时主要用到了控制台光标的控制,设置光标信息来打印蛇,用system(“cls”)清屏来实现动画效果。

这个游戏唯一的难点在于蛇的移动,控制和打印
移动:蛇的移动每单位时间整体向前移动一个单位,用蛇头的motionNum来控制蛇的移动方向。每单位时间从蛇尾结点开始遍历蛇身,当前结点的x、y值等于前一个蛇身结点的x、y值,最后蛇头结点按照运动方向向前移动一个单位

控制:如果单一使用getch()函数来对蛇进行控制,在你不按下按钮的时候程序无法向下执行。所以可以使用_kbhit()函数来实现蛇的控制。

if (_kbhit()) {
    ch = _getch();
}

按下按钮_kbhit()返回值为1,然后对ch进行赋值。

打印:我在这里使用了控制台光标的相关知识,不了解的朋友可以参考一下我的上一篇分享http://blog.csdn.net/Caramelsa/article/details/78507475
总的来说就是设置光标的位置,然后打印。

游戏截图




写在最后:这个游戏大体上来说完成了整个游戏过程,但在细节上还存在许多小瑕疵。博主也是刚开始自学编程,不足的地方希望大家能够提出,大家共同进步。
游戏的源码大概400多行,比较多,就不在这里放出了,(>人<;)恬不知耻的贴出自己的GitHub地址,这个游戏的源码就在上面(逃

https://github.com/Joezeo/CodesRepositoryII/blob/master/C_snake/C_snake/C_snake.c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值