文章简介
由于许多初学者可能都会想编一个自己的游戏,却由于表现形式不够而困扰,因此有了这篇文章。
警告:system需谨慎,死机两行泪。
一、光标
1、隐藏光标
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//隐藏光标
2、获取光标位置
作者觉得这个指令不是很常用,备用吧。
函数返回 COORD 类型的指针位置,用 .x .y 获取 x y 坐标
void GetMouseCurPoint()
{
POINT mypoint;
for (int i = 0; i < 100; i++)
{
GetCursorPos(&mypoint);//获取鼠标当前所在位置
printf("% ld, % ld \n", mypoint.x, mypoint.y);
Sleep(1000);
}
}
3、移动光标
参数分别是目标位置的 x y 坐标
void MouseMove(int x, int y)//鼠标移动到指定位置
{
double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;//获取屏幕分辨率宽度
double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;//获取屏幕分辨率高度
double fx = x * (65535.0f / fScreenWidth);
double fy = y * (65535.0f / fScreenHeight);
printf("fScreenWidth %lf , fScreenHeight %lf, fx %lf, fy %lf \n", fScreenWidth, fScreenHeight, fx, fy);
INPUT Input = { 0 };
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
SendInput(1, &Input, sizeof(INPUT));
}
} //移动光标
4、检测鼠标
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
if(KEY_DOWN(VK_LBUTTON))//检测左键是否按下
if(KEY_DOWN(VK_RBUTTON))//检测右键是否按下
if(KEY_DOWN(VK_MBUTTON))//检测滚轮是否按下
5、操作鼠标
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模拟鼠标键按下
Sleep(10);//要留给某些应用的反应时间
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模拟鼠标键抬起
二、窗口大小
1、调整大小
作为一个像样的游戏窗口总有一个合适的大小,不可能用控制台默认的奇怪的大小。
参数分别为窗口行列的数量
void setsize(int col, int row)
{
char cmd[64];
sprintf(cmd, "mode con cols=%d lines=%d", col, row);
system(cmd);
}//调整窗口大小
2、固定大小
调完大小,会发现一个问题:有些不听话的玩家会自行调整窗口大小,于是我们就要固定窗口大小,禁止玩家调整。
SetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE, GetWindowLongPtrA(GetConsoleWindow(),GWL_STYLE)& ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);//固定窗口大小
键盘宏输出
#define down(a) keybd_event(a,0,0,0)//按下
#define up(a) keybd_event(a,0,2,0)//弹起
#define press(a) down(a),up(a)//a+b
A-Z 65-90
主键盘0-9 48-57
小键盘0-9 96-105
F1-F12 112 123
Backspace 8
Tab 9
Clear 12
Enter 13
Shift 16
Ctrl 17
Alt 18
Caps Lock 20
Esc 27
Spacebar 32
Page Up 33
Page Down 34
End 35
Home 36
Left 37
Up 38
Right 39
Down 40
Delete 46
Num Lock 144
\* 106
\+ 107
Enter 108
\- 109
. 110
/ 111
键盘宏输入
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
/*中途若需输入还是用 getch() 好
头文件是 #include<conio.h>*/
system 系列
介绍
system函数是C语言标准库中的一个函数,用于执行系统命令,如打开网址、文件夹、创建文件夹、复制文件、运行程序等。
使用system函数可能带来安全风险,应谨慎处理用户输入的命令。
system具体函数
system("pause");
暂停文件处理 显示按任意键继续. . .
。
system("cls");
清除页面上的文本内容。
system("start ");
打开网址,<url>
是要打开的网址。
如
system("start https://www.luogu.com.cn/user/704697");
便是打开本人主页(点点关注呗
system("title 名称");
修改窗口名称。
system("start <folder_path>")
跟上面的<url>
相似,这个指令是打开文件夹的,即替换<folder path>
。
- 文件路径记得加双
\\
,如C:\\Users\\Administrator\\Desktop\\播放器.exe
system("mkdir <folder_path>");
在当前目录新建一个文件夹,<folder path>
同样指目录。
system("copy <source_file_path> <destination_file_path>");
复制文件,其中两个板块分别为源文件路径和目标文件路径。
eg.
system("<program_path>");
运行程序,<program path>
是应用路径,右键.exe
可以获取。
system("shutdown /s /t 0");
让你的电脑关机,不要轻易使用,但可以让别人用。
system("dir");
列出当前目录下的文件和文件夹。
system("date <date_string>");
设置系统时间 data_string 是时间字符串。
火车头
#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//隐藏光标
COORD GetCursorPos()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo);
return bInfo.dwCursorPosition;
}//获取光标位置
void gotoxy(int x, int y)
{
HANDLE hout;
COORD pos;
pos.X = x;
pos.Y = y;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout, pos);
} //移动光标
void setsize(int col, int row)
{
char cmd[64];
sprintf(cmd, "mode con cols=%d lines=%d", col, row);
system(cmd);
}//调整窗口大小
void gu_ch()
{
SetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE, GetWindowLongPtrA(GetConsoleWindow(),GWL_STYLE)& ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);
//固定窗口大小
}
void Color(int a)
{
if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_INTENSITY|BACKGROUND_RED);
if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
}
int main()
{
}