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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

扫 雷 小 游 戏

發(fā)布時(shí)間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扫 雷 小 游 戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
掃雷游戲的實(shí)現(xiàn)的關(guān)鍵是要?jiǎng)?chuàng)建好兩個(gè)同樣大小二維數(shù)組,一個(gè)用來隨機(jī)生成雷,一個(gè)用來更新游戲界面.在創(chuàng)建游戲過程中應(yīng)注意輸入坐標(biāo)和數(shù)組下標(biāo)之間的關(guān)系。為了增加游戲的樂趣,本游戲?qū)⑹雇婕业谝徊讲粫?huì)踩到雷,并且可以顯示周圍坐標(biāo)雷的個(gè)數(shù),還可以讓玩家是否標(biāo)記出雷的位置,降低了游戲的難度.

將掃雷的代碼分為三部分:頭文件存放game.h (主要用來聲明各種函數(shù),以便調(diào)用) ;源文件分別存放game.c(主要用來存放各種函數(shù)實(shí)現(xiàn)的代碼)以及test.c(主要用來實(shí)現(xiàn)整個(gè)游戲代碼框架)。

game.h代碼:

#ifndef __GAME_H__ #define __GAME_H__ #define ROWS 14 //宏定義行 #define COLS 14 //列 #define sweep 20 void Init_Interface(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols); //初始化掃雷棋盤 void display_board(int board2[ROWS][COLS], int rows, int cols); //打印掃雷棋盤 int play_move(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols); //玩家輸入坐標(biāo)并判斷是否是雷 void pai_lei(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols); //玩家是否排雷 int win(int board2[ROWS][COLS], int rows, int cols); //判斷玩家輸贏 int error_sweep(int board2[ROWS][COLS], int rows, int cols); //判斷玩家掃雷錯(cuò)誤數(shù) int check_sweep(int board2[ROWS][COLS], int rows, int cols); //判斷雷陣是否填滿 void sweep_board(int board1[ROWS][COLS], int rows, int cols); //打印布雷棋盤 #endif //__GAME_H__

