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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

C语言版扫雷

發(fā)布時(shí)間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言版扫雷 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用C語(yǔ)言實(shí)現(xiàn)掃雷,首先應(yīng)該有基本的思路,創(chuàng)建兩個(gè)相同大小的數(shù)組,一個(gè)用于布雷(初始化為全0,布雷時(shí)將雷置為1),另一個(gè)給用戶展示(初始化為星號(hào),用戶輸入坐標(biāo)后統(tǒng)計(jì)周?chē)椎姆植疾⒋蛴±椎膫€(gè)數(shù))。由于需要統(tǒng)計(jì)每個(gè)坐標(biāo)周?chē)?lèi)的個(gè)數(shù),所以將數(shù)組創(chuàng)建大一圈,以方便統(tǒng)計(jì)。若輸了,打印出雷陣告訴玩家雷的分布。

具體實(shí)現(xiàn):

game.h文件

#ifndef __GAME_H__ #define __GAME_H__#define ROWS 10 #define COLS 10#define MINE_COUNT 30void display(char arr[ROWS + 2][COLS + 2] , int rows, int cols); //打印雷陣數(shù)組 void set_mine(char mine[ROWS + 2][COLS + 2], int rows, int cols); //布雷 void get_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y); //統(tǒng)計(jì)每格雷的個(gè)數(shù) void get_around_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y); //統(tǒng)計(jì)周?chē)椎膫€(gè)數(shù) void first_remove(char mine[ROWS + 2][COLS + 2], int x, int y); //第一個(gè)是雷移走#endif //__GAME_H__game.c文件

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<time.h> #include<stdlib.h> #include "game.h"void display(char arr[ROWS + 2][COLS + 2], int rows, int cols) //打印雷陣數(shù)組 {int i = 0;int j = 0;printf(" ");for (i = 1; i <= rows;i++) //打印數(shù)組行序號(hào){printf("%d ",i);}printf("\n");for (i = 1; i <= rows;i++){ printf("%-3d", i); //打印數(shù)組列序號(hào)for (j = 1; j <= cols; j++){printf("%c ",arr[i][j]);}printf("\n");} } void set_mine(char mine[ROWS + 2][COLS + 2], int rows, int cols) //布雷 {srand((unsigned int)time(NULL));int count = MINE_COUNT;while (count){int x = rand() % 10 + 1;int y = rand() % 10 + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--; }} }void get_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y) //統(tǒng)計(jì)每格雷的個(gè)數(shù) {int count = 0; //統(tǒng)計(jì)雷的個(gè)數(shù)count=((mine[x - 1][y - 1] - '0') +(mine[x - 1][y] - '0')+ (mine[x - 1][y + 1] - '0')+ (mine[x][y + 1] - '0') +(mine[x + 1][y + 1] - '0') +(mine[x + 1][y] - '0') +(mine[x + 1][y - 1] - '0') +(mine[x][y - 1] - '0'));show[x][y] = count + '0'; //數(shù)字+字符變成字符存起來(lái) } void get_around_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y) //統(tǒng)計(jì)周?chē)椎膫€(gè)數(shù) {get_mine_count(mine, show, x, y);if (mine[x-1][y-1] == '0')get_mine_count(mine, show, x-1, y-1);if (mine[x-1][y] == '0')get_mine_count(mine, show, x-1, y);if (mine[x-1][y+1] == '0')get_mine_count(mine, show, x-1, y+1);if (mine[x][y+1] == '0')get_mine_count(mine, show, x, y+1);if (mine[x+1][y+1] == '0')get_mine_count(mine, show, x+1, y+1);if (mine[x+1][y] == '0')get_mine_count(mine, show, x+1, y);if (mine[x+1][y-1] == '0')get_mine_count(mine, show, x+1, y-1);if (mine[x][y-1] == '0')get_mine_count(mine, show, x, y-1);}void first_remove(char mine[ROWS + 2][COLS + 2], int x, int y) //第一個(gè)是雷移走 {if (mine[x][y] == '1'){for (int i = 1; i <= ROWS; i++){for (int j = 1; j <= COLS; j++){if (mine[i][j] == '0'){mine[i][j] = '1';mine[x][y] = '0';break;}}if (mine[x][y] == '0'){break;}}} }
test.c文件

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include "game.h"void main_menu() //主界面 {printf("-------------------\n");printf("| 1.play |\n");printf("| 0.exit |\n");printf("-------------------\n"); }void game() {int win = 0; //點(diǎn)擊的次數(shù)int count = 0; //統(tǒng)計(jì)雷的個(gè)數(shù)int first = 1;char mine[ROWS + 2][COLS + 2] = { 0 }; //埋雷的數(shù)組char show[ROWS + 2][COLS + 2] = { 0 }; //展示的數(shù)組memset(mine, '0', sizeof(char)* (ROWS+2) *(COLS + 2)); //數(shù)組初始化memset(show, '*', sizeof(char)* (ROWS + 2) *(COLS + 2));display(show, ROWS, COLS); //打印展示的雷陣set_mine(mine, ROWS, COLS); //布雷//display(mine, ROWS, COLS); //調(diào)試的時(shí)候可以取消注釋打印出雷的分布 while (win<ROWS*COLS - MINE_COUNT){int x = 0, y = 0;printf("請(qǐng)輸入坐標(biāo):\n");scanf("%d%d",&x,&y);if (first == 1){first_remove(mine, x, y);first++;}if (mine[x][y] == '1'){printf("雷炸了!YOU LOSE !\n");display(mine, ROWS, COLS);break;}else{win++;get_around_mine_count(mine,show, x, y); //統(tǒng)計(jì)周?chē)椎膫€(gè)數(shù)//get_mine_count(mine,show, x, y);// show[x][y] = count + '0'; //數(shù)字+字符變成字符存起來(lái)display(show, ROWS, COLS); }}if (win >= ROWS*COLS - MINE_COUNT){printf("YOU WIN !!!\n");} }enum Option //枚舉 {EXIT,PLAY }; int main() {int x = 0;do{main_menu();printf("輸入1繼續(xù)、0退出:\n");scanf("%d", &x);switch (x){case EXIT:break;case PLAY:game();break;default:printf("選擇錯(cuò)誤,請(qǐng)重輸入:\n");break;}} while (x);return 0; }
運(yùn)行結(jié)果:


總結(jié)

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

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