最近用c++写游戏,觉得很多功能都要写函数,特别麻烦,所以我就写了一个方便做游戏的头文件:gamesio.h
上代码!
代码
#include<iostream>
#include<windows.h>
#include<ctime>
#include<cstdlib>
#include<cstdio>
#ifndef KEY
#define up VK_UP
#define down VK_DOWN
#define left VK_LEFT
#define right VK_RIGHT
#define esc VK_ESCAPE
#define mouse_l VK_LBUTTON
#define mouse_r VK_RBUTTON
#define mouse_m VK_MBUTTON
#define back VK_BACK
#define tab VK_TAB
#define alt VK_MENU
#define space VK_SPACE
#define return_ VK_RETURN
#define shift VK_SHIFT
#endif
/*
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键
*/
#ifndef COLORS
#define black 0
#define blue 1
#define green 2
#define fade_green 3
#define red 4
#define purple 5
#define yellow 6
#define white 7
#define grey 8
#define light_blue 9
#define light_green 10
#define light_fade_green 11
#define light_red 12
#define light_purple 13
#define light_yellow 14
#define bright_white 15
#endif
//0 = 黑色 8 = 灰色
//1 = 蓝色 9 = 淡蓝色
//2 = 绿色 10 = 淡绿色
//3 = 浅绿色 11 = 淡浅绿色
//4 = 红色 12 = 淡红色
//5 = 紫色 13 = 淡紫色
//6 = 黄色 14 = 淡黄色
//7 = 白色 15 = 亮白色
using namespace std;
namespace gio{
bool Key(int i){
return GetAsyncKeyState(i)&0x8000;
}
void initrand(){
srand(time(0));
}
int Rand(int from_,int to_){
if(from_>1) return rand()%(to_-from_)+from_;
return rand()%to_+from_;
}
void windows_size(int width,int hight){
char cmd[1024];
sprintf(cmd,"mode con cols=%d lines=%d",width,hight);
system(cmd);
}
void cls(){
system("cls");
}
void go(int col,int line){
COORD p;
p.X=col;
p.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p);
}
void hide(){//隐藏光标,可加可不加
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void windows_tle(char title[]){
char cmd[1024];
sprintf(cmd,"title %s",title);
system(cmd);
}
void color(int in_from_of,int beind) {
WORD wColor = ((beind & 0x0F) << 4) + (in_from_of & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
void print(string say,int sleeptime){
int Len=say.length();
for(int i=0;i<Len;i++){
cout<<say[i];
Sleep(sleeptime);
}
}
}
函数讲解
把GetAsyncKeyState(i)&0x8000压缩成了Key(i)
随机化,srand(time(0))变成initrand()
随机,把rand()%m+n压缩成Rand(n,m+1)
控制台尺寸,把system("mode con cols=n lines=m")改为windows_size(n,m)
清空控制台,吧system("cls")改为cls
非常好用的函数:go(n,m)把光标移到m行n列处,配合printf()可以覆盖字符
隐藏光标,挺好用的函数hide()
控制台标题,把system("title (string)")改为windows_tle((string))
改变打印颜色把SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), m)压缩为color(m)=>m可以使用 gamesio.h的宏定义(69~84行)
一个可以提升游戏质量的函数(人话:让你的游戏看起来更高级)print(string,sleeptime),会一个一个字地打印内容,每打印一个字,停顿sleeptime毫秒