今天我們來用c語言實現另乙個眾所周知的小遊戲——掃雷;
首先,與五子棋不同的是,為了不讓雷被玩家直接看到,我們需要建立兩個棋盤。乙個用於儲存雷,我們將其命名為mine盤,乙個能直觀的展現給玩家,我們將其命名為show盤;
其次,為了算清玩家選擇的座標周圍有多少雷,我們無可避免的要訪問mine盤對應座標周圍一圈的類容。此時就出現問題了,最外圍一圈的雷周圍的類容是隨機值,會影響判斷雷數,所以建立時我們必須建立大一圈的mine盤,對應show盤也要大一圈,即建立的二維陣列兩個下標均加一;
為了提公升遊戲體驗,在原遊戲的基礎上新增兩個函式:
1:當玩家選中的座標周圍沒有雷時,自動向周圍八個座標拓展;
2:首輪排雷保護,即在首輪踩到雷就將雷移走,確保首輪不被炸死;
**實現:
依舊將遊戲外圍的框架做好,使得玩家能重複玩掃雷
#define _crt_secure_no_warnings 1
#include "game.h"//呼叫自己定義的game庫
void menu()
//主函式
int main()
} while(input);
return 0;
}
void game()
; char show[rows][cols] = ;
int time1 = (int)time(null);
int time2 = 0;
init_arr(mine,rows,cols,' ');
init_arr(show,rows,cols,' ');
set_mine(mine,row,col,easy_mode);
print_arr(show,row,col);
first_round(mine,show,row,col);
while(1)
else if('l' == w)
}time2 = (int)time(null);
printf("用時為%ds\n",time2-time1);
}
將遊戲中所有需要的函式整理到自定義的game庫中;
#ifndef __game_h__
#define __game_h__
#define rows row+2
#define cols col+2
#define row 9
#define col 9
#define easy_mode 10
#include #include #include #include #include void game();
//初始化棋盤
void init_arr(char arr[rows][cols],int row,int col,char n);
//列印棋盤
void print_arr(char arr[rows][cols],int row,int col);
//設定雷
void set_mine(char arr[rows][cols],int row,int col,int n);
//玩家掃雷
void sweep_mine(char mine[rows][cols],char show[rows][cols],int row,int col);
//計算座標周圍雷的數量
int num_mine(char arr[rows][cols],int x,int y);
//座標雷數為0時拓展周圍
void expand(char show[rows][cols],char mine[rows][cols],int row,int col, int x,int y);
//電腦進行掃雷操作
void com_sweep(char mine[rows][cols],char show[rows][cols],int x,int y);
//判斷勝負
char is_win(char show[rows][cols],int row,int col);
//返回主選單
void re_menu();
//首輪保護
void first_round(char mine[rows][cols],char show[rows][cols],int row,int col);
#endif //__game_h__
最後,定義以上函式
void init_arr(char arr[rows][cols],int row,int col,char n)
void print_arr(char arr[rows][cols],int row,int col)
printf("\n");
for(i=0; i0) }
}int num_mine(char arr[rows][cols],int x,int y)
} return n;
}void expand(char show[rows][cols],char mine[rows][cols],int row,int col, int x,int y) }}
void com_sweep(char mine[rows][cols],char show[rows][cols],int x,int y)
}void sweep_mine(char mine[rows][cols],char show[rows][cols],int row,int col)
else
}else
printf("輸入的座標已經掃瞄過,請重新輸入!\n");
} else
printf("輸入的座標有誤,請重新輸入!\n"); }}
char is_win(char show[rows][cols],int row,int col)
} if(easy_mode == num_void)
return 'w';
else
return ' ';
}void re_menu()
void first_round(char mine[rows][cols],char show[rows][cols],int row,int col)
}mine[x][y] = ' ';
}com_sweep(mine,show,x,y);
break;
} else
printf("輸入的座標有誤,請重新輸入!\n");
}}
C語言實現掃雷遊戲
game.h define crt secure no warnings 1 include include include include define sum 10 define row 11 define col 11 void print void init char mine row co...
掃雷遊戲 C語言實現
1.使用兩個二維陣列表示地圖 a show map char 表示翻開 數字 和未翻開 的狀態 b mine map char 表示地雷 1 和不是地雷 0 的狀態 2.對陣列進行初始化 3.列印地圖 show map 4.提示玩家輸入乙個座標表示要翻開乙個位置 5.判定是否踩雷 6.如果未踩雷,判...
C語言實現掃雷遊戲
思路 使用兩個二維陣列分別存放布置好的雷和排查出來的雷 初始化棋盤並展示棋盤 開始不展示雷的位置 隨機找座標布置雷 輸入座標排查雷 若輸入的座標是雷,則被炸死 若輸入的座標不是雷,則統計周圍有幾個雷 test.c define crt secure no warnings 1 include gam...