最近把c++重学了一遍,
然后发现每次我在开发项目的时候每次调用api和头都要一个一个的include,
这就导致我很烦(其实就是懒)
所以我就在空闲时间写了一个头:
名字是head.h(正经名我也懒得取, 对了还有define我没写, 自己加要不然会多次重复编译)
tips:这个版本只适用于mingw, vc版本可以自己试着改(比如把bits/stdc++.h删了看哪里报错填上头就行了) , 这个头目前来说更倾向于控制台小游戏的开发, 不过能用就行
下面是代码:
#include<ctime>
#include<cstdio>
#include<conio.h>
#include<iostream>
#include<algorithm>
#include<windows.h>
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
void SetConsoleWindowSize(SHORT, SHORT);
void color(int );
void clear(SHORT ,SHORT );
void print_waits(string, int);
void SetBackgroundColor(unsigned int, unsigned int);
void print_wait(string , int, bool);
void goto_x_y(ll, ll);
void SetColor(int);
void key_down();
void SetOutputColorAndBackgroundColor(int , int);
void HideCursor();
void SetConsoleWindowSize( SHORT width, SHORT height )
{
HANDLE hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT wrt = { 0, 0, (SHORT)(width-1), (SHORT)(height-1)};
SetConsoleWindowInfo( hStdOutput, TRUE, &wrt ); // 设置窗体尺寸
COORD coord = { width, height };
SetConsoleScreenBufferSize( hStdOutput, coord ); // 设置缓冲尺寸
}
void print_wait(string str, int waitTime, bool end = true){
if(end)
cout << str << endl;
else
cout << str;
Sleep(waitTime);
}
void goto_x_y(ll h, ll l)//移动光标
{
COORD pos = { (SHORT)(l - 1),(SHORT)(h - 1) };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void SetBackgroundColor(unsigned int ForeColor=7,unsigned int BackGroundColor=0) //颜色函数
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);
}
void clear(SHORT x, SHORT y)//覆盖清屏
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void print_waits(string s,int x)
{
int Len = s.length();
for(int i=0;i<Len;i++)
{
cout<<s[i];
Sleep(x);
}
cout<<"\n";
}
void SetColor(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);
/*土黄色or金黄色*/ 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);
}
void key_down()//
{
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
//使用方法如:if(KEY_DOWN(VK_LBUTTON)) //如果鼠标左键按下
/*
常量名 对应按键
————————————————————————
VK_LBUTTON 鼠标左键
VK_RBUTTON 鼠标右键
VK_CANCEL Ctrl+Break
VK_MBUTTON 鼠标中键
VK_BACK Backspace键
VK_TAB Tab 键
VK_RETURN 回车键
VK_SHIFT Shift键
VK_CONTROL Ctrl键
VK_MENU Alt键
VK_PAUSE Pause键
VK_CAPITAL Caps Lock键
VK_ESCAPE Esc键
VK_SPACE 空格键
VK_PRIOR Page Up键
VK_NEXT Page Down键
VK_END End键
VK_HOME Home键
VK_LEFT 左箭头键
VK_UP 上箭头键
VK_RIGHT 右箭头键
VK_DOWN 下箭头键
VK_SNAPSHOT Print Screen键
VK_Insert Insert键
VK_Delete Delete键
'0' – '9' 数字0-9
'A' – 'Z' 字母A - Z
VK_LWIN 左WinKey(104键盘才有)
VK_RWIN 右WinKey(104键盘才有)
VK_APPS AppsKey(104键盘才有)
VK_NUMPAD0 小键盘0键
VK_NUMPAD1 小键盘1键
VK_NUMPAD2 小键盘2键
VK_NUMPAD3 小键盘3键
VK_NUMPAD4 小键盘4键
VK_NUMPAD5 小键盘5键
VK_NUMPAD6 小键盘6键
VK_NUMPAD7 小键盘7键
VK_NUMPAD8 小键盘8键
VK_NUMPAD9 小键盘9键
VK_F1 - VK_F24 功能键F1–F24
VK_NUMLOCK Num Lock键
VK_SCROLL Scroll Lock键
*/
}
void SetOutputColorAndBackgroundColor(int ForgC, int BackC)//SetColorAndBackground函数(颜色函数)
{
WORD wColor=((BackC & 0x0F)<<4)+(ForgC & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
void HideCursor()//隐藏光标
{
CONSOLE_CURSOR_INFO cur={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cur);
}
啧啧啧, 里面包含了一些比较常用的函数, 部分是网上查的, 侵权删.
参考:youxi.h