game.c代碼:

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include "game.h" #include <string.h> #include <stdlib.h> #include <time.h>void Init_Interface(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols) //初始化掃雷棋盤,以及布雷其中0代表無雷,1代表有雷 {int i = 0;int j = 0;int x = 0;int y = 0;int count = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board1[i][j] = 0;}}for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board2[i][j] = '*';}}srand((unsigned int)time(NULL));while (count != sweep) //產(chǎn)生20個(gè)雷{int x = rand() % 10 + 2;int y = rand() % 10 + 2;if (board1[x][y] == 0){count++;board1[x][y] = 1;}}//初始化雷盤printf(" 1 2 3 4 5 6 7 8 9 10 \n");printf(" _________________________________________\n");for (i = 2; i < rows - 2; i++){if (i > 10){printf("%d | |", i - 1);}else if (i <= 10){printf("%d | |", i - 1);}for (j = 3; j < cols - 2; j++){printf(" |");}printf("\n");printf(" | %c |", board2[i][2]);for (j = 3; j < cols - 2; j++){printf(" %c |", board2[i][j]);}printf("\n");printf(" |___|");for (j = 3; j < cols - 2; j++){printf("___|");}printf("\n");}}void display_board(int board2[ROWS][COLS], int rows, int cols) //打印掃雷棋盤 {int i = 0;int j = 0;printf(" 1 2 3 4 5 6 7 8 9 10 \n");printf(" _________________________________________\n");for (i = 2; i < rows - 2; i++){if (i > 10){printf("%d | |", i - 1);}else if (i <= 10){printf("%d | |", i - 1);}for (j = 3; j < cols - 2; j++){printf(" |");}printf("\n");if ((board2[i][2] == '*') || (board2[i][2] == 'Y') || (board2[i][2] == 'N')){printf(" | %c |", board2[i][2]);}if ((board2[i][2] != '*') && (board2[i][2] != 'Y') && (board2[i][2] != 'N')){printf(" | %d |", board2[i][2]);}for (j = 3; j < cols - 2; j++){if ((board2[i][j] == '*') || (board2[i][j] == 'Y') || (board2[i][j] == 'N'))printf(" %c |", board2[i][j]);if (((board2[i][j] != '*') && (board2[i][j] != 'Y')) && (board2[i][j] != 'N'))printf(" %d |", board2[i][j]);}printf("\n");printf(" |___|");for (j = 3; j < cols - 2; j++){printf("___|");}printf("\n");} }int play_move(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols) //玩家輸入坐標(biāo) {int x = 0;int y = 0;int i = 0;int j = 0;int static first_move = 0; //定義一個(gè)靜態(tài)變量,判斷first_move是不是第一步棋子int count = 0;printf("請(qǐng)輸入坐標(biāo):");while (1){scanf("%d%d", &x, &y);x++;y++;if ((x >= 2) && (x <= rows - 3) && (y >= 2) && (y <= cols - 3)){first_move++;if (1 == first_move){if (board1[x][y] == 1) //第一步是雷,并轉(zhuǎn)移{for (i = 2; i < rows - 2; i++){for (j = 2; j < cols - 2; j++){if (board1[i][j] == 0){board1[i][j] = 1;board1[x][y] = 0;break;}}break;}}//統(tǒng)計(jì)第一步周圍雷的情況count = board1[x - 1][y] + board1[x - 1][y + 1] + board1[x - 1][y - 1]+ board1[x + 1][y] + board1[x + 1][y + 1] + board1[x + 1][y - 1]+ board1[x][y + 1] + board1[x][y - 1];board2[x][y] = count;if (board1[x][y - 1] != 1){count = 0;count = board1[x - 1][y - 1] + board1[x - 1][y] + board1[x - 1][y - 2]+ board1[x + 1][y - 1] + board1[x + 1][y] + board1[x + 1][y - 2]+ board1[x][y] + board1[x][y - 2];board2[x][y - 1] = count;}if (board1[x][y + 1] != 1){count = 0;count = board1[x - 1][y + 1] + board1[x - 1][y + 2] + board1[x - 1][y]+ board1[x + 1][y + 1] + board1[x + 1][y + 2] + board1[x + 1][y]+ board1[x][y + 2] + board1[x][y];board2[x][y + 1] = count;}if (board1[x + 1][y] != 1){count = 0;count = board1[x][y] + board1[x][y + 1] + board1[x][y - 1]+ board1[x + 2][y] + board1[x + 2][y + 1] + board1[x + 2][y - 1]+ board1[x + 1][y + 1] + board1[x + 1][y - 1];board2[x + 1][y] = count;}if (board1[x - 1][y] != 1){count = 0;count = board1[x - 2][y] + board1[x - 2][y + 1] + board1[x - 2][y - 1]+ board1[x][y] + board1[x][y + 1] + board1[x][y - 1]+ board1[x - 1][y + 1] + board1[x - 1][y - 1];board2[x - 1][y] = count;}if (board1[x + 1][y - 1] != 1){count = 0;count = board1[x][y - 1] + board1[x][y] + board1[x][y - 2]+ board1[x + 2][y - 1] + board1[x + 2][y] + board1[x + 2][y - 2]+ board1[x + 1][y] + board1[x + 1][y - 2];board2[x + 1][y - 1] = count;}if (board1[x - 1][y - 1] != 1){count = 0;count = board1[x - 2][y - 1] + board1[x - 2][y] + board1[x - 2][y - 2]+ board1[x][y - 1] + board1[x][y] + board1[x][y - 2]+ board1[x - 1][y] + board1[x - 1][y - 2];board2[x - 1][y - 1] = count;}if (board1[x - 1][y + 1] != 1){count = 0;count = board1[x - 2][y + 1] + board1[x - 2][y + 2] + board1[x - 2][y]+ board1[x][y + 1] + board1[x][y + 2] + board1[x - 2][y]+ board1[x - 1][y + 2] + board1[x - 1][y];board2[x - 1][y + 1] = count;}if (board1[x + 1][y + 1] != 1){count = 0;count = board1[x][y + 1] + board1[x][y + 2] + board1[x][y]+ board1[x + 2][y + 1] + board1[x + 2][y + 2] + board1[x + 2][y]+ board1[x + 1][y + 2] + board1[x + 1][y];board2[x + 1][y + 1] = count;}return -2;}if (board2[x][y] == '*'){board2[x][y] = 1;if (board1[x][y] == board2[x][y]){return -1; //證明踩到雷了}else{int count = 0;count = board1[x - 1][y] + board1[x - 1][y + 1] + board1[x - 1][y - 1]+ board1[x + 1][y] + board1[x + 1][y + 1] + board1[x + 1][y - 1]+ board1[x][y + 1] + board1[x][y - 1];board2[x][y] = count;return count;}}}printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入坐標(biāo):");} }void sweep_board(int board1[ROWS][COLS], int rows, int cols) //打印布好雷的圖 {int i = 0;int j = 0;printf(" 1 2 3 4 5 6 7 8 9 10 \n");printf(" _________________________________________\n");for (i = 2; i < rows - 2; i++){if (i > 10){printf("%d | |", i - 1);}else if (i <= 10){printf("%d | |", i - 1);}for (j = 3; j < cols - 2; j++){printf(" |");}printf("\n");printf(" | %d |", board1[i][2]);for (j = 3; j < cols - 2; j++){printf(" %d |", board1[i][j]);}printf("\n");printf(" |___|");for (j = 3; j < cols - 2; j++){printf("___|");}printf("\n");} }int win(int board2[ROWS][COLS], int rows, int cols) //判斷玩家是否掃雷成功 {int i = 0;int j = 0;int count = 0;for (i = 2; i <= rows - 3; i++){for (j = 2; j <= cols - 3; j++){if (board2[i][j] == 'Y')count++;}}return count; }void pai_lei(int board1[ROWS][COLS], int board2[ROWS][COLS], int rows, int cols) //玩家是否排雷 {int x = 0;int y = 0;printf("請(qǐng)輸入要排雷的坐標(biāo):");while (1){scanf("%d%d", &x, &y);x++;y++;if ((x >= 2) && (x <= rows - 3) && (y >= 2) && (y <= cols - 3)){if ((board1[x][y] == 1) && (board2[x][y] == '*')){board2[x][y] = 'Y';break;}else if ((board1[x][y] == 0) && (board2[x][y] == '*')){board2[x][y] = 'N';break;}}printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入坐標(biāo):");} }int error_sweep(int board2[ROWS][COLS], int rows, int cols) {int i = 0;int j = 0;int count = 0;for (i = 2; i <= rows - 3; i++){for (j = 2; j <= cols - 3; j++){if (board2[i][j] == 'N')count++;}}return count; }int check_sweep(int board2[ROWS][COLS], int rows, int cols) {int i = 0;int j = 0;for (i = 2; i <= rows - 3; i++){for (j = 2; j <= cols - 3; j++){if (board2[i][j] == '*')return 0;}}return 1; }

