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

现在都有什么网站工作室wordpress支持视频

现在都有什么网站工作室,wordpress支持视频,八百客crm系统登录入口,子网站域名ip地址查询目录 文章结尾有代码可自取 Win32API 光标的隐藏 获取按键信息 控制光标位置 游戏开始前的准备 游戏准备及介绍 加载和欢迎界面 打印游戏指南 运行游戏 打印墙体和说明 设置蛇的各个信息 初始化及打印蛇 创造食物 运行游戏 1#xff09;打印得分情况 2#…目录 文章结尾有代码可自取 Win32API 光标的隐藏 获取按键信息 控制光标位置 游戏开始前的准备 游戏准备及介绍 加载和欢迎界面 打印游戏指南 运行游戏 打印墙体和说明 设置蛇的各个信息 初始化及打印蛇 创造食物 运行游戏 1打印得分情况 2获取按键信息 3蛇走的下一步 下一步不是食物 下一步是食物 4检查是否撞到墙或自己 游戏结束 各个文件代码统计 头文件 源文件 源文件 文章结尾有源码可自取 Win32API 此处首先对Win32API进行简单的介绍在游戏中光标的隐藏获得用户按键信息的都会用到 以下操作要包含头文件windows.h  光标的隐藏 //隐藏光标 void Hide_cursor(void) {//获得输出控制台句柄HANDLE houtput NULL;houtput GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台光标信息CONSOLE_CURSOR_INFO cursor_info;GetConsoleCursorInfo(houtput, cursor_info);//将光标信息中的可见度改为0cursor_info.bVisible 0;SetConsoleCursorInfo(houtput, cursor_info); } 获取按键信息 可以读取用户按下了哪一个键。 //获取按键信息 #define KEY_PRESS(vk) (GetAsyncKeyState(vk)?1:0) //vk表示按键 //如Key_Press(VK_UP)如果用户按下↓则返回1否则是0 控制光标位置 在有一些情况不希望将光标放在控制台黑框的开始默认位置我们可能需要在控制台中央打印此时就需要对控制台光标位置进行定位。 //定位光标位置 void SetPos(size_t x, size_t y) {//获得输出控制台句柄HANDLE houtput NULL;houtput GetStdHandle(STD_OUTPUT_HANDLE);// 获取光标COORD cursorPos { 0, 0 };//修改光标位置cursorPos.X x;cursorPos.Y y;SetConsoleCursorPosition(houtput,cursorPos); } 关于Win32API的知识不过多讲解对于初学者可以直接使用上述代码实现功能。有兴趣可以看windows的控制台函数。控制台函数 - Windows Console | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows/console/console-functions 游戏开始前的准备 游戏进行时我们有时候想要打印图案字符eg■◯Ő以及一些汉字宽字符。我们就需要将程序修改为本地状态可以理解为不仅仅能够打印外国的英文还能够打印我们本地中文汉字。 为了有更好的游戏体验需要对控制台的大小和名称进行修改。 #includelocale.h void Prepare(void) {//先将程序改成本地模式setlocale(LC_ALL, );//先对控制台的大小进行修改system(mode con cols150 lines40);//对名称进行重命名system(title 贪吃蛇); } 游戏准备及介绍 隐藏完光标后我们进行游戏开始之前的打印范围两部分打印加载和欢迎页面打印游戏指南方法。所以在游戏开始运行之前有两个页面需要打印。 加载和欢迎界面 先打印第一个封面欢迎和加载界面。此处将代码封装成立三个函数打印进度条函数打印欢迎界面函数。效果如下。 进度条的实现主要是依靠一个数组通过循环向数组里添加字符打印数组从而动态的效果。 //加载界面的打印 void ProcessBar(void) {wchar_t bar[102] { \0 }; //设置一个字符串来当作进度条int cnt 0;while (cnt 100){SetPos(25, 21); //定位wprintf(GREEN L[%-101ls] RESET[%d%%], bar, cnt); //打印进度条并加上颜色Sleep(100); //休眠100毫秒bar[cnt] L█;cnt;} }void Print_Page1(void) {//定位光标打印欢迎语句SetPos(65, 18);wprintf(YELLOW L欢迎进入贪吃蛇游戏 RESET);//打印加载的进度条ProcessBar(); } 可以看到在上买了的代码中添加了控制输出字符串的颜色定义如下可自取。 //定义一些颜色 #define RESET L\033[0m // 恢复默认// 前景色 (文本颜色) #define BLACK L\033[30m #define RED L\033[31m #define GREEN L\033[32m #define YELLOW L\033[33m #define BLUE L\033[34m #define MAGENTA L\033[35m #define CYAN L\033[36m #define WHITE L\033[37m 打印游戏指南 为了让用户有更好的游戏体验需要对玩法进行说明。第二张画面打印游戏指南。效果如下。 void Print_Page2(void) {system(cls);//清屏SetPos(58, 17);wprintf(MAGENTA L用↑↓←→来控制方向,ESC退出SPACE暂停);SetPos(58, 18);wprintf(LF1加速F2减速);SetPos(58, 19);wprintf(L加速可以获得更多积分减速获得积分变慢 RESET);SetPos(58, 21);system(pause); } 将page1和page2结合。 void game_prepare(void) {//隐藏光标Hide_cursor();//设置控制台名称和大小Prepare();//打印第一个画面,进入画面Print_Page1();//打印游戏指南Print_Page2(); }运行游戏 打印墙体和说明 墙体的长和宽都可以自定义设置。效果如下。 打印墙体的时候要注意临界位置的讨论。 //打印墙体 void Print_Wall(void) {SetPos(0, 0);//打印横向for (int i 0; i LEN; i 2) //注意此处是2因为宽字符的宽度是2不像普通字符一样wprintf(L%c, WALL);SetPos(0, WIDTH);for (int i 0; i LEN; i 2) wprintf(L%c, WALL);//打印纵向for (int i 1; i WIDTH; i){SetPos(0, i);wprintf(L%c, WALL);SetPos(LEN-2, i);wprintf(L%c, WALL);} }//打印说明 void Print_RULE(void) {SetPos(100, 8);wprintf(GREEN L↑↓←→来控制方向);SetPos(100, 9);wprintf(LESC退出SPACE暂停);SetPos(100, 10);wprintf(LF1加速F2减速);SetPos(100, 11);wprintf(L加速可以获得更多积分减速获得积分变慢 RESET); } 设置蛇的各个信息 在打印蛇之前需要考虑设置什么样的信息。此处首先就是蛇身的各个节点还需要蛇的方向状态蛇的得分以及食物信息所以要创建多个结构体蛇的各个信息蛇的每个节点关于食物的信息。 通过枚举将蛇的方向状态一一列举出来。 //设置方向 typedef enum DIR {RIGHT,LEFT,UP,DOWN }DIR; //设置蛇的状态 typedef enum STATE {FINE, //正常DEAD_BYWALL, //撞墙DEAD_BYBODY, //撞到蛇身QUIT //退出 }STATE; //设置蛇节点 typedef struct Snackbody {size_t _x;size_t _y;struct Snackbody* _next; }Snackbody; //食物信息 typedef struct Food {size_t x;size_t y;size_t _each_score; }Food; //设置结构体来存储蛇的各个信息 typedef struct Snack {Snackbody* _head;size_t _speed;size_t _score;DIR dir;STATE state;Food* pf; }Snack; 初始化及打印蛇 初始化打印蛇主要分为两步创建蛇身的各个节点并将其链接初始化蛇的状态得分等信息。 //创造节点 Snackbody* MakeBody() {Snackbody* newbody (Snackbody*)malloc(sizeof(Snackbody));newbody-_next NULL;newbody-_x 0;newbody-_y 0;return newbody; }//对蛇进行初始化 void Init_Snack(Snack* sn) {//对蛇的各个数据进行初始化sn-_head NULL;sn-dir RIGHT;sn-state FINE;sn-_score 0;sn-_speed 200;//创建蛇身Snackbody** snhead (sn-_head); //注意此处需要是二级指针因为要对其地址进行修改Snackbody* tail *snhead;for (int i 0; i 5; i){Snackbody* newbody MakeBody();newbody-_x 20 - i * 2;newbody-_y 15;if ((*snhead) NULL){*snhead newbody;tail newbody;}else{(tail)-_next newbody;tail (tail)-_next;}}//打印Snackbody* cur sn-_head;while (cur ! NULL){SetPos(cur-_x, cur-_y);wprintf(L%c, SNACK);cur cur-_next;} } 创造食物 此处通过伪随机数时间戳来确定食物的位置。 注意创造的食物必须在墙内部并且不能创作到蛇身上。所以在创建完食物后要对食物的位置进行检查。 #define FOOD L豆 //检查食物 bool CHECK_food(Snack* sn) {size_t x sn-pf-x;size_t y sn-pf-y;Snackbody* cur sn-_head;while (cur ! NULL){if (cur-_x x cur-_y y)return false;cur cur-_next;}return true; }//创造食物 void Make_food(Snack* sn) {sn-pf (Food*)malloc(sizeof(Food));sn-pf-_each_score 10;srand((unsigned int)time(NULL)); again:sn-pf-x rand()%652; //食物x范围是2-66sn-pf-y rand()%211; //y的范围是1-21//检查食物是否符合要求//x必须是偶数食物不能出现在蛇身上if (sn-pf-x % 2 ! 0 || !CHECK_food(sn)){goto again;}SetPos(sn-pf-x, sn-pf-y);wprintf(L%c, FOOD); } 运行游戏 游戏是要持续进行的所以肯定要设置循环此处采用do...while循环在蛇没有死之前游戏都要能正常运行所以循环的条件就是蛇的状态是不是FINE。 在循环中主要有4个部分需要处理打印侧栏得分获取按键信息打印蛇的下一步检查状态。具体实现目的如下。 1打印得分情况 游戏运行过程中要保证实时打印总得分及当前每个食物的得分。如下图所示 SetPos(100, 6); wprintf(L总得分%d, sn-_score); SetPos(100, 7); wprintf(L当前食物分数%2d, sn-pf-_each_score); 2获取按键信息 关于按键信息如何获取前面Win32API已经写了此处直接使用其宏定义获取完按键信息后要对蛇的方向进行修改。 对于不同的按键要有不同的响应上下左右直接改变方向即可F1需要添加分数缩短睡眠时间F2相反Esc则需要改变蛇的状态让循环停止Space需要暂停游戏这里使用一个死循环来模拟暂停。 //暂停void SPACE(){while (1){if (KEY_PRESS(VK_SPACE))break;}}//检查按键if (KEY_PRESS(VK_UP) sn-dir ! DOWN)sn-dir UP;if (KEY_PRESS(VK_DOWN) sn-dir ! UP)sn-dir DOWN;if (KEY_PRESS(VK_LEFT) sn-dir ! RIGHT)sn-dir LEFT;if (KEY_PRESS(VK_RIGHT) sn-dir ! LEFT)sn-dir RIGHT;if (KEY_PRESS(VK_F1)){if (sn-_speed 40){sn-pf-_each_score 2;sn-_speed - 40;}}if (KEY_PRESS(VK_F2)){if (sn-pf-_each_score 2){sn-pf-_each_score - 2;sn-_speed 40;}}if (KEY_PRESS(VK_SPACE))SPACE();if (KEY_PRESS(VK_ESCAPE)){sn-state QUIT;break;}Sleep(sn-_speed); //休眠准备打印下一张图片 3蛇走的下一步 可以通过蛇的方向来预测蛇的下一个位置将下一个位置打印成蛇即可实现移动。此处需要考虑下一个位置是不是食物。两种情况是不同的不是食物的话就需要将尾部变为空将下一个位置打印成蛇是食物的话就不需要对尾部进行处理但是需要重新创建食物。 //打印下一张图片 void Print_NEXT(Snack* sn) {//创建下一个位置的节点Snackbody* pnext (Snackbody*)malloc(sizeof(Snackbody));switch(sn-dir){case UP:pnext-_x sn-_head-_x;pnext-_y sn-_head-_y - 1;break;case DOWN:pnext-_x sn-_head-_x;pnext-_y sn-_head-_y 1;break;case LEFT:pnext-_x sn-_head-_x - 2;pnext-_y sn-_head-_y;break;case RIGHT:pnext-_x sn-_head-_x 2;pnext-_y sn-_head-_y;break;}//下一个位置是食物if (pnext-_x sn-pf-x pnext-_y sn-pf-y){IS_FOOD(sn,pnext);}elseNO_FOOD(sn,pnext); } 下一步不是食物 不是食物的话就需要将尾部变为空将下一个位置打印成蛇 //下一个位置不是食物 void NO_FOOD(Snack* sn, Snackbody* pnext) {//将下一个节点当成蛇头pnext-_next sn-_head;sn-_head pnext;//找到最后一个节点并释放Snackbody* cur sn-_head;while (cur-_next-_next ! NULL)cur cur-_next;//将蛇尾从原本的蛇改为空SetPos(cur-_next-_x, cur-_next-_y);wprintf(L );free(cur-_next);cur-_next NULL;//将蛇的下一个位置打印成蛇SetPos(pnext-_x, pnext-_y);wprintf(L%c, SNACK); } 下一步是食物 //下一个位置是食物 void IS_FOOD(Snack* sn,Snackbody* pnext) {//将食物直接当成蛇头pnext-_next sn-_head;sn-_head pnext;SetPos(pnext-_x, pnext-_y);wprintf(L%c, SNACK);//加分sn-_score sn-pf-_each_score;//创建食物Make_food(sn); } 4检查是否撞到墙或自己 此处直接通过坐标进行检查即可。 //检查是不是墙 void IF_WALL(Snack* sn) {if (sn-_head-_x LEN - 2 || sn-_head-_x 0)sn-state DEAD_BYWALL;if (sn-_head-_y WIDTH || sn-_head-_y 0)sn-state DEAD_BYWALL; }//检查是否撞到自己 void IF_SELF(Snack* sn) {int x sn-_head-_x;int y sn-_head-_y;Snackbody* cur sn-_head-_next;while (cur ! NULL){if (cur-_x x cur-_y y)sn-state DEAD_BYBODY;cur cur-_next;} } 游戏结束 游戏可以正常运行了但是还要对游戏结束进行处理要将游戏结束的信息反馈给用户还要对游戏运行过程中动态开辟的空间进行销毁。 //游戏结束 void Game_over(Snack* sn) {system(cls);SetPos(65, 18);switch (sn-state){case DEAD_BYWALL:wprintf(MAGENTA L你撞到墙了);break;case DEAD_BYBODY:wprintf(L你撞到自己了);break; case QUIT:wprintf(L已退出 RESET);break;}SetPos(0, 35);//释放蛇身各个节点释放动态开辟的空间Snackbody* cur sn-_head;while (cur ! NULL){Snackbody* next cur-_next;free(cur);cur next;}free(sn-pf); } 各个文件代码统计 Blog_Snack.h头文件 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestdlib.h #includewindows.h #includelocale.h #includestdbool.h #includetime.h//定义一些颜色 #define RESET L\033[0m // 恢复默认// 前景色 (文本颜色) #define BLACK L\033[30m #define RED L\033[31m #define GREEN L\033[32m #define YELLOW L\033[33m #define BLUE L\033[34m #define MAGENTA L\033[35m #define CYAN L\033[36m #define WHITE L\033[37m#define WALL L墙 //也可以用█看自己。但是一定要是宽字符 #define SNACK L蛇 //可以定义成其他宽字符 #define FOOD L豆#define LEN 70 #define WIDTH 22//获取按键信息 #define KEY_PRESS(vk) (GetAsyncKeyState(vk)?1:0) //vk表示按键 //如Key_Press(VK_UP)如果用户按下↓则返回1否则是0//设置方向 typedef enum DIR {RIGHT,LEFT,UP,DOWN }DIR; //设置蛇的状态 typedef enum STATE {FINE, //正常DEAD_BYWALL, //撞墙DEAD_BYBODY, //撞到蛇身QUIT //退出 }STATE; //设置蛇节点 typedef struct Snackbody {size_t _x;size_t _y;struct Snackbody* _next; }Snackbody; //食物信息 typedef struct Food {size_t x;size_t y;size_t _each_score; }Food; //设置结构体来存储蛇的各个信息 typedef struct Snack {Snackbody* _head;size_t _speed;size_t _score;DIR dir;STATE state;Food* pf; }Snack;//设置控制台名称和大小 void Prepare(void); //打印游戏指南 void Print_Page2(void);//隐藏光标 void Hide_cursor(void);//定位光标位置 void SetPos(size_t x, size_t y);//开始前的准备 void game_prepare(void);//第一个界面 void Print_Page1(void);//加载界面的打印 void ProcessBar(void);//运行游戏 void game_start(void);//打印墙体 void Print_Wall(void);//打印说明 void Print_RULE(void);//打印蛇 void Print_Snack(Snack* sn);//对蛇进行初始化 void Init_Snack(Snack* sn);//创造节点 Snackbody* MakeBody();//创造食物 void Make_food(Snack* sn);//检查食物 bool CHECK_food(Snack* sn);//游戏运行 void start(Snack* sn);//打印下一张图片 void Print_NEXT(Snack* sn);//暂停 void SPACE();//下一个位置是食物 void IS_FOOD(Snack* sn,Snackbody* pnext);//下一个位置不是食物 void NO_FOOD(Snack* sn, Snackbody* pnext);//检查是不是墙 void IF_WALL(Snack* sn);//检查是否撞到自己 void IF_SELF(Snack* sn);//游戏结束 void Game_over(Snack* sn); Snack.c源文件 #define _CRT_SECURE_NO_WARNINGS 1 #includeBlog_Snack.h//隐藏光标 void Hide_cursor(void) {//获得输出控制台句柄HANDLE houtput NULL;houtput GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台光标信息CONSOLE_CURSOR_INFO cursor_info;GetConsoleCursorInfo(houtput, cursor_info);//将光标信息中的可见度改为0cursor_info.bVisible 0;SetConsoleCursorInfo(houtput, cursor_info); }//定位光标位置 void SetPos(size_t x, size_t y) {//获得输出控制台句柄HANDLE houtput NULL;houtput GetStdHandle(STD_OUTPUT_HANDLE);// 获取光标COORD cursorPos { 0, 0 };//修改光标位置cursorPos.X x;cursorPos.Y y;SetConsoleCursorPosition(houtput,cursorPos); }#includelocale.h void Prepare(void) {//先将程序改成本地模式setlocale(LC_ALL, );//先对控制台的大小进行修改system(mode con cols150 lines40);//对名称进行重命名system(title 贪吃蛇); }//加载界面的打印 void ProcessBar(void) {wchar_t bar[102] { \0 }; //设置一个字符串来当作进度条int cnt 0;while (cnt 100){SetPos(25, 21); //定位wprintf(GREEN L[%-101ls] RESET[%d%%], bar, cnt); //打印进度条并加上颜色Sleep(1); //休眠100毫秒bar[cnt] L█;cnt;} }void Print_Page1(void) {//定位光标打印欢迎语句SetPos(65, 18);wprintf(YELLOW L欢迎进入贪吃蛇游戏 RESET);//打印加载的进度条ProcessBar(); }void Print_Page2(void) {system(cls);//清屏SetPos(58, 17);wprintf(MAGENTA L用↑↓←→来控制方向,ESC退出SPACE暂停);SetPos(58, 18);wprintf(LF1加速F2减速);SetPos(58, 19);wprintf(L加速可以获得更多积分减速获得积分变慢 RESET);SetPos(58, 21);system(pause); }//打印墙体 void Print_Wall(void) {SetPos(0, 0);//打印横向for (int i 0; i LEN; i 2) //注意此处是2因为宽字符的宽度是2不像普通字符一样wprintf(L%c, WALL);SetPos(0, WIDTH);for (int i 0; i LEN; i 2) wprintf(L%c, WALL);//打印纵向for (int i 1; i WIDTH; i){SetPos(0, i);wprintf(L%c, WALL);SetPos(LEN-2, i);wprintf(L%c, WALL);} }//打印说明 void Print_RULE(void) {SetPos(100, 8);wprintf(GREEN L↑↓←→来控制方向);SetPos(100, 9);wprintf(LESC退出SPACE暂停);SetPos(100, 10);wprintf(LF1加速F2减速);SetPos(100, 11);wprintf(L加速可以获得更多积分减速获得积分变慢 RESET); }//创造节点 Snackbody* MakeBody() {Snackbody* newbody (Snackbody*)malloc(sizeof(Snackbody));newbody-_next NULL;newbody-_x 0;newbody-_y 0;return newbody; }//对蛇进行初始化 void Init_Snack(Snack* sn) {//对蛇的各个数据进行初始化sn-_head NULL;sn-dir RIGHT;sn-state FINE;sn-_score 0;sn-_speed 200;//创建蛇身Snackbody** snhead (sn-_head); //注意此处需要是二级指针因为要对其地址进行修改Snackbody* tail *snhead;for (int i 0; i 5; i){Snackbody* newbody MakeBody();newbody-_x 20 - i * 2;newbody-_y 15;if ((*snhead) NULL){*snhead newbody;tail newbody;}else{(tail)-_next newbody;tail (tail)-_next;}}//打印Snackbody* cur sn-_head;while (cur ! NULL){SetPos(cur-_x, cur-_y);wprintf(L%c, SNACK);cur cur-_next;} }//检查食物 bool CHECK_food(Snack* sn) {size_t x sn-pf-x;size_t y sn-pf-y;Snackbody* cur sn-_head;while (cur ! NULL){if (cur-_x x cur-_y y)return false;cur cur-_next;}return true; }//创造食物 void Make_food(Snack* sn) {sn-pf (Food*)malloc(sizeof(Food));sn-pf-_each_score 10;srand((unsigned int)time(NULL)); again:sn-pf-x rand()%652; //食物x范围是2-66sn-pf-y rand()%211; //y的范围是1-21//检查食物是否符合要求//x必须是偶数食物不能出现在蛇身上if (sn-pf-x % 2 ! 0 || !CHECK_food(sn)){goto again;}SetPos(sn-pf-x, sn-pf-y);wprintf(L%c, FOOD); }//下一个位置是食物 void IS_FOOD(Snack* sn,Snackbody* pnext) {//将食物直接当成蛇头pnext-_next sn-_head;sn-_head pnext;SetPos(pnext-_x, pnext-_y);wprintf(L%c, SNACK);//加分sn-_score sn-pf-_each_score;//创建食物Make_food(sn); }//下一个位置不是食物 void NO_FOOD(Snack* sn, Snackbody* pnext) {//将下一个节点当成蛇头pnext-_next sn-_head;sn-_head pnext;//找到最后一个节点并释放Snackbody* cur sn-_head;while (cur-_next-_next ! NULL)cur cur-_next;//将蛇尾从原本的蛇改为空SetPos(cur-_next-_x, cur-_next-_y);wprintf(L );free(cur-_next);cur-_next NULL;//将蛇的下一个位置打印成蛇SetPos(pnext-_x, pnext-_y);wprintf(L%c, SNACK); }//打印下一张图片 void Print_NEXT(Snack* sn) {//创建下一个位置的节点Snackbody* pnext (Snackbody*)malloc(sizeof(Snackbody));switch(sn-dir){case UP:pnext-_x sn-_head-_x;pnext-_y sn-_head-_y - 1;break;case DOWN:pnext-_x sn-_head-_x;pnext-_y sn-_head-_y 1;break;case LEFT:pnext-_x sn-_head-_x - 2;pnext-_y sn-_head-_y;break;case RIGHT:pnext-_x sn-_head-_x 2;pnext-_y sn-_head-_y;break;}//下一个位置是食物if (pnext-_x sn-pf-x pnext-_y sn-pf-y){IS_FOOD(sn,pnext);}elseNO_FOOD(sn,pnext); }//暂停 void SPACE() {while (1){if (KEY_PRESS(VK_SPACE))break;} }//检查是不是墙 void IF_WALL(Snack* sn) {if (sn-_head-_x LEN - 2 || sn-_head-_x 0)sn-state DEAD_BYWALL;if (sn-_head-_y WIDTH || sn-_head-_y 0)sn-state DEAD_BYWALL; }//检查是否撞到自己 void IF_SELF(Snack* sn) {int x sn-_head-_x;int y sn-_head-_y;Snackbody* cur sn-_head-_next;while (cur ! NULL){if (cur-_x x cur-_y y)sn-state DEAD_BYBODY;cur cur-_next;} }//游戏结束 void Game_over(Snack* sn) {system(cls);SetPos(65, 18);switch (sn-state){case DEAD_BYWALL:wprintf(MAGENTA L你撞到墙了);break;case DEAD_BYBODY:wprintf(L你撞到自己了);break; case QUIT:wprintf(L已退出 RESET);break;}SetPos(0, 35);//释放蛇身各个节点释放动态开辟的空间Snackbody* cur sn-_head;while (cur ! NULL){Snackbody* next cur-_next;free(cur);cur next;}free(sn-pf); }//游戏运行 void start(Snack* sn) {do {SetPos(100, 6);wprintf(L总得分%d, sn-_score);SetPos(100, 7);wprintf(L当前食物分数%2d, sn-pf-_each_score);//检查按键if (KEY_PRESS(VK_UP) sn-dir ! DOWN)sn-dir UP;if (KEY_PRESS(VK_DOWN) sn-dir ! UP)sn-dir DOWN;if (KEY_PRESS(VK_LEFT) sn-dir ! RIGHT)sn-dir LEFT;if (KEY_PRESS(VK_RIGHT) sn-dir ! LEFT)sn-dir RIGHT;if (KEY_PRESS(VK_F1)){if (sn-_speed 40){sn-pf-_each_score 2;sn-_speed - 40;}}if (KEY_PRESS(VK_F2)){if (sn-pf-_each_score 2){sn-pf-_each_score - 2;sn-_speed 40;}}if (KEY_PRESS(VK_SPACE))SPACE();if (KEY_PRESS(VK_ESCAPE)){sn-state QUIT;break;}Sleep(sn-_speed); //休眠准备打印下一张图片Print_NEXT(sn);IF_WALL(sn);IF_SELF(sn);} while (sn-state FINE);//游戏结束Game_over(sn);} Snack_main.c源文件 #define _CRT_SECURE_NO_WARNINGS 1 #includeBlog_Snack.hvoid game_prepare(void) {//隐藏光标Hide_cursor();//设置控制台名称和大小Prepare();//打印第一个画面,进入画面Print_Page1();//打印游戏指南Print_Page2(); }//运行游戏 void game_start(void) {system(cls);//打印墙体Print_Wall();//打印说明Print_RULE();Snack sn;//对蛇进行初始化Init_Snack(sn);//创造食物Make_food(sn);//游戏运行start(sn); }int main() {game_prepare();game_start();return 0; }
http://www.dnsts.com.cn/news/22485.html

