c语言——实现简单扫雷小游戏

  • 游戏设计流程分析
  • 游戏代码实现
    • 打印游戏菜单
    • 雷的生成及排查
  • 附:完整代码

在学习c语言的过程中,如果能试着完成一个简单的小游戏,对初学者来说,会不会感觉小有成就呢?至少在设计、完成这个小游戏的过程中,我们可以发现很多问题并解决它,这也是一种成长。
本文将从经典的扫雷小游戏出发,用c语言设计、实现完成一个简单版本的扫雷游戏。欢迎交流,共同进步。

游戏设计流程分析

设计一个完整的游戏包括建立它的实现流程(算法框架)以及设计一套完整精确的代码。下图给出了扫雷小游戏的一个算法步骤大致流程框图,可以按照这个流程进行设计游戏以及代码实现,在代码实现过程中,再进行各个功能的具体设计与修改。

游戏代码实现

打印游戏菜单

在用户开始点击操作时,需要显示出来一个游戏界面,因此,在这里可以首先建立一个test.c的源文件,源文件内部建立一个显示菜单的菜单函数menu();

void menu()
{printf("************************\n");printf("*** 欢迎来到扫雷游戏 ***\n");printf("*****   1.play     *****\n");printf("*****   0.exit     *****\n");printf("************************\n");
}

test.c中需要完成一个程序入口函数:main(),主函数中一开始就调用test()完成菜单打印:

int main()
{test();return 0;
}
void test()
{int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请输入选项(1 or 0):>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择出错,请重新选择!\n");break;}} while (input);
}

雷的生成及排查

在游戏体验者进行扫雷之前,游戏需要随机生成雷的位置和信息,以及进行雷的排查工作,这里采用二维数组建立存放雷的相关信息,下面是对游戏中实现某些功能的函数的调用流程,即可以按照该流行进行功能函数的设计,在函数game()中进行

void game()
{//雷的信息存储//1.存放布置好的雷的信息char mine[ROWS][COLS] ={ 0 };//'0'-不是雷//2.存放排查出的雷的信息char show[ROWS][COLS] = {0};//'*'-神秘-未排查//初始化mine 和 showInitBoard(mine,ROWS,COLS,'0');InitBoard(show, ROWS, COLS, '*');//打印棋盘//DisplayBoard(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//布置雷SetMine(mine,ROW,COL);DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine,show,ROW,COL);}

建立game.c源文件,在其内部完成功能函数的定义
InitBoard()函数完成对雷信息和需要显示出来的雷的界面信息的初始化

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols;j++){board[i][j] = set;}}
}

DisplayBoard()函数完成显示扫雷结果界面信息的打印输出。

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

埋雷:在游戏前,需要随机生成雷的左边信息,并对该位置进行埋雷操作。其中’0’表示该位置无雷,'1’表示有雷。

void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){//随机生成雷的坐标int x = rand() % row + 1;int y = rand() % col + 1;//判断此坐标有没有雷if (mine[x][y]=='0'){mine[x][y] = '1';count--;}}
}

排查雷:FindMine()函数实现雷的排查功能,通过调用GetMineCount()函数计算对应坐标周围雷的个数,并将雷的个数显示出来。