test.c代碼:

#include <stdio.h> #include "game.h" enum {EXIT, /*枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值,從0開始順序定義為0,1,2…。EXIT的值為0,PLAY的值為1*/PLAY }; void menu() {printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");printf("☆☆☆☆☆ 1.PLAY ☆☆☆☆☆\n");printf("☆☆☆☆☆ 0.EXIT ☆☆☆☆☆\n");printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); } void game() {int ret = 0;int k = 0; //用來判斷玩家是否輸入雷的坐標(biāo)int board1[ROWS][COLS] = { 0 }; //第一張棋盤作為埋好雷的棋盤int board2[ROWS][COLS] = { 0 }; //第二張棋盤作為統(tǒng)計(jì)雷的棋盤Init_Interface(board1, board2, ROWS, COLS); //初始化掃雷棋盤while (1){int ret1 = play_move(board1, board2, ROWS, COLS); //玩家輸入坐標(biāo){if (ret1 == -1){printf("\n踩雷成功,光榮犧牲.\n");sweep_board(board1, ROWS, COLS); //打印布雷棋盤break;}display_board(board2, ROWS, COLS);//排雷過程k = 0;printf("☆☆☆☆☆☆☆☆☆☆☆☆☆\n");printf("☆☆☆ 輸入0: 排雷 ☆☆☆\n");printf("☆☆☆ 輸入1: 不排雷☆☆☆\n");printf("☆☆☆☆☆☆☆☆☆☆☆☆☆\n");printf("請(qǐng)選擇:\n");while (k == 0){scanf("%d", &k);switch (k) //判斷是否需要排雷{case 0:pai_lei(board1, board2, ROWS, COLS);break;case 1:break;default:k = 0;printf("輸入錯(cuò)誤\n");break;}if (k == 0){printf("請(qǐng)選擇是否繼續(xù)排雷:");}}//結(jié)束int ret2 = win(board2, ROWS, COLS);{if (ret2 == sweep) //返回的值為雷的個(gè)數(shù)則成功{printf("恭喜掃雷成功.\n");sweep_board(board1, ROWS, COLS); //打印布雷棋盤break;}else{printf("您已經(jīng)成功的掃出%d顆雷\n", ret2);}}int ret3 = error_sweep(board2, ROWS, COLS); //判斷掃錯(cuò)雷的個(gè)數(shù){printf("您已經(jīng)錯(cuò)誤的掃出%d顆雷\n", ret3);}int ret4 = check_sweep(board2, ROWS, COLS); //檢查雷陣是否填滿if (ret4 == 1){printf("沒能成功找出所有的雷,很遺憾");break;}}display_board(board2, ROWS, COLS);}} int main() {int input = 0;do{menu();printf("請(qǐng)輸入你的選擇:");scanf("%d", &input); //switch (input){case PLAY:game();break;case EXIT:break;default:printf("您的輸入有誤,請(qǐng)重新輸入.\n");break;}} while (input);return 0; }

