1.扫雷练习
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 9
void init(char show_map[MAX_ROW][MAX_COL],
char mine_map[MAX_ROW][MAX_COL]){
for (int row = 0; row < MAX_ROW; ++row){
for (int col = 0; col < MAX_COL; ++col){
show_map[row][col] = '*';
}
}
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
mine_map[row][col] = '0';
}
}
int mine_count = MINE_COUNT;
while (mine_count >= 0){
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mine_map[row][col] == '1'){
continue;
}
mine_map[row][col] = '1';
--mine_count;
}
}
void print(char map[MAX_ROW][MAX_COL]){
printf(" | ");
for (int col = 0; col < MAX_COL; col++){
printf("%d ", col);
}
printf("\n");
for (int i = 0; i < 10; i++){
printf("--");
}
printf("\n");
for (int row = 0; row < MAX_ROW; row++){
printf("%d| ", row);
for (int col = 0; col < MAX_COL; col++){
printf("%c ", map[row][col]);
}
printf("\n");
}
}
int searchmapnum(int row, int col, char mine_map[MAX_ROW][MAX_COL], char show_map[MAX_ROW][MAX_COL]){
int count = 0;
if (row - 1 >= 0&&col - 1 >= 0&&mine_map[row - 1][col - 1] == '1'){
++count;
}
if (row - 1 >= 0&&mine_map[row - 1][col] == '1'){
++count;
}
if (row - 1 >= 0&&col + 1 <= MAX_COL&&mine_map[row - 1][col + 1] == '1'){
++count;
}
if (col - 1 >= 0&&mine_map[row][col - 1] == '1'){
++count;
}
if (col + 1 < MAX_COL&&mine_map[row][col + 1] == '1'){
++count;
}
if (row + 1 < MAX_ROW&&col - 1 >= 0&&mine_map[row + 1][col - 1] == '1'){
++count;
}
if (row + 1 < MAX_ROW&&mine_map[row + 1][col] == '1'){
++count;
}
if (row + 1 < MAX_ROW&&col + 1 < MAX_COL&&mine_map[row + 1][col + 1] == '1'){
++count;
}
show_map[row][col] = count + '0';
}
void game(){
char show_map[MAX_ROW][MAX_COL];
char mine_map[MAX_ROW][MAX_COL];
init(show_map,mine_map);
int row = 0, col = 0,blank = 0;
while (1){
print(show_map);
print(mine_map);
printf("输入坐标(例如3 3):\n");
scanf("%d %d", &row, &col);
if (row < 0 || row >= 9 || col < 0 || col >= 9){
printf("坐标输入有误!\n");
continue;
}
if (show_map[row][col] != '*'){
printf("坐标已经被占用了!\n");
continue;
}
if (mine_map[row][col] == '1'){
printf("踩中雷了\n");
return;
}
++blank;
if (blank == MAX_ROW*MAX_COL - MINE_COUNT){
printf("成功!\n");
return;
}
searchmapnum(row,col,mine_map,show_map);
}
system("pause");
}
int main(){
srand((unsigned int)time(0));
int choice = 0;
while (1)
{
printf("**************************************\n");
printf("1.begin\n");
printf("2.exit\n");
printf("**************************************\n");
scanf("%d", &choice);
if (choice == 1){
game();
system("pasue");
system("cls");
}
else if (choice == 2){
break;
}
else{
printf("error!!");
continue;
}
}
system("pause");
}