void FindMine(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 count = GetMineCount(mine,x,y);if (count==0){DisplayBoard(show, row, col);}elseshow[x][y] = count + '0';//放入该坐标周围雷的个数system("cls");//打印前清除原本打印信息DisplayBoard(show, row, col);win++;}}else{printf("坐标有误,请重新输入!\n");}}if (win==row*col-EASY_COUNT){printf("恭喜你,排雷成功!\n");}}

游戏的大部分代码都已经在文中给出。
当然,该游戏只是实现了扫雷的一个基本功能,好可以进行很多的优化和改进,欢迎交流,共同进步。

附:完整代码

game.h

#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//初始化扫雷的棋盘
void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row,int col);
//布置雷
void SetMine(char mine[ROWS][COLS],int row,int col);
//排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols;j++){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;for (i = 0; i <= col;i++){printf("%d ",i);}printf("\n");for (i = 1; i <= row;i++){printf("%d ",i);for (j = 1; j <= col;j++){printf("%c ",board[i][j]);}printf("\n");}
}void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){//随机生成雷的坐标int x = rand() % row + 1;int y = rand() % col + 1;//判断此坐标有没有雷if (mine[x][y]=='0'){mine[x][y] = '1';count--;}}
}
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y] +mine[x - 1][y-1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - 8 * '0');
}
void FindMine(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 count = GetMineCount(mine,x,y);if (count==0){DisplayBoard(show, row, col);}elseshow[x][y] = count + '0';//放入该坐标周围雷的个数system("cls");//打印前清除原本打印信息DisplayBoard(show, row, col);win++;}}else{printf("坐标有误,请重新输入!\n");}}if (win==row*col-EASY_COUNT){printf("恭喜你,排雷成功!\n");}}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include "game.h"void menu()
{printf("************************\n");printf("*** 欢迎来到扫雷游戏 ***\n");printf("*****   1.play     *****\n");printf("*****   0.exit     *****\n");printf("************************\n");
}
void game()
{//雷的信息存储//1.存放布置好的雷的信息char mine[ROWS][COLS] ={ 0 };//'0'-不是雷//2.存放排查出的雷的信息char show[ROWS][COLS] = {0};//'*'-神秘-未排查//初始化mine 和 showInitBoard(mine,ROWS,COLS,'0');InitBoard(show, ROWS, COLS, '*');//打印棋盘//DisplayBoard(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//布置雷SetMine(mine,ROW,COL);DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine,show,ROW,COL);}
void test()
{int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请输入选项(1 or 0):>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择出错,请重新选择!\n");break;}} while (input);
}
int main()
{test();return 0;
}

c语言——实现简单扫雷小游戏相关推荐

  1. 当心,前面有地雷——C语言实现简单扫雷小游戏

    ⭐️前面的话⭐️

  2. 使用C语言写一个扫雷小游戏

    前言 相信扫雷游戏小伙伴们肯定都玩过吧,学习了C语言中的数组.函数等基础内容之后就可以自己写一个简易的扫雷小游戏了,今天就我写扫雷小游戏的过程及思路写一篇博客,希望大家看完我的博客能有所收获. 软件及 ...

  3. ChatGPT实现用C语言写一个扫雷小游戏

    前几天我们利用 ChatGPT实现用C语言写一个学生成绩管理系统 其过程用时不到30秒,速度惊人 今天又让ChatGPT用C语言写了一个扫雷小游戏,它的回答是:抱歉,我是AI语言模型,无法编写程序. ...

  4. C语言初阶——扫雷小游戏

    扫雷这款小游戏想必大家都接触到过,但是用C语言写的扫雷你见过吗?其实,学完之前我写的那几篇文章,我们完全可以自己写出来.仅仅200多行代码,我们就可以写出我们自己的扫雷小游戏!赶紧来看看吧!!! 文章 ...

  5. C语言系列(1) --- C语言实现经典扫雷小游戏

    (一)游戏简介 游戏初始界面有两个选择,选项"1"为开始游戏,选项"0"为退出游戏:选择开始游戏之后将会打印出9*9的棋盘,此时系统已经为游戏设置了10个雷,输 ...

  6. c语言编写五子棋小游戏ppt,C语言实现简单五子棋小游戏

    五子棋简单功能实现,供大家参考,具体内容如下 游戏功能演示 代码如下: #include #include #include #include // 棋盘 char board[15][15]; // ...

  7. 用C语言来实现扫雷小游戏

    文章目录 前言 一.扫雷的准备工作 二.扫雷的具体实现过程 1.分析 2.实现过程 2.1 初始化 2.2 布置雷 2.3 排雷 总结 前言 这是我第三次写博客,应该能比前两次写的更成熟一点,写的更好 ...

  8. c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...

    [2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 一.实验目的与要求 (1)了解极大极小算法的原理和使用方法,并 ...

  9. C语言实现简易扫雷小游戏

    扫雷(简易版): 游戏规则:电脑随机生成雷,玩家随机扫一个坐标,如果该坐标是生成雷的位置,则踩到雷.如果没有则显示该坐标附近八个坐标雷的总数,一直循环至所有不是雷的坐标全部扫完 下面图片红色代表雷,黑 ...

  10. JAVA语言课程设计——扫雷小游戏

    1.设计内容 设计一个界面为10*10的扫雷程序,雷的个数不少于10个.功能如Windows系统给定的扫雷游戏. 效果如图:扫雷界面 2.设计要求 界面美观,鼠标的左右键好用.左键:直接显示有几个雷, ...

最新文章

  1. 宏使用 Tricks
  2. QSS为Qt程序添加不一样的样式
  3. css :hover
  4. 《WinForm开发系列之控件篇》Item22 HelpProvider(暂无)
  5. 今天开通了自己的博客
  6. IntelliJ IDEA 2020.x 入门到爱不释手
  7. web自动化原理揭秘
  8. quartz和应用的集群问题
  9. pdf png 转换超清
  10. [WEB]超牛的前端页面模板收集
  11. 使用 docker 来安装 oracle 11c
  12. PXA300平台2D图形加速器性能测试与分析
  13. 固定效应or随机效应?如何用matlab进行豪斯曼检验
  14. pug 编译html,pug之HTML模板引擎安装编译教程
  15. 【kali】34 WEB渗透——扫描工具w3af_console
  16. 作为大数据技术面试官,我喜欢什么样的应届毕业生?
  17. 《2018秋招小结》
  18. 因收费被抵制、如今又被明星索赔百万,丰巢出路在何方?
  19. JavaSSM-Mybatis框架使用
  20. Entity Framework Core系列教程-25-Entity Framework Core日志

热门文章

  1. 支付系列-对接支付宝支付
  2. word中px,pt,dpi,in,em,twip,emu之间的关系
  3. Microsoft SQL Server 2008R2企业版64位(带密钥)
  4. 项目管理和软件开发的边界
  5. 5G学习笔记之RRC_IDLE/RRC_INACTIVE态UE功能概述
  6. 裁员潮来袭,如何度过这两年“艰苦岁月”
  7. step1 基本语法流程控制
  8. django LookUp
  9. 逍遥天龙八部服务器技能修改,泣诉天龙八部3逍遥三大难 技能修改势在必行
  10. Black Hat USA 2011: Alexander Polyakov - CTO - ERPScan