【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?

简介: 【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?

1 -> test.c

#define _CRT_SECURE_NO_WARNINGS 1
 
#include "game.h"
 
void menu()
{
  printf("************************************\n");
  printf("*********       1.play      ********\n");
  printf("*********       0.exit      ********\n");
  printf("************************************\n");
}
 
void game()
{
  //show数组为排查出的雷的信息
  char show[ROWS][COLS] = { 0 };
  //mine数组为布置好的雷的信息
  char mine[ROWS][COLS] = { 0 };
 
  //初始化棋盘
  InitBoard(show, ROWS, COLS, '*');
  InitBoard(mine, ROWS, COLS, '0');
 
  //打印棋盘
  DisplayBoard(show, ROW, COL);
 
  //布置雷
  SetMine(mine, ROW, COL);
  //DisplayBoard(mine, ROW, COL);
 
  //排查雷
  FineMine(mine, show, ROW, COL);
}
 
int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新输入。\n");
      break;
    }
 
  } while (input);
 
  return 0;
}

2 -> game.c

#define _CRT_SECURE_NO_WARNINGS 1
 
#include "game.h"
 
//初始化棋盘
void InitBoard(char board[ROWS][ROWS], int rows, int cols, char set)
{
  memset(&board[0][0], set, rows * cols * sizeof(board[0][0]));
}
 
//打印棋盘
void DisplayBoard(char board[ROWS][ROWS], int row, int col)
{
  printf("******  扫雷  ******\n");
  for (int j = 0; j <= col; j++)
  {
    printf("%d ", j);
  }
  printf("\n");
  for (int i = 1; i <= row; i++)
  {
    printf("%d ", i);
    for (int j = 1; j <= col; j++)
    {
      printf("%c ", board[i][j]);
    }
    printf("\n");
  }
}
 
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{
  int cnt = EASY_COUNT;
 
  while (cnt)
  {
    int x = rand() % row + 1;
    int y = rand() % col + 1;
    if (mine[x][y] == '0')
    {
      mine[x][y] = '1';
      cnt--;
    }
  }
}
 
//计算周围雷的数量
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
  return (mine[x - 1][y - 1] +
    mine[x - 1][y] +
    mine[x - 1][y + 1] +
    mine[x][y - 1] +
    mine[x][y + 1] +
    mine[x + 1][y - 1] +
    mine[x + 1][y] +
    mine[x + 1][y + 1] - 8 * '0');
}
 
//排查雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
  int x = 0;
  int y = 0;
  int win = 0;
  while (win < row * col - EASY_COUNT)
  {
    printf("请输入坐标:>");
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)
    {
      if (mine[x][y] == '1')
      {
        printf("很遗憾,排雷失败。\n");
        DisplayBoard(mine, ROW, COL);
        break;
      }
      else
      {
        int cnt = GetMineCount(mine, x, y);
        show[x][y] = cnt + '0';
        DisplayBoard(show, ROW, COL);
        win++;
      }
    }
    else
    {
      printf("坐标输入错误,请重新输入\n");
    }
  }
  if (win == row * col - EASY_COUNT)
  {
    printf("恭喜你排雷成功!!!\n");
  }
}

3 -> game.h

#pragma once
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
//棋盘大小
#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
//雷的个数
#define EASY_COUNT 10
 
//初始化棋盘
void InitBoard(char board[ROWS][ROWS], int rows, int cols, char set);
 
//打印棋盘
void DisplayBoard(char board[ROWS][ROWS], int row, int col);
 
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);
 
//计算周围雷的数量
int GetMineCount(char mine[ROWS][COLS], int x, int y);
 
//排查雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

代码里的注释感觉已经很清楚啦,就不多讲解啦

感谢各位大佬的支持!!!

目录
相关文章
|
8月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
248 8
|
9月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
197 0
|
7月前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
282 8
|
8月前
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
289 5
|
8月前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
228 4
|
8月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
267 2
|
8月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
82 1
|
9月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
122 0
|
6月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
305 23
|
5月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
107 1
一文彻底搞清楚C语言的函数