当前位置: 首页 > news >正文

【C语言极简自学笔记】项目开发——扫雷游戏

一、项目概述

1.项目背景

扫雷是一款经典的益智游戏,由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中,开发扫雷游戏是一个非常合适的实践项目,它能够综合运用 C 语言的多种基础知识,如数组、函数、循环、条件判断等,有助于提升编程能力和逻辑思维能力。

2.项目目标

本次项目旨在使用 C 语言开发一个控制台版本的扫雷游戏,实现以下基本功能:

  1. 初始化游戏棋盘,包括雷区的布置和非雷区域周围雷数的计算。
  2. 玩家通过输入坐标来翻开棋盘格子,若翻开雷则游戏失败,若翻开所有非雷格子则游戏胜利。
  3. 提供标记雷的功能,方便玩家识别可能有雷的区域。
  4. 具备良好的用户交互界面,显示棋盘状态和游戏提示信息。

二.游戏设计 

 1.界面设置

由于进入游戏之后首先需要显示选择是否进行游戏的界面,因此需要利用do...while循环至少执行一次的特点来显示界面,并根据用户的选择来决定是否进入游戏,对主函数的编码如下所示:

int main()
{int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch (input){case 1:printf("开始游戏\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误请重新选择\n");break;}} while (input);return 0;
}

通过switch语句,根据输入的值来选择是否进入游戏,若输入0,则退出游戏;若输入1,则开始游戏;若输入其他数字,提醒选择错误请重新输入。

菜单函数编辑如下:

void menu()
{printf("******************************\n");printf("********    1.play    ********\n");printf("********    0.exit    ********\n");printf("******************************\n");
}

2.游戏环节设置

当用户选择开始游戏后,需要进入游戏,因此需要创建一个函数来实现游戏的过程。由于需要同时布置雷和排查雷,因此需要创建两个二维数组来实现对雷的布置与排查。

(1)初始化棋盘

void Initboard(char board[ROWS][COLS], int row, int col, char ret)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ret;}}
}

将布置雷的数组的所有元素初始化0,将排查雷的数组的所有元素初始化为*,因此需要一个字符变量来传递参数。

(2)打印棋盘

void Displayboard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-------------------扫雷-----------------------\n");for (j = 0; j <= col; j++){printf("%d ",j);}printf("\n");for (i = 1; i <= row; i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("-------------------扫雷-----------------------\n");
}

为了更好的识别数组中的哪一个元素,增加了打印行和列的部分

(3)设置雷

void Setmine(char board[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}

通过调用srand函数生成随机数的生成起点,然后通过取模运算即可随机设置雷的位置。

此时游戏函数的代码如下:

void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };Initboard(mine, ROWS, COLS,'0');Setmine(mine, ROW, COL);//Displayboard(mine, ROW, COL);//为了展示设置雷和初始化后的结果,正式游戏不用打印Initboard(show, ROWS, COLS,'*');Displayboard(show, ROW, COL);
}

 代码整体运行结果如下:

 可以看到,已经随机设置了十个雷,而且排查雷的数组所有元素被初始化为*。

欲知后事如何,且看下篇文章!!!!!

相关文章:

  • 时序数据库IoTDB基于云原生的创新与实践
  • 【测试】Bug和用例
  • 测试概念 和 bug
  • git+svn+sourcetree客户端下载和安装教程
  • remote: error: hook declined to update refs/heads.....
  • 测试Bug篇
  • TDengine 运维——巡检工具(安装前预配置)
  • 今天遇到的bug
  • 【Bug】定时任务中 Jpa Save 方法失效
  • Docker常用命令操作指南(一)
  • 华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【论文阅读】《PEACE: Empowering Geologic Map Holistic Understanding with MLLMs》
  • stm32cube ide如何将工具链替换成arm-none-eabi-gcc
  • stm32cube ide如何生成LL库工程
  • C++23 std::fstreams基础回顾
  • 基于本地化大模型的智能编程助手全栈实践:从模型部署到IDE深度集成学习心得
  • echarts双柱状图支持点击并高亮当前点击柱子
  • 【大模型】Bert变种
  • 序列化与反序列化
  • GitHub 趋势日报 (2025年05月28日)
  • 中山企业网站建设定制/seo为什么要进行外部优化
  • php做的网站源代码在哪里/百度移动权重
  • 武汉哪家做网站/整合营销理论
  • 做网站的销售好做吗/99个创意营销方案
  • 建设银行山西招聘网站/网站seo优化案例
  • 河南网站建设的详细策划/磁力引擎