引入线程的贪吃蛇风骚走位

news/2025/1/19 8:43:36/

1.在main函数中分别引入线程t1 和线程 t2

    一个线程用来刷新界面,一个线程用来改变方向

2.刷新界面函数,无限次刷新

3. 也是无限循环while(1) 定义key 从键盘获取输入方向,赋值给dir;

4.在初始化函数中确定蛇向有行走为方向

5.从改变方向的函数changeDir()函数中获取dir的方向,在增加节点函数addNode()中,用switch函数实现蛇方向的改变

代码演示:

#include <curses.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>#define UP   1
#define DOWN 2
#define LEFT 3
#define RIGHT   4void initNcurses()
{initscr();keypad(stdscr,1);noecho();
}struct Snake
{int hang;int lie;struct Snake *next;};struct Snake *head = NULL;
struct Snake *tail = NULL;
int key;
int dir;int hasSnakeNode(int i,int j){       // da yin she shen tistruct Snake *p;p = head;  //ding tou while(p != NULL){if(p -> hang == i && p ->lie == j){return 1;} p = p ->next;}return 0;
}void gamePic()
{int hang;int lie;move(0,0);for(hang = 0;hang<20;hang++){if(hang==0){for(lie=0;lie<20;lie++){printw("--");}printw("\n");}if(hang>= 0 || hang <=18){for(lie = 0;lie<=20;lie++){if(lie == 0 || lie == 20){printw("|");}else if(hasSnakeNode(hang,lie)){printw("[]");}else{printw("  ");}}printw("\n");}if(hang == 19){for(lie=0;lie<20;lie++){printw("--");}printw("\n");printw("by caoshupei,key= %d\n",key);}}
}void addNode()
{struct Snake *new = (struct Snake *)malloc(sizeof(struct Snake));new -> next =NULL;switch(dir){case UP:new -> hang = tail -> hang-1;new -> lie = tail -> lie;break;case DOWN:new -> hang = tail -> hang+1;new -> lie = tail ->lie;break;case LEFT:new -> hang = tail -> hang;new ->lie = tail -> lie-1;break;case RIGHT:new -> hang = tail -> hang;new -> lie = tail -> lie+1;break;}tail -> next = new;tail = new;
}void deleteNode()
{struct Snake *p;p = head;head = head ->next;free(p);    // fang zhi zao cheng hen duo kong yu de jie dian
}void  initSnakebody()
{struct Snake *p;dir = RIGHT;//di yi ci yun xing shi bu hui zouwhile(head != NULL)                  //yi kai shi deng yu kong{                                  //zhuang qiao la jiu shi bu wei kong p = head;head = head -> next;free(p);                   //shi fang nei cun}head = (struct Snake*)malloc(sizeof(struct Snake));head -> hang = 1;                   // gu ding chu shi weizhi head -> lie = 1;head -> next = NULL;               // tou de xie yi ge wei kongtail = head;                       // wei ba bian cheng touaddNode();                         // zeng jia jie dianaddNode();addNode();
}void moveSnake()
{struct Snake *p;
struct Snake *new;addNode();deleteNode();if(tail -> hang == 0|| tail ->lie == 0|| tail->hang == 20 ||tail->lie ==20){initSnakebody();}
}void *refreshjiemian()
{while(1){moveSnake();gamePic();refresh();usleep(100000);}
}void *changeDir()
{while(1){key = getch();switch(key){case KEY_DOWN:dir = DOWN;break;case KEY_UP:dir = UP;break;case KEY_LEFT:dir = LEFT;break;case KEY_RIGHT:dir = RIGHT;break;}}
}int main()
{pthread_t t1;pthread_t t2;initNcurses();initSnakebody();gamePic();pthread_create(&t1,NULL,refreshjiemian,NULL);sleep(1);pthread_create(&t2,NULL,changeDir,NULL);while(1);getch();endwin();return 0;
}


http://www.ppmy.cn/news/1441838.html

相关文章

计算机网络复习(第一章概述)

一、基本概念 1、计算机网络&#xff1a;由若干节点和连接这些结点的链路组成&#xff08;交换机连接&#xff09; 2、互连网&#xff1a;路由器连接的多个计算机网络 3、ISP&#xff1a;互联网服务提供商&#xff0c;ISP高级路由器连接全部组成互联网 4、互联网必须使用TC…

图像的矩(MATLAB源码)

颜色矩(Color Moment)是一种用来描述图像颜色分布的统计特征。它可以用来衡量图像中不同颜色之间的关系,以及颜色分布的特征。常见的颜色矩包括一阶矩(Mean)、二阶矩(Variance)、三阶矩(Skewness)和四阶矩(Kurtosis)等。 颜色矩能够提供关于图像颜色分布的信息,例…

FRPC+PHP+MYSQL+APACHE2=个人网站

应用背景有公网需求,但是又不想去买又贵又低配置的服务器,然后方案就应运而生 frp/README_zh.md at dev fatedier/frp (github.com) 在这里, FRPC作为内网穿透服务, PHPMYSQLAPACHE2,作为网站搭建,具体细节不细讲, 但是在我的/var/www/html下面 linaroHinlink:/var/www/h…

世媒讯提供海内外媒体宣发服务,引领企业新媒体发展之路

在这个信息化的时代&#xff0c;软文发稿已经成为企业发展不可或缺的重要工具。随着社会的快速发展&#xff0c;消费者需要更多定制化、个性化的信息。利用软性推广&#xff0c;凭借其细致入微的信息传递&#xff0c;可以迅速抓住消费者的注意力&#xff0c;从而进一步推动企业…

html+css 选择器优先级

1.基本选择器优先级 id>class>tagname(标签选择器)>*(通配符选择器) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>基本选择器的优先级</title><style type"text/css"…

node-sass报错如何解决

npm install 安装的时候 报node-sass错误 这个一看就是node版本兼容性导致的问题 node-sass与node版本不匹配 下面是常见的node版本和对应的node-sass版本 解决办法 1.单独安装node-sass npm install node-sass9.0.0 还是报上面的错误&#xff01;&#xff01;&#xff01;&a…

Excel数据处理:动态数据分析报表、单元格数字格式、使用排序工具

1、在生成数据透视表之后选中一个单元格&#xff0c;点击插入&#xff0c;在图表中选择一个自己想要的图表。&#xff08;生成可视化的图表&#xff09; 2、在分析中找到切片器&#xff0c;通过点击切片器可以即时变换生成不同的可视化图&#xff0c;可以右键切片器选择关联两个…

B站无限评论暴力截留协议及教程

B站无限评论暴力截留协议及教程 B站无限评论暴力截留协议及教程&#xff0c;需要抓CK &#xff0c;教程里面有讲如何抓取 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#xff1a;0b8x