【雜文】一些好玩的函數
之前閑得無聊用 \(C++\) 寫了幾個小游戲,在這期間學了一些 \(windows.h\) 里的函數。。。
(以下函數若無特殊說明均需要使用函數庫 <\(windows.h\)> 或者萬能頭 <\(bits\)/\(stdc\)++\(.h\)>)
【 clock ( ) , CLOCKS _ PER _ SEC 】
頭文件: <\(ctime\)>
功能: \(clock()\) 是計算從 \(“\) 開啟這個程序 \(”\) 到 \(“\) 調用\(clock()\) 函數 \(”\) 時之間的 \(CPU\) 時鍾計時單元(\(clock tick\))數,而 \(CLOCKS\) _ \(PER\) _ \(SEC\) 是一個常量,表示一秒鍾內 \(CPU\) 運行的時鍾周期數。換句話說,如果用前者除以后者就可以得到程序運行時間。
(節選自百度百科)
inline void print_time(){
//注意要用double
printf("time:%lf\n",(double)clock()/(double)CLOCKS_PER_SEC);
}
【 system(部分)】
節選自百度百科
頭文件: <\(cstdlib\)>
\((1)\) \(“shutdown”\)
功能: 關機,重啟,注銷,休眠。
說明:
指令/代碼 | 效果/含義 |
---|---|
\(shutdown\) \(-s\) | 關機 |
\(shutdown\) \(-f\) | 強行關閉應用程序 |
\(shutdown\) \(-l\) | 注銷當前用戶 |
\(shutdown\) \(-r\) | 關機並重啟 |
\(shutdown\) \(-s\) \(-t\) 時間 | 設置關機倒計時 |
\(shutdown\) \(-h\) | 休眠 |
我曾在機房內網聊天軟件里發了一張玩貪吃蛇界面的截圖,然后將下面這行代碼偽裝成一個假的貪吃蛇上傳了上去,不明真相的好奇寶寶們紛紛點開了它...然后...我被錘了...
//效果/含義:強制關閉應用程序並在0秒后關機
inline void turn_off(){
system("shutdown -s -f -t 0");
}
\((2)\) \(“pause”\)
功能: 暫停程序並在當前光標處輸出\(“\)按任意鍵以繼續\(”\)
system("pause");
\((3)\) \(“cls”\)
功能: 清空 \(cmd\) 窗口里的內容。
system("cls");
\((4)\) \(“color\) ## \(”\)
功能: 改變窗口內前景,背景顏色。具體由兩個 \(16\) 進制數決定,第一個參數應用於背景,第二個應用於前景。
參數含義:
\(16\) 進制數 | 效果/含義 | \(16\) 進制數 | 效果/含義 |
---|---|---|---|
0 | 黑色 | 8 | 灰色 |
1 | 藍色 | 9 | 淡藍色 |
2 | 綠色 | A | 淡綠色 |
3 | 淺綠色 | B | 淡淺綠色 |
4 | 紅色 | C | 淡紅色 |
5 | 紫色 | D | 淡紫色 |
6 | 黃色 | E | 淡黃色 |
7 | 白色 | F | 亮白色 |
//效果/含義:將窗口設為白色背景黑色字體
system("color 70");
在寫小游戲時,這些都是關鍵\((QAQ)\)
【 SetCursorPos ( x , y ) 】
頭文件: <\(window.h\)>
功能: 將鼠標指針移至指定位置,若移動成功,則返回 \(1\),否則返回 \(0\)。
想象一下,若用一個 \(while(1)\) 配合 \(rand()\) 來隨機移動會是一幅怎樣的情形?可以嘗試一下。
//效果/含義:隨機移動鼠標光標約3秒
srand((int)time(NULL));//關聯時間隨機函數發射 Biu! Biu! Biu!
inline void move_mouse(){
int sec=0;
while(sec<3*200){//定一下時,免得玩得太過停不下來
SetCursorPos(rand()%1024,rand()%768);//電腦一般只有這么多像素點,也可以自己改模數
Sleep(1);
sec++;
}
}
【 GetAsyncKeyState ( key ) 】
頭文件: <\(window.h\)>
功能: 判斷指定虛擬鍵狀態,如果指定鍵被按下,則返回 \(1\),否則返回 \(0\)。
這個就很有意思了,在我寫的小游戲中,用這個來移動小人,物體等等。
//效果/含義:如果按下了“上”這個按鍵,程序暫停2秒並輸出“FBI WARNING!”
if(GetAsyncKeyState(VK_UP)){//獲取虛擬鍵使用情況
printf("FBI WARNING!\n");
Sleep(2000);
}
事實上把代碼中的 \(VK\)_\(UP\) 換成它的對應值 \(38\)也是可行的。
查找按鍵的虛擬鍵碼和對應值
資源: 虛擬鍵碼表
【 SetConsoleCursorPosition 】
頭文件: <\(window.h\)>
功能: 這是一個 \(windows\) \(API\)函數,可以將界面里的光標移至指定位置。注意在 \(cmd\) 窗口里是以左上角定點建立的坐標系,\(x\) 橫向向右遞增,\(y\) 豎向向下遞增。
void gotoxy(int x,int y){
COORD pos;//這里的pos是一個結構體
pos.X=x;//橫坐標
pos.Y=y;//縱坐標
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//移動光標
}
【 cin/cout 加速 】
功能: 眾所周知,\(cin/cout\) 跑得非常慢,肯定很多人都被這玩意兒坑過,實際上它是可以用一行代碼加速的。
原理: 禁止使用輸入輸出緩存。
ios::sync_with_stdio(false);