Ncurse贪吃蛇
【摘要】 目录一、使用到的API二、实现贪吃蛇基本思路2.1、获取键盘输入2.2、贪吃蛇地图实现2.3、制作蛇身2.4、蛇自行向左移动2.5、蛇撞墙,重新开始2.6、实现蛇的上下左右移动2.6.1、优化左右可以随时改变问题2.7、食物的实现及蛇吃食物2.8、优化点2.8.1、蛇自己撞死自己2.8.2、下方显示吃了几个食物,和食物坐标三、贪吃蛇完整代码一、使用到的API头文件 #include <cur...
目录
一、使用到的API
- 头文件 #include <curses.h>
- 编译gcc 文件名 -lcurses
- 初始化ncurse界面 initscr();
- 输出 printw();
- 输入 getch();
- 程序退出 endwin();
- 接收键盘功能键 keypad();
- 改变光标位置 move(0,0);
- 刷新界面 refresh();
- 取绝对值 abs();
- 关闭回显模式,不让它显示乱七八糟的字符 noecho();
- 随机数 rand();
二、实现贪吃蛇基本思路
2.1、获取键盘输入
获取键盘的上下左右方向键
2.2、贪吃蛇地图实现
使用-- | 画出正方形,第一和最后一行使用-- 和 | ,之间地图部分使用2空格
2.3、制作蛇身
结构体(行列),链表改变添加长度(2个全局变量各指向蛇的头和尾),在刷新地图的时候把蛇添加进去(根据行和列坐标)
2.4、蛇自行向左移动
蛇移动思路,链表的头删除一个,尾加一个结点,就实现了移动(尾在移动)
在主函数每隔一段时间移动一次(要使用函数刷新界面)
进入地图时要加一句,改变光标位置
2.5、蛇撞墙,重新开始
尾节点和墙坐标重合,就重新初始化蛇,要free释放内存空间
2.6、实现蛇的上下左右移动
要想实现蛇的移动和方向键控制,就要使用多线程来实现,一个线程刷新界面,一个键盘输入
键盘输入判断后改变dir,进而改变方向(尾部加节点的时候判断往什么地方加)
加节点的时候,根据dir,判断是往上下左右哪个地方加
2.6.1、优化左右可以随时改变问题
例如:蛇在向左移动,这个时候按右方向键,蛇向右移动了,感觉怪怪的。
解决上面问题,就要用到abs(); 取绝对值函数
上下,左右宏定义为 1,-1,2,-2
当dir是1 的时候按下dir变成-1,这时候加一个判断当前dir和按下这个的dir是否绝对值相同,相同就不改变dir
2.7、食物的实现及蛇吃食物
食物,使用一个结构体,行列坐标用rand随机产生
在moveSnake函数中判断是否,蛇的尾部碰到食物,碰到刷新食物,不删除头,就实现了增加蛇的长度
2.8、优化点
2.8.1、蛇自己撞死自己
遍历整个链表,判断是否和尾部相同坐标,相同坐标,证明撞了
2.8.2、下方显示吃了几个食物,和食物坐标
添加一个全局变量count,当吃到食物就++一次(moveSnake函数里面加)
三、贪吃蛇完整代码
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)