【C语言项目】贪吃蛇游戏(上)
00. 目錄
文章目錄
- 00. 目錄
- 01. 開發背景
- 02. 功能介紹
- 03. 歡迎界面設計
- 3.1 常用終端控制函數
- 3.2 設置文本顏色函數
- 3.3 設置光標位置函數
- 3.4 繪制字符畫(蛇)
- 3.5 歡迎界面函數
- 04. 游戲幫助界面設計
- 05. 退出游戲實現
- 06. 附錄
01. 開發背景
? 貪吃蛇起源于西方,來自于蛇騙夏娃和亞當偷吃禁果的神話。人們為了說明蛇的一個“貪”字,開發出了貪吃蛇游戲。本公開課使用C語言開發一個貪吃蛇游戲。
? 貪吃蛇最初為人們所知的是諾基亞手機附帶的一個小游戲,它伴隨著諾基亞手機走向世界。現在的貪吃蛇出現了許多衍生版本,并被移植到各種平臺上。
通過本案例的學習,大家可以學到:
-
Visual Studio 2017開發環境
-
C語言中的三大結構和函數
-
C語言中動態內存申請和釋放
-
C語言中文件基本操作
-
C語言中的簡單單向鏈表
-
控制終端基本設置和監聽按鍵
-
C語言簡單游戲開發流程
-
C語言簡單游戲開發調試技巧
02. 功能介紹
? 貪吃蛇的游戲規則也很簡單,具體為:蛇出現在封閉的空間中,同時在地圖上會隨機出現食物,玩家通過鍵盤上的上下左右方向鍵來控制蛇的前進方向。蛇頭撞到食物,則食物消失,表示被蛇吃掉了,蛇身增加一節,增加玩家的得分。接著又隨機出現一個食物,等待蛇來吃。如果蛇在前進的過程中撞到墻或者咬到蛇身或者玩家按下ESC鍵,則游戲退出。
項目演示
03. 歡迎界面設計
歡迎界面如下
3.1 常用終端控制函數
SetConsoleTextAttribute函數介紹
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput,WORD wAttributes); 功能:設置控制臺文本屬性(顏色),可以設置前景色FOREGROUND(文本顏色)和背景色BACKGROUNDSetConsoleTextAttribute官方文檔介紹
參考示例:
HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE); /* 獲取標注輸出句柄 */ SetConsoleTextAttribute(hOut, FOREGROUND_BLUE); /* 設置控制臺顏色,前景色為藍色*/ SetConsoleTextAttribute(hOut, BACKGROUND_RED); /* 背景色為紅色 */SetConsoleCursorPosition函數介紹
BOOL SetConsoleCursorPosition(HANDLE hConsoleOutput, COORD dwCursorPosition); 功能:設置控制臺光標坐標SetConsoleCursorPosition官方文檔介紹
參考示例:
COORD pos = {x, y};/* x是橫坐標 y是縱坐標 */ HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE); /* 獲取標注輸出句柄 */ SetConsoleCursorPosition(hOut,pos); /* 設置控制臺光標坐標(設備句柄, 光標坐標) */3.2 設置文本顏色函數
//設置終端字體顏色 int setColor(int c) {//GetStdHandle: 獲取指定的標準設備的句柄//STD_OUTPUT_HANDLE 標準輸出句柄//c 顏色值SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0; }十進制顏色對照表
3.3 設置光標位置函數
//設置光標的坐標 int gotoXY(int x, int y) {COORD c;//設置橫坐標c.X = x;//設置縱坐標c.Y = y;//設置光標的位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0; }3.4 繪制字符畫(蛇)
參考代碼:
//繪制字符畫 --蛇 int printSnake(void) {//清屏system("cls");gotoXY(35, 1);setColor(6);printf("/^\\/^\\"); //蛇眼睛gotoXY(34, 2);printf("|__| O|"); //蛇眼睛gotoXY(33, 2);setColor(2);printf("_");gotoXY(25, 3);setColor(12);printf("\\/"); //蛇信gotoXY(31, 3);setColor(2);printf("/");gotoXY(37, 3);setColor(6);printf(" \\_/"); //蛇眼睛gotoXY(41, 3);setColor(10);printf(" \\");gotoXY(26, 4);setColor(12);printf("\\____"); //舌頭gotoXY(32, 4);printf("_________/");gotoXY(31, 4);setColor(2);printf("|");gotoXY(43, 4);setColor(10);printf("\\");gotoXY(32, 5);setColor(2);printf("\\_______"); //蛇嘴gotoXY(44, 5);setColor(10);printf("\\");gotoXY(39, 6);printf("| | \\"); //下面都是畫蛇身gotoXY(38, 7);printf("/ / \\");gotoXY(37, 8);printf("/ / \\ \\");gotoXY(35, 9);printf("/ / \\ \\");gotoXY(34, 10);printf("/ / \\ \\");gotoXY(33, 11);printf("/ / _----_ \\ \\");gotoXY(32, 12);printf("/ / _-~ ~-_ | |");gotoXY(31, 13);printf("( ( _-~ _--_ ~-_ _/ |");gotoXY(32, 14);printf("\\ ~-____-~ _-~ ~-_ ~-_-~ /");gotoXY(33, 15);printf("~-_ _-~ ~-_ _-~");gotoXY(35, 16);printf("~--______-~ ~-___-~");return 0; }測試代碼如下:
int main() {//設置控制臺的寬高system("mode con cols=100 lines=30");printSnake();system("pause");return 0; }測試效果如下:
3.5 歡迎界面函數
界面設計分析
參考代碼:
//歡迎界面 int welcomGame(void) {int i;int j;int n = 0;//繪制字符畫蛇printSnake();//輸出文字setColor(11);gotoXY(45, 18);printf("貪吃蛇游戲");setColor(14);//邊框范圍20--26行 27--74列for (i = 20; i <= 26; i++){for (j = 27; j <= 74; j++){gotoXY(j, i);if (i == 20 || i == 26){printf("-");}else if (j == 27 || j == 74){printf("|");}}}setColor(12);gotoXY(35, 22);printf("1. 開始游戲");gotoXY(55, 22);printf("2. 游戲說明");gotoXY(35, 24);printf("3. 退出游戲");gotoXY(27, 27);printf("請選擇[1 2 3]: ");scanf("%d", &n);//清空換行符getchar();return n; }主函數參考代碼如下:
int main() {int choice;//設置控制臺的寬高system("mode con cols=100 lines=30");while (1){choice = welcomGame();switch (choice){//開始游戲case 1:printf("開始游戲");break;//游戲說明case 2:printf("游戲說明");break;//退出游戲case 3:break;default:setColor(12);gotoXY(45, 28);printf("請做出有效選擇[1~3]");//輸入任意鍵getchar();}}system("pause");return 0; }04. 游戲幫助界面設計
游戲說明模塊如下:
游戲幫助界面參考代碼
//游戲幫助界面 int aboutGame(void) {int i = 0;int j = 0;//清屏system("cls");setColor(13);gotoXY(44, 3);printf("游戲說明");setColor(2);//畫出邊框//6~22行 20~75列for (i = 6; i <= 22; i++){for (j = 20; j <= 75; j++){gotoXY(j, i);//畫上下邊框if (i == 6 || i == 22){printf("=");}else if (j == 20 || j == 75){printf("||");}}}setColor(3);gotoXY(30, 8);printf("★ 1.不能撞到墻壁,不能咬到自己");setColor(5);gotoXY(30, 11);printf("★ 2.F1加速前進,F2減速前進");setColor(11);gotoXY(30, 14);printf("★ 3.使用空格暫停游戲和繼續游戲");setColor(13);gotoXY(30, 17);printf("★ 4.使用方向鍵控制前進的方向");setColor(14);gotoXY(30, 20);printf("★ 5.按下ESC鍵退出游戲");setColor(12);gotoXY(22, 24);printf("按下回車鍵返回主界面...");getchar();return 0; }主函數代碼修改如下:
int main() {int choice;//設置控制臺的寬高system("mode con cols=100 lines=30");while (1){choice = welcomGame();switch (choice){//開始游戲case 1:printf("開始游戲");break;//游戲說明case 2:aboutGame();break;//退出游戲case 3:break;default:setColor(12);gotoXY(45, 28);printf("請做出有效選擇[1~3]");//輸入任意鍵getchar();}}system("pause");return 0; }05. 退出游戲實現
在主菜單中, 當用戶選擇3的時候,直接退出游戲
在主函數case 3中添加如下代碼:
//退出游戲 case 3:exit(0);break;06. 附錄
下一篇:【C語言項目】貪吃蛇游戲(下)
大學生C/C++開發QQ交流群
總結
以上是生活随笔為你收集整理的【C语言项目】贪吃蛇游戏(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法之美01-开篇词
- 下一篇: 【C语言项目】贪吃蛇游戏(下)