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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

贪吃蛇游戏(二)

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

貪吃蛇游戲(二)

轉自大佬(…)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include<windows.h> //光標設計API #include<time.h> //食物隨機 #include<conio.h> //按鍵監控//音樂 #include<mmsystem.h> #pragma comment(lib,"Winmm.lib")//用戶系統 //定義變量 char reg_name[30] = "", reg_pwd[10] = ""; char on_name[30], on_pwd[10];//宏定義屬性 //窗口屬性 #define SNAKESIZE 100 //蛇的最大節數 #define MAPHEIGHT 40 //地圖高度 #define MAPWIDTH 70 //地圖寬度void gotoxy(int x, int y);//1.輔助函數:光標移動 void drawMap();//2.畫地圖 void keyDown();//3.按鍵操作 void creatFood();//4.食物的產生 int snakeStatus();//5.蛇的狀態:判斷是否結束游戲 void welcometogame();//6.開始界面 void gamecircle();//7.控制游戲 void endgame();//8.游戲結束界面 //9.背景音樂 void bgm1();//音樂1 void bgm2();//音樂2 void bgm3();//音樂3 void regist();//10.用戶注冊系統 void dl();//11.用戶登錄 void HideCursor();//12.隱藏光標//1.輔助函數:光標移動 void gotoxy(int x, int y) {//光標結構體COORD coord;//設置坐標coord.X = x;coord.Y = y;//同步到控制臺/設置控制臺光標位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } //食物結構體 struct {int x;int y; } food; //蛇結構體 struct {int speed; //蛇的速度int len; //蛇的長度//記錄每一節蛇的坐標//一條蛇有多少節int x[SNAKESIZE];int y[SNAKESIZE]; } snake;//全局變量 int i; int key = 72; //初始化移動方向,表示蛇移動的方向,72為按下“↑”所代表的數字 int changeFlag = 0; //蛇變化標記,判斷蛇是否吃掉了食物 int score = 0; //記錄玩家的得分 //2.畫地圖 void drawMap() {//左右邊框for (i = 1; i <= MAPHEIGHT; i++){gotoxy(0, i);printf("■");gotoxy(MAPWIDTH, i);printf("■");}//上下邊框for (i = 0; i <= MAPWIDTH; i += 2){gotoxy(i, 0);printf("■");gotoxy(i, MAPHEIGHT);printf("■");}//食物刷新,畫食物while (1){srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;if (food.x % 2 == 0) break;}//產生新的食物gotoxy(food.x, food.y); //食物的光標printf("●");snake.len = 3; //蛇初始長度snake.speed = 200; //蛇初始速度snake.x[0] = MAPWIDTH / 2 + 1;snake.y[0] = MAPHEIGHT / 2;gotoxy(snake.x[0], snake.y[0]);printf("■");for (i = 1; i < snake.len; i++){snake.x[i] = snake.x[i - 1] + 2;snake.y[i] = snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf("■");}gotoxy(MAPWIDTH - 2, 0);return; } //3.按鍵操作 void keyDown() {//無按鍵操作,緩沖int pre_key = key;if (_kbhit()){//有按鍵接收fflush(stdin);key = _getch();key = _getch();}//擦除if (changeFlag == 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf(" ");}//后面蛇身的結束for (i = snake.len - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];}/**控制臺按鍵所代表的數字*“↑”:72*“↓”:80*“←”:75*“→”:77*///移動方向處理if (pre_key == 72 && key == 80)key = 72;if (pre_key == 80 && key == 72)key = 80;if (pre_key == 75 && key == 77)key = 75;if (pre_key == 77 && key == 75)key = 77;switch (key){case 75:snake.x[0] -= 2;break;case 77:snake.x[0] += 2;break;case 72:snake.y[0]--;break;case 80:snake.y[0]++;break;}gotoxy(snake.x[0], snake.y[0]);printf("■");gotoxy(MAPWIDTH - 2, 0); //移動不能一直看著光標changeFlag = 0;return;} //4.食物的產生 void creatFood() {//蛇把食物吃了if (snake.x[0] == food.x && snake.y[0] == food.y){//產生的食物不能在蛇身上while (1){int flag = 1;srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//產生的食物不能在蛇身上for (i = 0; i < snake.len; i++){if (snake.x[i] == food.x && snake.y[i] == food.y){flag = 0;break;}}if (flag && food.x % 2 == 0)break;}//產生新的食物gotoxy(food.x, food.y);printf("●");snake.len++;score += 10; //每個食物得10分changeFlag = 1; //很重要,因為吃到了食物,就不用再擦除蛇尾的那一節,以此來造成蛇身體增長的效果}return; } //5.蛇的狀態:判斷是否結束游戲 int snakeStatus() {if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)return 0;if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)return 0;//蛇頭不能撞自己for (i = 1; i < snake.len; i++){if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])return 0;}return 1; } //6.開始界面 void welcometogame() {gotoxy(45, 12);printf("歡迎來到貪吃蛇游戲\n");gotoxy(45, 25);system("pause");system("cls");gotoxy(30, 12);printf("請用↑ ↓ ← → 分別控制蛇的移動\n");gotoxy(30, 13);system("pause");system("cls"); } //7.控制游戲 void gamecircle()//控制游戲 {gotoxy(90, 7);printf("蛇吃得越長,游戲結束后的得分越高。");gotoxy(90, 20);printf("游戲小提示:");gotoxy(90, 22);printf("1.蛇不能穿墻,也不能咬到自己哦。");gotoxy(90, 23);printf("2.如果撞墻或者咬到自己游戲會失敗哦。");gotoxy(90, 24);printf("3.請用↑ ↓ ← → 分別控制蛇的移動。");/*gotoxy(64,18)printf("F1 為加速,F2 為減速\n");*/gotoxy(90, 25);printf("4.鼠標點擊暫停游戲。"); } //8.游戲結束界面 void endgame()//游戲結束 {system("cls");system("color 8E");gotoxy(4, 2);printf("玩家需要多加練習才能得到更高的分數啊,加油哦!!!\n");gotoxy(18, 7);printf("游戲結束。");gotoxy(17, 8);printf("Game Over!!!");gotoxy(14, 10);printf("本次游戲的得分為: %d", score);exit(0); }//9.BGM //9.1 void bgm1() {//播放音樂PlaySound(TEXT("sounds\\bgm.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); } //9.2 void bgm2() {//播放音樂PlaySound(TEXT("sounds\\b我是小綠.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); }//9.3 void bgm3() {//播放音樂PlaySound(TEXT("sounds\\a賽車.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); }//10.用戶注冊系統 void regist() {//清屏system("pause");system("cls");printf("\n\n\t\t\t歡迎使用注冊系統\n\n");while (1){//輸入用戶名printf("\t\t請輸入用戶名[不能大于10個字符]:");scanf("%s", reg_name);//判斷用戶名if (strlen(reg_name) <= 10){while (1){//輸入密碼printf("\n\t\t請輸入密碼[密碼長度為八位]:");scanf("%s", reg_pwd);//判斷密碼if (strlen(reg_pwd) == 8){printf("\n\n\t\t注冊成功,您的用戶名是%s,密碼是%s\n\n", reg_name, reg_pwd);break;}else{printf("\n\t\t密碼的長度為%d,請重新輸入\n", strlen(reg_pwd));}}break;}else{printf("\n\t\t用戶名的長度為%d,請重新輸入\n\n", strlen(reg_name));}} }//判斷是否注冊 int judge() {if (strcmp(reg_name, "") == 0 && strcmp(reg_pwd, "") == 0){printf("\n\n\t\t您尚未注冊,請先注冊!\n\n");return 0;}else{return 1;} }//11.用戶登錄 void dl() {int i;system("pause");system("cls");printf("\n\n\t\t\t歡迎登錄系統\n\n");//三次登錄驗證for (i = 1; i <= 3; i++){printf("\t\t請輸入用戶名:");scanf("%s", on_name);printf("\n\t\t請輸入密 碼:");scanf("%s", on_pwd);if (strcmp(reg_name, on_name) == 0 && strcmp(reg_pwd, on_pwd) == 0){printf("\n\n\t\t登錄成功,祝您游戲愉快\n\n");break;}else{printf("\n\n\t\t登錄失敗,請重新登錄,您還有%d次機會\n\n", 3 - i);}}}//12隱藏光標 void HideCursor() //隱藏光標,防止干擾視線 {CONSOLE_CURSOR_INFO cursor;cursor.bVisible = FALSE;cursor.dwSize = sizeof(cursor);HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(handle, &cursor); }int main() {SetConsoleTitle("貪吃蛇小游戲"); //編譯控制欄信息HideCursor();//隱藏光標//用戶系統system("color 70");bgm2();//定義變量int id;while (1){HideCursor();//隱藏光標system("pause");system("cls");//輸出界面printf("\n\n\t\t\t用戶管理系統\n\n");printf("\t\t\t1:注冊賬號\n");printf("\t\t\t2:登錄賬號\n");printf("\t\t\t0:退出游戲\n\n");//輸入功能編號printf("\t\t請選擇功能編號:");scanf("%d", &id);//判斷switch (id){case 1:regist(); break;case 2:if (judge() == 1){dl();goto skip;}break;case 0:exit(1); break;default:printf("\n\t\t您輸入的功能編號有誤,請重新輸入!\n");}}//貪吃蛇游戲 skip:;system("pause");system("cls");system("color 70");bgm3();welcometogame();gamecircle();drawMap();while (1){HideCursor();//隱藏光標keyDown();if (!snakeStatus()) break;creatFood();Sleep(snake.speed);}endgame();Sleep(5000);return 0; }

總結

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

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