刚入门c语言,现在在编写一个小游戏,飞机大战,该用什么来控制飞机移动,我只学过c语言,希望大家讲点我听的懂的
1条回答 默认 最新
- 赵4老师 2022-03-01 09:39关注
仅供参考:
#include <conio.h> #include <windows.h> void ConPrintAt(int x, int y, char *CharBuffer, int len) { DWORD count; COORD coord = {x, y}; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hStdOut, coord); WriteConsole(hStdOut, CharBuffer, len, &count, NULL); } void HideTheCursor() { CONSOLE_CURSOR_INFO cciCursor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if(GetConsoleCursorInfo(hStdOut, &cciCursor)) { cciCursor.bVisible = FALSE; SetConsoleCursorInfo(hStdOut, &cciCursor); } } void ShowTheCursor() { CONSOLE_CURSOR_INFO cciCursor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if(GetConsoleCursorInfo(hStdOut, &cciCursor)) { cciCursor.bVisible = TRUE; SetConsoleCursorInfo(hStdOut, &cciCursor); } } void GetWH(int *w,int *h) { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; if (GetConsoleScreenBufferInfo(hStdOut, &csbi)) { *w=csbi.srWindow.Right; *h=csbi.srWindow.Bottom; } else { *w=80; *h=25; } } void ClearConsole() { //Get the handle to the current output buffer... HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); //This is used to reset the carat/cursor to the top left. COORD coord = {0, 0}; //A return value... indicating how many chars were written // not used but we need to capture this since it will be // written anyway (passing NULL causes an access violation). DWORD count; //This is a structure containing all of the console info // it is used here to find the size of the console. CONSOLE_SCREEN_BUFFER_INFO csbi; //Here we will set the current color if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //This fills the buffer with a given character (in this case 32=space). FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count); FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count); //This will set our cursor position for the next print statement. SetConsoleCursorPosition(hStdOut, coord); } } int main() { unsigned short k; int x,y,w,h; char d; SetConsoleOutputCP(437); ClearConsole(); GetWH(&w,&h); x=w/2;y=h/2; HideTheCursor(); ConPrintAt(x,y,"O",1); d='o'; while (1) { Sleep(50); if (kbhit()) { k=getch(); if (27==k) break;//按Esc键退出 if (0==k||0xe0==k) k|=getch()<<8;//非字符键 switch (k) { case 0x48e0:case 0x04800://上 d='u'; if (y>0) { ConPrintAt(x,y," ",1); y--; ConPrintAt(x,y,"O",1); } break; case 0x50e0:case 0x05000://下 d='d'; if (y<h) { ConPrintAt(x,y," ",1); y++; ConPrintAt(x,y,"O",1); } break; case 0x4be0:case 0x04b00://左 d='l'; if (x>0) { ConPrintAt(x,y," ",1); x--; ConPrintAt(x,y,"O",1); } break; case 0x4de0:case 0x04d00://右 d='r'; if (x<w-1) { ConPrintAt(x,y," ",1); x++; ConPrintAt(x,y,"O",1); } break; } // cprintf("%04x pressed.\r\n",k); } else { switch (d) { case 'u': if (y>0) { ConPrintAt(x,y," ",1); y--; ConPrintAt(x,y,"O",1); } break; case 'd': if (y<h) { ConPrintAt(x,y," ",1); y++; ConPrintAt(x,y,"O",1); } break; case 'l': if (x>0) { ConPrintAt(x,y," ",1); x--; ConPrintAt(x,y,"O",1); } break; case 'r': if (x<w-1) { ConPrintAt(x,y," ",1); x++; ConPrintAt(x,y,"O",1); } break; } } } ClearConsole(); ShowTheCursor(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100