当前位置: 首页 > news >正文

怎样注册网站卖东西网址搜索引擎入口

怎样注册网站卖东西,网址搜索引擎入口,自适应网站建设服务哪家好,长沙网络公司排行榜目录 前言 原代码预览 解决方法⚠️ 运行效果 总结 前言 我们上节通过Linux线程实现了两个while(1)同时运行,这样就可以一边控制方向一遍刷新出贪吃蛇的身体节点了。本节我们就来实现贪吃蛇四方向的移动。 (此图片为最终效果) 原代码预览 我们之前的代码是通过…

目录

前言

原代码预览

解决方法⚠️

运行效果

总结


前言

        我们上节通过Linux线程实现了两个while(1)同时运行,这样就可以一边控制方向一遍刷新出贪吃蛇的身体节点了。本节我们就来实现贪吃蛇四方向的移动。

(此图片为最终效果) 

原代码预览

        我们之前的代码是通过moveSnake()函数实现贪吃蛇的移动的:

#include <curses.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>struct Snake
{int hang;int lie;struct Snake * next;
};struct Snake * head = NULL;
struct Snake * tail = NULL;int key;void initNcurse()
{initscr();keypad(stdscr,1);
}int hasSnakeNode(int i,int j)
{struct Snake * p;p = head;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 <= 19){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 beiweiqiuAC,%d\n",key);}}}void addNode()
{struct Snake * new = (struct Snake *)malloc(sizeof(struct Snake));new->hang = head->hang;new->lie = tail->lie+1;new->next = NULL;tail->next = new;tail = new;
}void initSnake(){struct Snake * p;while(head != NULL){p = head;head = head -> next;free(p);}head = (struct Snake *)malloc(sizeof(struct Snake));head->hang = 1;head->lie = 1;head->next = NULL;tail = head;addNode();addNode();addNode();addNode();
}void deleNode()
{// struct Snake * p;// p = head;head = head ->next;// free(p);
}void moveSnake()
{addNode();deleNode();if(tail ->hang == 0 || tail->lie == 0 || tail->hang == 20 || tail ->lie == 20){initSnake();}
}void* refreshJieMian()
{while(1){moveSnake();gamePic();refresh();usleep(100000);}
}void* changeDir()
{while (1){key = getch();switch (key){case 0402:printw("DOWN\n");break;case 0403:printw("UP\n");break;case 0404:printw("LEFT\n");break;case 0405:printw("RIGHT\n");break;}}
}int main()
{pthread_t t1;pthread_t t2;initNcurse();initSnake();gamePic();pthread_create( &t1, NULL,refreshJieMian, NULL);pthread_create( &t2, NULL, changeDir, NULL);while(1);getch();//防止程序退出endwin();return 0;
}

那么我们详细看一下moveSnake()函数:

void moveSnake()
{addNode();deleNode();if(tail ->hang == 0 || tail->lie == 0 || tail->hang == 20 || tail ->lie == 20){initSnake();}
}

可以很明显的看出主要是由addNode()deleNode()两个函数控制。

解决方法⚠️

那我们有没有办法使这两个函数更智能呢?

(新节点的行和列坐标要根据方向来确定)那么我们来定义出方向的全局变量 。

#define UP    1
#define DOWN  2
#define LEFT  3
#define RIGHT 4
int dir;

并且我们在初始化贪吃蛇的时候加上初始方向(initsnake())。

下面为修改后的initSnake()函数

void initSnake(){struct Snake * p;dir = RIGHT;while(head != NULL){p = head;head = head -> next;free(p);}head = (struct Snake *)malloc(sizeof(struct Snake));head->hang = 1;head->lie = 1;head->next = NULL;tail = head;addNode();addNode();addNode();addNode();
}

         上文可以知道,我们显示贪吃蛇的节点,改变贪吃蛇的节点是通过addNode()deleNode()两个函数,那么我们只需要在addNode()增加上下一节点位置的判断即可

        在贪吃蛇移动的过程中只有四种情况,上下左右,所以简单的switch()语句就可以满足我们的要求。

void addNode()
{struct Snake * new = (struct Snake *)malloc(sizeof(struct Snake));new->next = NULL;switch(dir){case UP:new->hang = head->hang - 1;new->lie = tail->lie;break;case DOWN:new->hang = head->hang + 1;new->lie = tail->lie;break;case LEFT:new->hang = head->hang;new->lie = tail->lie - 1;break;case RIGHT:new->hang = head->hang;new->lie = tail->lie + 1;break;}tail->next = new;tail = new;
}

于此同时我们也需要修改changeDir()函数:

void* changeDir()
{while (1){key = getch();switch (key){case 0402:dir = DOWN;break;case 0403:dir = UP;break;case 0404:dir = LEFT;break;case 0405:dir = RIGHT;break;}}
}

运行效果

        该文件默认命名为snake11.c

打开终端输入以下指令编译该文件:

gcc snake11.c -lcurses

系统会默认生成一个名为“a.out”的可执行文件,输入以下指令执行该程序:

./a.out 

运行效果一🌧️:

运行效果二🍇:

运行效果三✅: 

总结

        我们本节实现了贪吃蛇四方向移动,按住上下左右四个键就会做出相同的反馈,是我们想要的效果😘。

 

http://www.15wanjia.com/news/4065.html

相关文章:

  • 杭州做网站公司网络营销案例范文
  • 前端网站做多语言常见的网络推广方式
  • 购物网站的前台用什么做网站推广平台有哪些
  • 阜阳集团网站建设seo
  • 国务院政府网站发展建设的意见b2b电子商务平台网站
  • 可商用的图片素材网站最近几天新闻大事
  • 用ps做网站中超最新积分榜
  • 网站建设 标准电商线上推广
  • 多个网站对比表格怎么做广州品牌营销服务
  • wordpress会员主页北京seo培训
  • 企业开发网站建设百度有哪些产品
  • 养生网站建设免费短视频精准获客系统
  • 网站图片动态换名高级搜索引擎技巧
  • 网站开发费 发票微信怎么引流营销呢
  • 哪家做的濮阳网站建设郑州seo技术代理
  • 网站开发所需技能应用商店搜索优化
  • 行政机关单位网站建设规定网站推广优化外包公司
  • 注册了域名后怎么设计网站网络营销的发展概述
  • 注重网站建设 把好宣传思想关口互联网运营培训课程
  • 网站策划 ppt百度知道入口
  • 关于建设校园网站的毕业论文百度投票人气排行榜入口
  • 传媒公司招聘岗位重庆seo排名
  • 做营销网站那个好seo快排软件
  • 做网站要学的知识网络推广的方式和途径有哪些
  • 关于网站制作的指标专业seo网络推广
  • 淮北做网站的公司有哪些网络营销成功案例分析
  • 与人妖做视频网站百度网站怎么提升排名
  • 网站建设自学 优帮云常见的营销型网站
  • 中山网站建设新站优化案例
  • 网站定制解决方案快速排名教程