实现“扫雷游戏”:设置一个12*12的格子,由计算机布下随机位置的雷,用户排雷,当用户找出所有雷的位置即为获胜。
一:设置游戏入口,用户选择是否玩游戏;
二:由计算机随机产生规定个数的“雷”的位置;
三:由用户手动输入坐标进行游戏;
四:显示用户排雷的过程。
1:用户选择’1‘:进入游戏,选择’0‘退出游戏。作为进入游戏的条件。
void ShowUI(){
printf("********************************\n");
printf("******1.play 0.exit ******\n");
printf("********************************\n");
}
int main(){
int elect = 0;
int quit = 0;
while (!quit){
ShowUI();
scanf("%d", &elect);
switch (elect){
case 1:Game();
break;
case 0:printf("Exit Game!\n");
quit = 1;
break;
default:printf("Pelese input right number\n");
break;
}
}
system("pause");
return 0;
}
2:由计算机产生20个雷的随机位置,进行布雷:规定“1”代表雷,“0”代表安全
void Set_Mine(char mine_board[ROW][COL], int row, int col) {
int i = 0;
srand((unsigned long)time(NULL));
for (i = 0; i < MINES; i++){
int x = (rand() % (row - 2)) + 1;
int y = (rand() % (col - 2)) + 1;
if (mine_board[x][y] == '0'){
mine_board[x][y] = '1';
}
}
}
3:由用户从键盘输入坐标进行排雷:若第一次即遇到雷,还可继续游戏,每次排雷成功后改坐标位置会显示出周围9个格子总共雷的个数帮助用户判断,若将20的雷的位置均确定,即为游戏成功。
void Play_Game(char mine_board[ROW][COL], char show_board[ROW][COL], int row, int col){
int i_index = 0;
int j_index = 0;
int sum = 0;
int count = 0;
int tmp = 0;
while (1){
Show(show_board, row, col);
printf("plese enter pose<x,y>:");
scanf("%d,%d", &i_index, &j_index);
if (i_index > 0 && i_index <= row&&j_index > 0 && j_index <= col){
if (mine_board[i_index][j_index] == '0'){
sum = mine_board[i_index - 1][j_index - 1] + mine_board[i_index - 1][j_index] + \
mine_board[i_index - 1][j_index + 1] + mine_board[i_index][j_index + 1] + \
mine_board[i_index + 1][j_index] + mine_board[i_index + 1][j_index - 1] + \
mine_board[i_index + 1][j_index - 1] + mine_board[i_index][j_index - 1] - 8 * '0';
count++;
if (sum == 0){
View(show_board, i_index, j_index);
}
show_board[i_index][j_index] = sum + '0';
}
else{
tmp++;
Show(show_board, row, col);
if (tmp == 1){
printf("Give you a chance:(\n");
continue;
}
printf("You Lose:(\n");
break;
}
}
else{
printf("Enter Error,Try Again!\n");
continue;
}
if (count >= (row - 2)*(col - 2) - MINES){
printf("congratulation:)\n");
break;
}
}
}
4:显示用户游戏的的过程:
void Show(char show_board[ROW][COL], int row, int col){
int i = 0;
int j = 0;
printf(" 1 2 3 4 5 6 7 8 9 10\n");
printf("-------------------------------------------------\n");
for (i = 1; i <=row; i++){
printf("%2d |", i );
for (j = 1; j <= col; j++){
printf(" %c |", show_board[i][j]);
}
printf("\n-------------------------------------------\n");
}
}
在完成上面四个功能块后可在Game()函数中调用这些函数完成游戏进程。
void Game(){
char show_board[ROW][COL];
char mine_board[ROW][COL];
memset(show_board, '#', sizeof(show_board));
memset(mine_board, '0', sizeof(mine_board));
Set_Mine(mine_board,ROW-2,COL-2);
Play_Game(mine_board, show_board, ROW - 2, COL - 2);
}
运行程序界面:
在以上程序中需要两完全相同的矩阵,一个用于布雷,一个用于显示,且为了排除边框的影响设置为12*12的矩阵但实际所用矩阵为10*10。