返回

用C语言写个简易扫雷游戏,测试逻辑思维和编程能力

后端

扫雷游戏概述

扫雷游戏是一个单人游戏,目标是通过点击网格中的方块来找出所有隐藏的雷。每个方块可以是空的,也可以包含一个雷。当玩家点击一个空方块时,该方块及其周围的八个方块将被揭示。如果玩家点击一个包含雷的方块,游戏将结束。

实现扫雷游戏的基本步骤

  1. 创建一个网格来存储雷的位置。
  2. 创建一个网格来存储玩家的猜测。
  3. 编写一个函数来检查玩家的猜测是否正确。
  4. 编写一个函数来揭示玩家点击的方块及其周围的八个方块。
  5. 编写一个函数来检查游戏是否结束。
  6. 编写一个函数来打印游戏状态。

C语言实现扫雷游戏

#include <stdio.h>
#include <stdlib.h>

// 网格的大小
#define SIZE 10

// 雷的数量
#define NUM_MINES 10

// 创建网格来存储雷的位置
int mine[SIZE][SIZE];

// 创建网格来存储玩家的猜测
int guess[SIZE][SIZE];

// 检查玩家的猜测是否正确
int check_guess(int x, int y) {
  // 如果玩家点击了一个包含雷的方块,返回-1
  if (mine[x][y] == 1) {
    return -1;
  }

  // 如果玩家点击了一个空的方块,返回0
  if (mine[x][y] == 0) {
    return 0;
  }

  // 如果玩家点击了一个已经被揭示的方块,返回1
  if (guess[x][y] == 1) {
    return 1;
  }

  // 如果玩家点击了一个没有被揭示的方块,返回2
  return 2;
}

// 揭示玩家点击的方块及其周围的八个方块
void reveal_square(int x, int y) {
  // 将玩家点击的方块标记为已揭示
  guess[x][y] = 1;

  // 揭示玩家点击的方块及其周围的八个方块
  for (int i = x-1; i <= x+1; i++) {
    for (int j = y-1; j <= y+1; j++) {
      // 如果方块在网格内
      if (i >= 0 && i < SIZE && j >= 0 && j < SIZE) {
        // 如果方块没有被揭示
        if (guess[i][j] == 0) {
          // 揭示方块
          guess[i][j] = 1;

          // 如果方块是空的,继续揭示周围的方块
          if (mine[i][j] == 0) {
            reveal_square(i, j);
          }
        }
      }
    }
  }
}

// 检查游戏是否结束
int check_game_over() {
  // 如果玩家点击了一个包含雷的方块,游戏结束
  for (int i = 0; i < SIZE; i++) {
    for (int j = 0; j < SIZE; j++) {
      if (mine[i][j] == 1 && guess[i][j] == 1) {
        return -1;
      }
    }
  }

  // 如果玩家已经揭示了所有不包含雷的方块,游戏结束
  for (int i = 0; i < SIZE; i++) {
    for (int j = 0; j < SIZE; j++) {
      if (mine[i][j] == 0 && guess[i][j] == 0) {
        return 0;
      }
    }
  }

  // 游戏仍在继续
  return 1;
}

// 打印游戏状态
void print_game() {
  // 打印网格
  for (int i = 0; i < SIZE; i++) {
    for (int j = 0; j < SIZE; j++) {
      // 如果方块是空的,打印一个空格
      if (guess[i][j] == 0) {
        printf(" ");
      }
      // 如果方块包含一个雷,打印一个*
      else if (mine[i][j] == 1) {
        printf("*");
      }
      // 如果方块已经被揭示,打印方块中的数字
      else {
        printf("%d", mine[i][j]);