简易版扫雷(C语言实现)
想要做出这个游戏,我们需要先了解游戏的玩法。就是在一个棋盘上面有若干个雷(隐藏的),当点击棋盘空格区域时,会显示相邻1格的雷的个数,若点中了雷,则游戏结束。
接下来让我们看看该如何做到这个扫雷游戏的实现。
还是一样,我们把这游戏的代码分成三个文件来完成,一个game.h用来存放游戏实现的各种函数声明以及头文件,game.c用来放游戏的实现函数定义,test.c用来存放游戏的界面打印和运行过程代码。
首先我们需要打印出游戏菜单来让玩家选择,代码如下:
void menu()
{printf("***************************\n");printf("******* 1.play **********\n");//选择1进行游戏printf("******* 0.exit **********\n");//0退出游戏printf("***************************\n");
}
然后让我们看一下主函数的代码:
int main()
{int in = 0;srand((unsigned int)time(NULL));//设置随机数do {menu();//打印菜单printf("请选择\n");scanf_s("%d", &in);switch (in)//接收输入的数,进行判断{case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误");break;}} while (in);//循环,只要不选择退出游戏就可以一直玩return 0;
}
然后给大家看一下game.h中的代码
接下来就是这个游戏的核心部分,game.c的代码该如何设置:
首先我们来分析一下该如何做,先我们需要一个棋盘来设置雷,但是我们又不能够将雷直接放给玩家看,所以我们需要在设置一个棋盘,展示给玩家看,让他们进行扫雷。我们将设置雷的棋盘上全部放上 0 ,然后雷设置为 1 ,展示给玩家的棋盘全部设为 * ,让玩家进行扫雷,下面是代码:
char mine[ROWS][COLS] = { 0 };//定义的设置雷的棋盘
char show[ROWS][COLS] = { 0 };//玩游戏的棋盘
InitBoard(mine, ROWS, COLS, '0');//将棋盘中放上 0
InitBoard(show, ROWS, COLS, '*');//将棋盘全部放上 *
void InitBoard(char board[ROWS][COLS], int rs, int cs,char set)//这个函数是给棋盘赋上值
{int i, j;for (i = 0; i < rs; i++){for (j = 0; j < cs; j++){board[i][j] = set;}}
}
接下来打印展示的游戏棋盘,同时为了美观和游戏体验,我们将棋盘设置成大两行的数列,便于操作,并在棋盘上下划线便于区分:
void show_board(char board[ROWS][COLS], int r, int c)
{int i, j;printf("-----------扫雷-----------\n");for (i = 0; i <= c; i++)//这一步是将每一列的列数打印出来{printf("%d ", i);}printf("\n");for (i = 1; i <= r;i++){printf("%d ", i);//将每一行的行数打印出来for (j = 1; j <= c; j++){printf("%c ", board[i][j]);}printf("\n");}printf("-----------扫雷-----------\n");}
然后就是布置雷了,这里我们要用到rand函数,随机设置雷的分布,并要注意不能重复设置:
void set_mine(char board[ROWS][COLS], int r, int c)
{int x, y;int count = COUNT;//雷的个数while (count)//当雷不为0时进入循环{x = rand() % r + 1;//在1到r中取随机数坐标y = rand() % r + 1;if (board[x][y] == '0')//当没有设置过雷时才能进入设置雷,否则重新循环{board[x][y] = '1';count--;//当设置了一个雷后,雷的数量减一}}
}
接下来让我们开始扫雷:
int get_mine_count(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 find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{int x, y, win = 0;//win为排查非雷的个数while (win < r * c - COUNT){printf("请输入要排查的坐标:\n");scanf_s("%d%d", &x, &y);if (x >= 1 && x <= r && y >= 1 && y <= c){if (mine[x][y] == '1')//如果输入的坐标有雷,进入{printf("很遗憾,被炸死了。\n");show_board(mine, ROW, COL);//将设置雷的棋盘打印出来break;}else{int count = get_mine_count(mine, x, y);//将排查的非雷坐标附近的八个坐标的雷的数量打印出来show[x][y] = count + '0';show_board(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入\n");}}if (win == r * c - COUNT)//当非雷数与棋盘的格数减去雷数相等时,则游戏胜利{printf("恭喜你,排雷成功\n");show_board(mine, ROW, COL);}
}
然后这游戏的主要代码已经写完了,给你们整合一下game.h和test.c的代码:
game.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define COL 9
#define ROW 9
#define ROWS 11
#define COLS 11
#define COUNT 10
void InitBoard(char board[ROWS][COLS], int r, int c,char set);
void show_board(char board[ROWS][COLS],int r,int c);
void find_mine(char mine[ROWS][COLS],char show[ROWS][COLS],int r, int c);
void set_mine(char board[ROWS][COLS], int r, int c);
test.c
#include"game.h"
void menu()
{printf("***************************\n");printf("******* 1.play **********\n");printf("******* 0.exit **********\n");printf("***************************\n");
}
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');set_mine(mine, ROW, COL);show_board(show, ROW, COL);find_mine(mine, show, ROW, COL);
}
int main()
{int in = 0;srand((unsigned int)time(NULL));do {menu();printf("请选择\n");scanf_s("%d", &in);switch (in){case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误");break;}} while (in);return 0;
}
好了,这一次的扫雷游戏就结束了,快点写完去玩两把吧,自己做到游戏玩起来可是有不同的成就感哦!
看到这里了还不三连吗!!!
简易版扫雷(C语言实现)相关推荐
- c语言小游戏 精简_C语言开发简易版扫雷小游戏
C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...
- 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】
目录 一.扫雷游戏的运行逻辑 二.代码逻辑讲解+源码 1.打印一个简易的游戏开始菜单 2.创建数组储存数据并初始化数组 代码逻辑讲解 源码 3.布置雷 代码逻辑讲解 源码 4.排雷 代码逻辑 源码 三 ...
- Win32简易版扫雷
社团的一群小孩都默默的写好了扫雷,嘿嘿,我也打算凑个热闹 最近学windows编程,就写一个win32简易版扫雷吧 //不支持右键 感觉写的挺乱的╮(╯▽╰)╭啊,不要在意这些细节 点到雷会退出程序 ...
- c++简易版扫雷游戏
c++简易版扫雷游戏,代码如下: #include<iostream> #include<cstdlib> #include<time.h> using names ...
- 利用java开发简易版扫雷游戏
1.简介 学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识. 2.编写过程 编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码. 第一版:完成了扫雷游戏的基本雏形,实现 ...
- 【C语言】简易版扫雷游戏(play game)
目录 扫雷游戏
- win32 简易版扫雷
初学Windows 编程,觉得挺有意思,突发奇想,尝试一下编写扫雷小游戏.因为对MFC和windows编程没有太多了解,因此采用很low的方法:利用鼠标在客户区域点击的不同位置响应事件.我还是小白,不 ...
- 用Lex编写的简易版C语言词法分析器(编译原理大作业1)
本文讲解关于如何用lex工具来编写一个简易版的C语言的词法分析器.我主要通过一个完整的项目例子来进行讲解.当然这篇文章面向已经对lex有所了解但还不会具体运用的读者,如果对lex一无所知,请看我的另一 ...
- 2000行C代码实现简易版“阿尔法狗”
2000行代码实现简易版"阿尔法狗"C语言 众所周知,"阿尔法狗"是围棋AI,击败了一众围棋高手,小编也尝试写了一个会下五子棋的程序,不过根本谈不上" ...
- C语言扫雷游戏(简易版)
前言 经过学习数组.函数.循环语句.选择语句等C语言的一些基础知识后,我想借助编写扫雷小游戏来对所学知识进行一个巩固.游戏只会实现一些基本的功能,展开.标记雷.取消雷等不实现(还不会). 1.游戏编写 ...
最新文章
- 如何配置能使j2me开发环境处于正常状态
- C# 关于调用微信接口的代码
- 优化:更优雅的异步代码?
- 打包指令_将Vue项目打包为Windows应用(.exe)
- PING检查网络是否畅通
- Android之WebView学习
- ccf推荐期刊和会议目录_重磅快讯:大数据入选CCF推荐中文科技期刊目录!
- Linux 防火墙 开放 端口 iptables
- apk私钥_移动安全(二)|APK打包流程及签名安全机制初探
- grunt打包压缩css、js方法
- pom文件各标签解释
- srs流媒体服务器+obs推流(简单)
- 食堂刷卡消费系统服务器,食堂一卡通消费系统如何使用
- 金融市场一周简报(2017-08-18)
- 2021-2025年中国拜勒病治疗行业市场供需与战略研究报告
- Autojs在线云更新教程
- Python实战——VAE的理论详解及Pytorch实现
- Python基础教程(第3版)读书笔记:第2章 列表和元组
- Mac上Logi Options安装问题
- 最新JavaEE系统架构师学习路线之基础篇
热门文章
- Multi-modality Latent Interaction Network for Visual Question Answering阅读笔记
- Mysql增删改查(CURD)
- c++ ‘-DNODE_GYP_MODULE_NAME=libsass‘ ‘-DUSING_UV_SHARED=1‘ ‘-DUSING_V8_SHARED=1‘ ‘-DV8_DEPRECATION_
- 2022-2027年中国安全仪表系统(SIS)行业发展监测及投资战略研究报告
- import sys
- wpf/sl下的复合程序-CAG入门
- sp 导出unity哪个_SP与Unity的效果差异分析
- 考研政治---马克思主义基本原理概论---认识论
- Fbank特征与MFCC特征解析
- 卧槽!全网最全编程学习网站汇总!还不赶快放到收藏夹里吃灰~