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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言版扫雷

發布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言版扫雷 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用C語言實現掃雷,首先應該有基本的思路,創建兩個相同大小的數組,一個用于布雷(初始化為全0,布雷時將雷置為1),另一個給用戶展示(初始化為星號,用戶輸入坐標后統計周圍雷的分布并打印雷的個數)。由于需要統計每個坐標周圍類的個數,所以將數組創建大一圈,以方便統計。若輸了,打印出雷陣告訴玩家雷的分布。

具體實現:

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); //打印雷陣數組 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); //統計每格雷的個數 void get_around_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y); //統計周圍雷的個數 void first_remove(char mine[ROWS + 2][COLS + 2], int x, int y); //第一個是雷移走#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) //打印雷陣數組 {int i = 0;int j = 0;printf(" ");for (i = 1; i <= rows;i++) //打印數組行序號{printf("%d ",i);}printf("\n");for (i = 1; i <= rows;i++){ printf("%-3d", i); //打印數組列序號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) //統計每格雷的個數 {int count = 0; //統計雷的個數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'; //數字+字符變成字符存起來 } void get_around_mine_count(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2], int x, int y) //統計周圍雷的個數 {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) //第一個是雷移走 {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; //點擊的次數int count = 0; //統計雷的個數int first = 1;char mine[ROWS + 2][COLS + 2] = { 0 }; //埋雷的數組char show[ROWS + 2][COLS + 2] = { 0 }; //展示的數組memset(mine, '0', sizeof(char)* (ROWS+2) *(COLS + 2)); //數組初始化memset(show, '*', sizeof(char)* (ROWS + 2) *(COLS + 2));display(show, ROWS, COLS); //打印展示的雷陣set_mine(mine, ROWS, COLS); //布雷//display(mine, ROWS, COLS); //調試的時候可以取消注釋打印出雷的分布 while (win<ROWS*COLS - MINE_COUNT){int x = 0, y = 0;printf("請輸入坐標:\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); //統計周圍雷的個數//get_mine_count(mine,show, x, y);// show[x][y] = count + '0'; //數字+字符變成字符存起來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繼續、0退出:\n");scanf("%d", &x);switch (x){case EXIT:break;case PLAY:game();break;default:printf("選擇錯誤,請重輸入:\n");break;}} while (x);return 0; }
運行結果:


總結

以上是生活随笔為你收集整理的C语言版扫雷的全部內容,希望文章能夠幫你解決所遇到的問題。

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