C語言在螢幕的任意位置輸出字元,開發貪吃蛇遊戲的第一步
阿新 • • 發佈:2022-05-10
初學程式設計的讀者,肯定很想編寫出一個遊戲來秀一下,貪吃蛇就是C語言小遊戲中經典的一個,本教程的目標也是帶著大家做出這款遊戲,你可以猛擊《C語言貪吃蛇遊戲演示和說明》瞭解更多。
編寫遊戲的第一步就是搞定游標定位問題,這樣你的程式就可以隨心所欲、按任意順序、在任意位置輸出了。但是,C語言本身並不支援該功能,我們必須使用 Windows 提供的介面,所以要引入 windows.h 標頭檔案。
因為用到了 Windows 作業系統的功能,所以本節的程式碼不能在 Linux 和 Mac OS 下執行。所謂 Windows 介面,就是 Windows 這個作業系統本身提供的函式,它們都是以C語言的形式呈現的,只要我們引入了 windows.h 標頭檔案,就可以呼叫這些函式,使用 Windows 提供的強大功能了。
因為涉及到了 Windows 程式設計,所以本節的內容不要求大家深入理解,能按照葫蘆畫瓢就可以,以後如果決定專攻 Windows 程式設計了,再來深入研究也不遲。
hConsoleOutput表示控制檯緩衝區控制代碼,可通過GetStdHandle(STD_OUTPUT_HANDLE)來獲得;dwCursorPosition是游標位置,也就是第幾行第幾列,它是 COORD 型別的結構體。
看不懂是吧?嗯,沒關係,我知道大部分讀者都看不懂,所以,照著葫蘆畫瓢吧。
例如,將游標定位到控制檯的第3行第3列:
- //定義游標位置
- COORD coord;
- coord.X = 3; //第3行
- coord.Y = 3; //第3列
- //獲取控制檯緩衝區控制代碼,固定寫法
- HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
- //設定游標位置,固定寫法
- SetConsoleCursorPosition(ConsoleHandle, coord);
這樣,程式就可以從第3行第3列開始輸出了。
將程式碼補充完整:
- int main(){
- //定義游標位置
- COORD coord;
- coord.X = 3; //第3行
- coord.Y = 3; //第3列
- //獲取控制檯緩衝區控制代碼
- HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
- //設定游標位置
- SetConsoleCursorPosition(ConsoleHandle, coord);
- printf("123");
- return 0;
- }
執行結果:
注意:視窗的左上角是第 0 行第 0 列,而不是我們通常所認為的第 1 行第 1 列。程式語言中的很多計數都是從 0 開始的,而不是從 1 開始。
搞定了游標重定位,你就可以將輸出順序打亂了,想在哪裡輸出就在哪裡輸出。例如:
- //設定游標位置
- void setCursorPosition(int x, int y);
- //設定文字顏色
- void setColor(int color);
- int main(){
- setColor(3);
- setCursorPosition(3, 3);
- puts("★");
- setColor(0XC);
- setCursorPosition(1, 1);
- puts("◆");
- setColor(6);
- setCursorPosition(6, 6);
- puts("■");
- return 0;
- }
- //自定義的游標定位函式
- void setCursorPosition(int x, int y){
- COORD coord;
- coord.X = x;
- coord.Y = y;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- }
- //自定義的文字顏色函式
- void setColor(int color){
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color) ;
- }
執行結果:
可以發現,先輸出的字元位置不一定靠前,後輸出的字元位置不一定靠後,它們都可以在任意位置。