相关文章:

  • 外贸网站该怎么做网站开发客户对话
  • 注册网站域名多少钱一年怎么用ps做京东网站模板
  • 网站代运营价格网站建设问题分类和排除方法分析
  • 手机网站建设公司电话咨询网站的建设部署与发布
  • 做彩票网站代理违法吗百度高级搜索入口
  • 免费网站制作知乎东莞市工程建设安监站网站
  • 重庆网站设计公司深圳做响应式网站制作
  • 南宁智慧园区网站建设wordpress站点切换为中文
  • 谷歌网站英文外国做电子产品网站有哪些
  • 免费空间如何放网站成都画册设计的公司
  • 电商网站建设计划书网站服务器空间价格
  • 怎么查网站是哪家制作公司做的网站模板工具
  • 上海做网站找哪个公司好湛江网站的建设
  • 一次性筷子网站建设怎样做网站推广啊抖音
  • 全国分类信息网站wordpress用户角色管理系统
  • 怎么建立信息网站平台网站如何添加百度商桥
  • t想学网站建设盘锦网站建设
  • 网站遭受攻击自己电脑做网站iis
  • 自己建网站做外贸那样的网站18年
  • 手机做ppt的免费模板下载网站想开广告公司怎么起步
  • 公司网站建设计划网站在哪里购买
  • 网站建设数据库代码模板免费的ppt软件
  • 贵州有网站的企业苏州网站建设多少钱
  • 长春建网站一般多少钱网站优化常见的优化技术
  • 公司网站主页怎么做太原网站免费制作
  • wap网站现在还有什么用聊天软件开发技术
  • 网站编程是什么意思番禺响应式网站建设
  • c++网站开发西安广告设计与制作公司
  • 企业网站源码交易莱芜交友论坛
  • 国外网站如何做seo网站群软件