网站怎么做下载功能高端app开发

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

网站怎么做下载功能,高端app开发,网站建设的完整流程包括哪些,网站开发什么时候用缓存个人主页 ~ gitee仓库~ 欢迎大家来到C语言系列的最后一个篇章–贪吃蛇游戏的实现#xff0c;当我们实现了贪吃蛇之后#xff0c;我们的C语言就算是登堂入室了#xff0c;基本会使用了#xff0c;当然#xff0c;想要更加熟练地使用还需要多多练习 贪吃蛇 一、目标二、需要… 个人主页 ~ gitee仓库~ 欢迎大家来到C语言系列的最后一个篇章–贪吃蛇游戏的实现当我们实现了贪吃蛇之后我们的C语言就算是登堂入室了基本会使用了当然想要更加熟练地使用还需要多多练习 贪吃蛇 一、目标二、需要的知识1、Win32 API概念2、控制台程序1mode命令2COORD坐标3隐藏光标的操作①GetStdHandle②GetConsoleCursorlnfo③CONSOLE_CURSOR_INFO④SetConsoleCursorInfo⑤SetConsoleCursorPosition封装一个函数命名为SetPos专门用来设置光标位置 4GetAsyncKeyState 三、游戏设计与分析1、地图1本地化2类项3setlocale4宽字符的打印5地图坐标 2、蛇身和食物3、数据结构设计4、设计游戏流程 一、目标 使用C语言在Windows环境的控制台中模拟实现贪吃蛇游戏 功能 ①贪吃蛇地图 ②蛇的移动 ③蛇吃食物 ④蛇撞墙或者撞到自己死亡 ⑤计算得分 ⑥暂停游戏 ⑦加速蛇身 ⑧计算得分 二、需要的知识 函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API 其中只有Win32 API我们在之前的博文中没有提到过这里我们一起着重学习一下 1、Win32 API概念 Application Programming Interface应用程序编程接口简称API函数。 Windows是一个多作业系统它除了协调应用程序的执行、分配内存、管理资源之外也是一个很大的服务中心调用这个服务中心的各种服务其中每一种服务就是一个函数可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的这些函数服务的对象就是应用程序Application Win32 API就是Windows32位平台的应用程序编程接口 2、控制台程序 在控制台能够执行的命令在编译器中也可以使用system函数来执行 1mode命令 mode con cols100 lines30;#include stdio.h int main() {//设置控制台的大小为三十行一百列system(mode con cols100 lines30);//设置cmd窗⼝名称system(title 贪吃蛇); return 0; }2COORD坐标 COORD是Windows API中的一个结构体表示一个字符在控制台屏幕上的坐标左上角的坐标为0,0 COORD中有两个short值一个为x一个为y typedef struct _COORD {SHORT X;SHORT Y; }COORD,*PCOORD;COORD p {10,20};//给坐标赋值3隐藏光标的操作 在游戏的过程中我们需要打印蛇身墙壁食物等当我们在进行游戏时是看不到光标闪烁的但光标是存在的所以我们要将它们隐藏 ①GetStdHandle GetStdHandle也是一个Windows API函数它用于从一个特定的设备标准输入、标准输出、标准错误中获得一个句柄使用这个句柄可以操作设备 HANDLE GetStdHandle(DWORD nStdHandle);②GetConsoleCursorlnfo 检索有关指定控制台屏幕缓冲区的光标大小和可见性的信息 BOOL WINAPI GetConsoleCursorInfo (HANDLE hConsoleoutput,PCONSOLE_CURSOR_INFO lpConsoleCursorInfo ); //PCONSOLE_CURSOR_INFO是指向CONSOLE_CURSOR_INFO结构的指针使用 HANDLE houtput NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) houtput GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(houtput, CursorInfo);//获取控制台光标信息③CONSOLE_CURSOR_INFO 包含有关控制台光标的信息是个结构体 typedef struct _CONSOLE_CURSOR_INFO {DWORD dwSize;//光标填充单元格的百分比此值介于1-100光标外观会发生变化BOOL bVisible;//游标的可见性如果游标可见其为TRUE不可见为FALSE } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;④SetConsoleCursorInfo 设置指定控制台屏幕缓冲区的光标大小和可见性 BOOL WINAPI SetConsoleCursorInfo (HANDLE hConsoleoutput,const CONSOLE_CURSOR_INFO lpConsoleCursorInfo );使用 HANDLE houtput GetStdHandle(STD_OUTPUT_HANDLE); //影藏光标操作 CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(houtput, CursorInfo);//获取控制台光标信息 CursorInfo.bVisible false; //隐藏控制台光标 SetConsoleCursorInfo(hOutput, CursorInfo);//设置控制台光标状态⑤SetConsoleCursorPosition 设置指定控制台屏幕缓冲区中的光标位置 BOOL WINAPI SetConsoleCursorPosition (HANDLE hConsoleoutput,COORD pos );我们将想要设置的坐标信息放在pos当中调用该函数将光标位置设置到指定的位置 使用 COORD pos {10, 5}; HANDLE houtput NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) houtput GetStdHandle(STD_OUTPUT_HANDLE); //设置标准输出上光标的位置为pos SetConsoleCursorPosition(hOutput, pos); 封装一个函数命名为SetPos专门用来设置光标位置 void SetPos(short x, short y) {COORD pos { x, y };HANDLE houtput NULL;//获取标准输出的句柄(⽤来标识不同设备的数值)houtput GetStdHandle(STD_OUTPUT_HANDLE);//设置标准输出上光标的位置为posSetConsoleCursorPosition(houtput, pos); }4GetAsyncKeyState 原型 SHORT GetAsyncKeyState (int vKey );这个函数可以通过检测游戏进行时的按键来传递相应的返回值可以实时监测此时按键的状态调用后如果该键按下返回的short值的最高位为1否则为0所以我们定义一个宏来判断该键是否被按下 #define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) 0x1) ? 1 : 0 )括号里是虚拟键代码填入相应的虚拟键代码可以检测键是否被按下 三、游戏设计与分析 1、地图 在游戏中墙体、蛇体以及食物的打印用的是宽字符占用两个字符因为一个字符的话游戏会相当不美观因为x轴的1和y轴的1的长度不同y轴的1的长度约等于x轴的1的两倍 xy1时
x2,y1时 我们可以明显看出格子的区别 在宽字符打印之前我们要进行本地化 1本地化 包含头文件local.h 2类项 ①LC_COLLATE影响字符串比较函数strcoll和strxfrm ②LC_CTYPE影响字符处理函数的行为 ③LC_MONETARY影响货币格式 ④LC_NUMERIC影响printf的数字格式 ⑤LC_TIME影响时间格式strftime和wcsftime ⑥LC_ALL以上所有类别全部修改 3setlocale char
setlocale (int category, const char* locale);该函数用来修改当前地区 第一个 第二个参数仅定义了两种可能的取值 “C”正常模式 “ ”本地模式 切换到本地模式就可以支持宽字符的打印 setlocale(LC_ALL, C);//正常模式 setlocale(LC_ALL, );//本地模式4宽字符的打印 可以把宽字符看做是长的字符 #include stdio.h #include locale.h int main() { setlocale(LC_ALL, ); wchar_t c Ls; wchar_t s Llittle_monster; wprintf(L%lc,c); wprintf(L%ls,s); }5地图坐标 这里我们实现的地图是2758的围绕边缘打印一周墙体 2、蛇身和食物 开始时假设蛇长度为5蛇身的每个节点用◆符号在一个固定的连续5个坐标放蛇身 蛇的每个节点的x坐标都是2的倍数宽字符否则会出现一半节点在里边一半节点在墙里 食物节点的x坐标也是2的倍数并且坐标不能与蛇身重合 3、数据结构设计 游戏运行过程中蛇每吃掉一个食物蛇体就增加一个节点每个节点就存储当前的坐标以及下一个节点的坐标 typedef struct SnakeNode {int x;int y;struct SnakeNode next; }SnakeNode, * pSnakeNode;现在我们有了节点的定义我们再来用一个结构体维护整条贪吃蛇以及食物 typedef struct Snake {pSnakeNode _pSnake;//维护整条蛇的指针pSnakeNode _pFood;//维护⻝物的指针enum DIRECTION _Dir;//蛇头的⽅向,默认是向右enum GAME_STATUS _Status;//游戏状态int _Socre;//游戏当前获得分数int _foodWeight;//默认每个⻝物10分int _SleepTime;//每⾛⼀步休眠时间 }Snake, * pSnake;蛇的方向我们用枚举因为蛇的行进方向只能有一个使用枚举可以减小内存的占用 enum DIRECTION {UP 1,DOWN,LEFT,RIGHT };游戏状态我们也用枚举理由同上状态只能有一个 enum GAME_STATUS {OK,//正常运⾏KILL_BY_WALL,//撞墙KILL_BY_SELF,//咬到⾃⼰END_NOMAL//正常结束 };4、设计游戏流程 当我们把整个框架定好下一步就可以来实现游戏了 下一篇再见~