日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简易贪吃蛇游戏

發布時間:2024/4/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简易贪吃蛇游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡易貪吃蛇游戲

#include <stdio.h> #include <stdlib.h> #include <time.h> #include<windows.h> #include <conio.h>宏定義// #define MAPWIDTH 60 #define MAPHEIGHT 30 #define SNAKESIZE 100 ///數據設計/ struct {int x;int y; //食物坐標 }food;struct {int x[SNAKESIZE]; //蛇的節數和坐標int y[SNAKESIZE];int length; //蛇的長度int speed; //蛇的速度 }snake; /全局變量// int changeflag = 0; //蛇的增長標志. char key = 's'; //初始化蛇向下運動/模塊化設計/ //1. 畫地圖 void DrawMap(); //2. 產生食物 void CreateFood(); //3. 按鍵操作 void KeyDown(); //4. 蛇的狀態:判斷是否結束游戲 int SnakeStatus(); //5. 輔助函數: 光標移動 void gotoxy(int x, int y);int main(void) {DrawMap();while (1){CreateFood();gotoxy(MAPWIDTH + 2, MAPHEIGHT / 2);printf("score: %d", snake.length - 3);Sleep(snake.speed); //sleep函數,執行掛起一段時間KeyDown();if (!SnakeStatus())break;}gotoxy(MAPWIDTH / 2 - 10, MAPHEIGHT / 2);printf("Game Over!");system("pause");return 0; }1. 畫地圖/ // #: 食物 @: 蛇頭, 邊框 *:蛇身 void DrawMap() {//游戲聲明gotoxy(MAPWIDTH + 2, MAPHEIGHT / 2 - 3);printf("Tab 'a','d','s','w' to move.");srand((unsigned int)time(NULL)); //根據時間變化的種子//1. 圈地//1.1打印豎邊框for (int i = 0; i <= MAPHEIGHT; i++){gotoxy(0, i); //物理坐標系printf("█");gotoxy(MAPWIDTH, i);printf("█");}//1.2打印橫邊框for (int i = 0; i <= MAPWIDTH; i += 2) // █占用兩個字符.{gotoxy(i, 0);printf("█");gotoxy(i, MAPHEIGHT);printf("█");}//2. 畫蛇//2.1確定蛇的長度,速度snake.length = 3;snake.speed = 300;//2.2確定蛇頭的坐標(地圖中央)snake.x[0] = MAPWIDTH / 2;snake.y[0] = MAPHEIGHT / 2;//2.3畫蛇頭gotoxy(snake.x[0], snake.y[0]);printf("@");//2.3畫剩下身體for (int i = 1; i < snake.length; i++){snake.x[i] = snake.x[i - 1] + 1;snake.y[i] = snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf("*");}//3. 畫食物//3.1 產生食物坐標food.x = rand() % (MAPWIDTH - 4) + 2; //隨機坐標.[2-57] food.y = rand() % (MAPHEIGHT - 2) + 1; //隨機范圍在地圖長和寬內, 且平移至地圖內[1 28]//3.2 打印食物gotoxy(food.x, food.y);printf("#"); } //2. 產生食物 void CreateFood() {//蛇吃食物----蛇頭和食物坐標重合if (snake.x[0] == food.x && snake.y[0] == food.y){//產生新食物滿足條件:(1)食物不在蛇身上, (2)橫坐標為偶數(因為蛇身一格占兩字符)srand((unsigned int)time(NULL));while (1){int flag = 1;food.x = rand() % (MAPWIDTH - 4) + 2; //[2 - 57]food.y = rand() % (MAPHEIGHT - 2) + 1; //[1 28]for (int k = 0; k < snake.length; k++){if (snake.x[k] == food.x && snake.y[k] == food.y) {flag = 0;break; //flag--判斷食物位置是否正確的標志}}if (flag== 1) {break;}}gotoxy(food.x, food.y);printf("#");snake.length++;snake.speed -= 10;changeflag = 1;}//產生新食物 } //3. 按鍵操作/// void KeyDown() {char temp;//1.接收按鍵if (_kbhit()) //keyboard hit 檢查是否有按鍵;{fflush(stdin); //清除緩存區key = _getch();}//無按鍵處理,蛇自由移動/**蛇移動時候先擦去蛇尾的一節*changeFlag為0表明此時沒有吃到食物,因此每走一步就要擦除掉蛇尾,以此營造一個移動的效果*為1表明吃到了食物,就不需要擦除蛇尾,以此營造一個蛇身增長的效果*/if (!changeflag){//擦除最后一節蛇身gotoxy(snake.x[snake.length - 1], snake.y[snake.length - 1]);printf(" ");}//后面蛇身的移動for (int i = snake.length - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];//將蛇身變為'*'gotoxy(snake.x[i], snake.y[i]);printf("*");}//2.有按鍵switch (key){case 'w':snake.y[0]--;break;case 's':snake.y[0]++;break;case 'a':snake.x[0] = snake.x[0] - 1; //一個@占1個字符break;case 'd':snake.x[0] = snake.x[0] + 1;break;default:break;}gotoxy(snake.x[0], snake.y[0]);printf("@"); //打印出蛇頭(前進)changeflag = 0;//打印完蛇身后將光標移到屏幕最上方,避免光標在蛇身處一直閃爍gotoxy(MAPWIDTH + 2, 0); } //4. 蛇的狀態:判斷是否結束游戲 int SnakeStatus() {//撞墻判斷if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH - 1 || snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)//?????????????????return 0;//判斷撞自己for (int i = 1; i < snake.length; i++){if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i])return 0;}return 1; //記得返回1. } //5. 輔助函數: 光標移動 void gotoxy(int x, int y) {//調用API去設置控制臺的光標位置(以打印東西)//1. 找到控制臺的窗口HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//2. 光標結構體COORD coord;//3. 設置光標的坐標coord.X = x;coord.Y = y;//4. 同步到控制臺 set console cursor positionSetConsoleCursorPosition(handle, coord); } 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的简易贪吃蛇游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。