c语言 贪吃蛇游戏

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时跳出循环

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值