扫雷游戏

#include<stdio.h>
#include<stdlib.h>
#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 10
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 count = MINE_COUNT;
 while (count > 0) {
  int row = rand() % MAX_ROW;
  int col = rand() % MAX_ROW;
  if (mine_map[row][col] == ‘1’) {
   continue;
  }
  mine_map[row][col] = ‘1’;
  --count;
 }
}
void Printmap(char map[MAX_ROW][MAX_COL]) {
 printf("   |");
 for (int row = 0; row < MAX_ROW; row++) {
  printf("%d “, row);
 }
 printf(”\n");
 printf("------------------------");
 printf("\n");
 for (int col = 0; col < MAX_COL; col++) {
  printf(" %d |",col);
  for (int row = 0; row < MAX_ROW; row++) {
   printf("%c “, map[row][col]);
  }
  printf(”\n");
 }
}
void Scanf(char show_map[MAX_ROW][MAX_COL],int
row, int* col) {
 while (1) {
  printf(“请输入要翻开的坐标:\n”);
  scanf_s("%d,%d", row, col);
  if (*row < 0 || *row >= MAX_ROW || *col < 0 || *col >= MAX_COL) {
   printf(“请重新输入:\n”);
   continue;
  }
  if (show_map[*row][col] != '’) {
   printf(“您的输入有误,请重新输入!\n”);
   continue;
  }
  break;
 }
}
void Updatemap(char show_map[MAX_ROW][MAX_COL],char mine_map[MAX_ROW][MAX_COL],int row,int col) {
 int mine_count = 0;
 if (row-1>=0 && col-1>=0 && mine_map[row - 1][col - 1] == ‘1’) {
  ++mine_count;
 }
 if (row - 1 >= 0 && mine_map[row - 1][col] == ‘1’) {
  ++mine_count;
 }
 if (row - 1 >= 0 && col + 1 <MAX_COL && mine_map[row - 1][col + 1] == ‘1’) {
  ++mine_count;
 }
 if (col - 1 >= 0 && mine_map[row][col - 1] == ‘1’) {
  ++mine_count;
 }
 if (col+1<MAX_COL && mine_map[row - 1][col + 1] == ‘1’) {
  ++mine_count;
 }
 if (row+1<MAX_ROW && col-1>=0 && mine_map[row + 1][col - 1] == ‘1’) {
  ++mine_count;
 }
 if (row + 1 < MAX_ROW && mine_map[row + 1][col] == ‘1’) {
  ++mine_count;
 }
 if (row + 1 < MAX_ROW && col + 1 <MAX_COL && mine_map[row + 1][col + 1] == ‘1’) {
  ++mine_count;
 }
 show_map[row][col] = mine_count + ‘0’;
}
void Game() {
 int row = 0;
 int col = 0;
 char show_map[MAX_ROW][MAX_COL];
 char mine_map[MAX_ROW][MAX_COL];
 Init(show_map, mine_map);
 int safe_count = 0;
 //Printmap(mine_map);
 while (1) {
  Printmap(show_map);
  Scanf(show_map, &row, &col);
  if (mine_map[row][col] == ‘1’) {
   printf(“GAMEOVER!\n”);
   break;
  }
  ++safe_count;
  if (safe_count == MAX_ROW * MAX_COL - MINE_COUNT) {
   printf(“GAME WIN!\n”);
   break;
  }
  system(“cls”);
  Updatemap(show_map, mine_map, row, col);
 }
}
int main() {
 Game();
 system(“pause”);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值