【雜文】一些好玩的函數


【雜文】一些好玩的函數


之前閑得無聊用 \(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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM