作者前言
🎂? ? ? ? ??????🍧🍧🍧🍧🍧🍧🍧🎂
? ?🎂 ? ? ?作者介紹:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 🎂🎂
? ? ? ?🎂 🎉🎉🎉🎉🎉🎉🎉? ? ? ? ? ? ? 🎂
? ? ? ? ? 🎂作者id:老秦包你會,? ? ? ? ?🎂
簡單介紹:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
? ? ? ? ? ? ?喜歡學習C語言和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討? ? ? ? ?🎂🎂🎂🎂🎂🎂🎂🎂
? ? ? ? ? ? ? ? ?🎂個人主頁::小小頁面🎂
? ? ? ? ? ? ? ? ? 🎂gitee頁面:秦大大🎂
???????????????????🎂🎂🎂🎂🎂🎂🎂🎂
? ? ? ? 🎂? 一個愛分享的小博主 歡迎小可愛們前來借鑒🎂_______________________________________________________
______________________________________________________________________
目錄
掃雷
????????分析
????????代碼
——————————————————————————————————————
掃雷
?如上圖,玩掃雷的原理就是避開雷找出所有的雷就勝利,廢話不多說,我們直接開始掃雷分析
分析
俗話說的好,玩游戲第一步進入游戲,我們就寫出一個游戲菜單出來,讓玩家選擇
void meun()
{printf("********* 掃雷 ********\n");printf("************************************\n");printf("********* 0.exit ********\n");printf("********* 1.paly ********\n");printf("************************************\n");}
下面我們要寫一個框架,選擇玩或者不玩,
int input;srand((unsigned)time(NULL));do{meun();printf("進入掃雷界面,請選擇>");scanf("%d", &input);switch (input){case 0:printf("退出游戲\n");break;case 1:printf("開始游戲\n");game();break;default :printf("輸入不符合規定,請重新輸入\n");break;}
下面我們就要開始寫掃雷的內容了,首先掃雷我們要給出掃雷的游戲畫面,在這個過程中我們可以創建兩個數組,一個用于計算,一個用于顯示
?左邊是計算,右邊是顯示 然后我們就要設計一下輸出的界面,要玩家有好的體驗
void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}
void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}
然后我們就要布置雷了,雷的設計要隨機可以使用rand(),記得設計出源點srand((unsigned)time(NULL))
代碼如下:
void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}
下面我們就要模擬玩家掃雷了,玩家掃雷要輸入坐標, 然后判斷是否踩到雷或者已經排查過了,如果沒有就要統計周邊雷的個數,然后反饋給顯示數組,最后判斷是否排除完全部雷了,
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("請玩家輸入坐標:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//統計周邊的雷數int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("掃雷情況:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你勝利了\n");goto aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戲結束\n");break;}}else{printf("請重新輸入,你輸入的不符合規定\n");}}
aa:;}
?下面是全部代碼:
掃雷.c
#include"掃雷.h"
void meun()
{printf("********* 掃雷 ********\n");printf("************************************\n");printf("********* 0.exit ********\n");printf("********* 1.paly ********\n");printf("************************************\n");}
int main()
{int input;srand((unsigned)time(NULL));do{meun();printf("進入掃雷界面,請選擇>");scanf("%d", &input);switch (input){case 0:printf("退出游戲\n");break;case 1:printf("開始游戲\n");game();break;default :printf("輸入不符合規定,請重新輸入\n");break;}} while (input);return 0;
}
掃雷函數.c
#include"掃雷.h"
void game()
{char mine[ROWS][COLS];char show_mine[ROWS][COLS];//數組初始化initialization(mine, ROWS, COLS, '0');initialization(show_mine, ROWS, COLS, '*');//布置雷Production(mine, ROW, COL);//雕刻掃雷棋盤Carving(mine, ROW, COL);printf("\n");Carving(show_mine, ROW, COL);//玩家掃雷paly_mine(mine, show_mine, ROW, COL);/*printf("%p", &mine);printf("%p", &show_mine);*/}void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}
//布置雷
void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}//玩家掃雷
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("請玩家輸入坐標:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//統計周邊的雷數int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("掃雷情況:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你勝利了\n");goto aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戲結束\n");break;}}else{printf("請重新輸入,你輸入的不符合規定\n");}}
aa:;}
掃雷.h
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define Count 10
//
void game(void);
//初始化
void initialization(char mine[ROWS][COLS], int row, int col, char str);
//打印棋盤
void Carving(char mine[ROWS][COLS], int row, int col);
//布置雷
void Production(char mine[ROWS][COLS], int row, int col);
//玩家掃雷
vo
總結:
掃雷代碼就在這里了,這個代碼還可以進一步改進,但是由于時間原因,其他功能沒寫,有不懂的小可啊可以私聊我