#include<curses.h> //使用 ncurses 必须调用它的函数库
#include<stdlib.h>
#include<time.h>
#define UP 1 //宏定义 UP 与 1 等效
#define DOWN -1
#define LEFT 2
#define RIGHT -2
struct Snake //结构体
{
int hang;
int lie;
struct Snake *next;
};
struct Snake *head; //定义结构体类型的指针 head
struct Snake *tail; //定义结构体类型的指针 tail
int key;
int dir;
struct Snake food; //定义结构体类型 food
void initNcurse() //初始化 Ncurses (Ncurses 是一套编程库)
{
initscr(); // Ncurses界面的初始化函数
//获取包括大小和特征在内的终端类型,并设置终端支持的 curses 环境。
keypad(stdscr,1); //使用keypad(stdscr,TURE) 就为“标准屏幕”(stdscr)激活了功能键。
// TURE-> ture-> 1
noecho(); //调用 noecho()函数 禁止输入的字符出现在屏幕上。(防止界面中出现一些乱码)
//echo()函数 允许输入的字符出现在屏幕上。
}
void initFood() //初始化食物
{
food.hang = rand()%20; //rand()%20 取余,取出来的余数是小于20的
food.lie = rand()%20;
}
int hasSnakeNode(int i,int j) //通过判断此时贪吃蛇身子的位置是否与gamPic() 中的位置相同 来决定返回 0 or 1
{
struct Snake *p; //定义结构体类型的指针 p
p = head;
while(p != NULL) //判断 P 存放的地址是否为空
{
if(p->hang ==i && p->lie == j) //判断结构体类型的指针 P 指向的 hang 与 lie 是否与 gamePic() 中的hang 与 lie 都相等
{
return 1; //相等 则返回 1 (在C语言中 1 代表真 ture)
}
p = p->next; //链表下移动, 指针 P 指向链表的的下一个 结构体
}
return 0; // p 存放的地址为空( NULL ), 返回 0 (在C语言中 0 代表假 fack)
}
int hasFood(int i,int j) //该函数是用来判断当 hang==i lie==j 时,是否打印出食物 打印就返回 1, 不打印就返回 0
{
//有返回值的 返回类型用 int ; 不需要返回值的 返回类型用 void (void 是无类型)
if(food.hang == i && food.lie == j){
//判断结构体 food 的 hang 与 lie 是否与 gamePic() 中的hang 与 lie 都相等
return 1; //相等 则返回 1 (在C语言中 1 代表真 ture)
}
return 0;
C贪吃蛇代码详解(ncurse)
最新推荐文章于 2024-08-06 20:47:18 发布