C++控制台指令
文章简介
由于许多初学者可能都会想编一个自己的游戏,却由于表现形式不够而困扰,因此有了这篇文章。
警告:system 需谨慎,死机两行泪。
一、光标
1、隐藏光标
void HideCursor(){
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//隐藏光标
2、获取光标位置
作者觉得这个指令不是很常用,备用吧。
函数返回
x ,y 坐标。
void GetMouseCurPoint(int &x,int &y){
POINT mypoint;
GetCursorPos(&mypoint);
x=mypoint.x;y=mypoint.y;
Sleep(100);
}
3、移动光标
参数分别是目标位置的
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);
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);//固定窗口大小
三、键盘
1、键盘宏输入
#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
2、键盘宏检测
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
/*中途若需输入还是用 getch() 好
头文件是 #include<conio.h>*/
四、文件输入输出
1、关于
文件输入输出可用于本地存储玩家相关信息时使用。包括但不限于,如:造数据,生成大量有规律的文件。
相关函数
ifsteam
ifstream in;
in.open("WF.txt");
/*
读入内容 ,用 in>> ;读入
*/
in.close();
ofsteam
ofstream in;
out.open("WF.txt");
/*
输出内容 ,用 out>> ;输出。
类似于 ifstream
*/
out.close();
2、其他
在 open( )
中可以用 char
数组来代替其中字符串(string
不行),并利用 sprintf
从而来完成文件名的快速变化。
例子
比如说要实现一个程序来造 book_X.in
的数据点。
#include <bits/stdc++.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define int long long
using namespace std;
void oso(ofstream &out, int n) {
char cmd[114];//这里要开的足够大
sprintf(cmd, "book_%02d.in", n);
out.open(cmd);
}
signed main() {
srand(time(NULL));
for (int x = 1; x <= 10; x++) {
ofstream out;
oso(out, x);
out<<rand()%10<<'\n';
/*
省略若干输出
*/
out.close();
}
return 0;
}
五、system 系列
1、介绍
system 函数是 C 语言标准库中的一个函数,用于执行系统命令,如打开网址、文件夹、创建文件夹、复制文件、运行程序等。
使用 system 函数可能带来安全风险,应谨慎处理用户输入的命令。
2、system 具体函数
system("pause");
暂停文件处理:显示按任意键继续. . .
。
system("cls");
清除页面上的文本内容。
system("start <url>");
打开网址,<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>");
复制文件,其中两个板块分别为源文件路径和目标文件路径。
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)
#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
using namespace std;
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//隐藏光标
void GetMouseCurPoint(int &x,int &y){
POINT mypoint;
GetCursorPos(&mypoint);
x=mypoint.x;y=mypoint.y;
Sleep(100);
}//获取光标位置
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);
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));
}
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);
//固定窗口大小
}
int main()
{
}
有些是从网上搜集整理而来,侵权紫衫。
有想要补充的请 私信 / 留言。