刚入门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 微信小程序协议怎么写
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看