demo示范 node节点 head头 tail尾 count计数 right右 up上 left左 down下 program程序 function函数 #define宏定义 #define N 10定义后面的N都是10 且定义后面不能有分号 test测试 direction方向 abs(dir)dir的绝对值 static(静态的 静态函数)rand()随机函数 例如rand()%20
1stdio.h的输入输出需要回车才会有反应 所以需要用ncurses函数
ncurses函数 头文件#include <curses.h> 主函数中需要调用keypad(stdscr,1接收),initscr()初始化;printw()输出打印;getch()输入一个字符 秒反应;endwin退出程序;------函数调用
2 地图规划 hang lie 第一行for hang0-19, for lie 0-19嵌套打印-- 换行;第2-18行if lie==0、20!!!则打印 | ,else则打印空格 换行 ;19 行for嵌套打印-- 地图完成-----------函数调用
3 结构体 定义一个hang 一个lie 一个节点变量 struct snake *node = {2,2 ,NULL}
在gamepig函数中扫描到node1->hang == hang && node1->lie == lie!!!!!注意&& 则printw("[]");
4 显示多个蛇身子 链表确定三个点node1 = {2,2,NULL}, node2 = {2,3,NULL} node4 ={2,4,NULL}; node1.next = &node2 然后打印每个位置 else if调用一个函数并把hang lie传过去 在这个函数hasSnakeNode中遍历链表int struct(int hang,int lie)传过来的行列值 struct snake *P,p = &node1, while(p ! = NULL) if p->hang ==hang &&p->lie==lie return1 (打印【】),遍历p = p->next; return 0;
优化显示多个蛇身子 也可以head和tail=NULL,malloc开辟空间 head->hang = 2,head->lie =2,head->next=NULL,每次都要初始化tail= head;再调用函数 没调用一次则多一个节点 在链表尾节点加入新节点定义同一类型new,new=NULL,new用malloc开辟空间new->hang=tail->hang,new->lie=tail->lie+1;每次输出话new->next=NULL,tail->next=new,tail = new;
5 让蛇身体动起来,使用循环 函数调用嵌套调用以上尾节点加一个节,然后让链表头head = head->next;下一项作为链表头,在调用打印函数打印出来 每按一下则动一下;con = getch(),if(con==key_RIGHT)则移动 打印
6 不用按键输入让蛇身子动起来 去掉con直接循环 { 调用移动函数,打印, 再调用刷新函数 refresh(); 再设置刷新时间 sleep和usleep(200000);
7 用线程的方式来移动和改变方向 注意!!头文件、*、结构pthread_t t1; pthread_create(&t1,NULL,refreshJieMian,NULL)、还有编译gcc name.c -lcurses -lphterad
8 解决向左向右问题用绝对值,再初始化函数时应先调用一个noecho(); 在线程调用函数changeDir中 循环 key = getch()switch case up down left right 再调用runt(up、、、、)函数并把上下左右传过去 在runt函数中if(abs(dir)!= abs(direction))则把 dir = direction;再把dir传给addNode switch(dir)选择
9 食物随机问题 用随机函数 rand()%20 rand随机函数对20取余则是在0-19hang lie间, 食物初始化节点 food.hang 和lie节点和==函数传过来的hang lie 则return 1; 在移动函数中 调用加一个节点后if调用hasFood(tail-》hang,tail-》lie)然后初始化 initFood函数 如果不等则走else删除节点head= head-next;
10 防止自己撞死自己问题,在移动函数中,加减之后,调用一个if(ifSnakeDie)函数{ 初始化蛇}
调用函数中1if (tail hang lie四周边界 应 || 如果小于0 大于20则return 1返回移动函数中初始化 2循环遍历头和tail节点是否一样,一样则return 1 重新初始化蛇
算法为while p->next != NULL, if head->hang ==taile->hang && lie也相等 则retuen 1 head = head->next循环遍历查找是否相等 直到最后一项head->next ==NULL时跳出循环