部分游戲運(yùn)行界面:

總結(jié)

以上是生活随笔為你收集整理的扫 雷 小 游 戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜影院免费视频 | 美女福利视频在线观看 | 亚洲无人区小视频 | 一级黄色大全 | 国产成人三级一区二区在线观看一 | 综合亚洲视频 | 日韩女同强女同hd | 神马午夜场 | 午夜影院在线视频 | 乱xxxxx普通话对白 | 国产免费成人在线视频 | 久久影院视频 | 怡红院成人在线 | 91大奶| 欧美在线中文 | 国产午夜精品一区二区三区欧美 | 日本三级中文字幕在线观看 | 国产视频导航 | 老头老夫妇自拍性tv | 性高潮视频在线观看 | 69免费视频 | 黄色三级三级 | 欧美日韩一二三区 | 视频一区在线播放 | 黄色网络在线观看 | 热逼视频 | 国产crm系统91在线 | 黄色www| 一区二区成人精品 | 女同亚洲精品一区二区三 | 国产午夜精品一区二区理论影院 | 久久久男人的天堂 | 黄色精彩视频 | 国产福利在线免费观看 | 国产精品羞羞答答在线 | 午夜剧场欧美 | 亚洲开心网 | 91免费在线观看网站 | 色综合视频在线观看 | 麻豆乱码国产一区二区三区 | 91丝袜国产在线播放 | 日本久久黄色 | 91高清免费视频 | 九色国产精品 | 色咪咪网站 | 色婷婷中文字幕 | 免费欧美黄色片 | 黄色片成人 | 国产精选中文字幕 | 91插插插插插插插 | 国产又粗又猛又爽又黄视频 | 亚洲伦理在线观看 | 91精品亚洲一区 | 91精品国产综合久久久蜜臀 | 很黄很污的视频网站 | 久久国产黄色片 | 无码精品久久久久久久 | 亚洲爱爱网站 | 人妻精品久久久久中文字幕 | 久久一区二区三区视频 | 91精品国产麻豆国产自产在线 | 超碰在线视屏 | 国产精品久久久久久免费免熟 | 可以免费在线观看的av | 一区二区三区爱爱 | 欧美日韩日本国产 | 69sex久久精品国产麻豆 | 91黄瓜视频 | 高潮av| 色眯眯网 | 欧美一区二区三区久久综合 | 精品人伦一区二区三 | 精品动漫一区二区三区在线观看 | av伊人久久 | 国产又粗又猛又爽又黄又 | 日韩欧美激情 | 日韩特级黄色片 | 99热一区二区三区 | av在线激情 | 国产亚洲精品久久久久久久 | 国产色视频在线 | 中国特级黄色片 | 中文视频在线 | 亚洲高清无码久久久 | 冲田杏梨在线 | 欧美日韩xxx | 蜜桃视频在线网站 | 日韩欧美在线视频免费观看 | 中文字幕乱码人妻二区三区 | 欧美美女网站 | 五月天一区二区 | 国产一区二区精彩视频 | av不卡免费在线 | 亚洲最新在线观看 | 国产欧美一区二区三区鸳鸯浴 | 好吊妞在线 | 老司机精品福利导航 | 中文字幕在线观看不卡 | 最近中文字幕在线中文高清版 |