c语言小游戏之扫雷

目录

一:游戏设计理念及思路

二:初步规划的游戏界面

三:开始扫雷游戏的实现

注:1.创建三个文件,test.c用来测试整个游戏的运行,game.c用来实现扫雷游戏的主体,game.h用来函数声明和包含头文件

2.为方便定位坐标,在展示数组时添加行号和列号

四:谢谢观看 


听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

一:游戏设计理念及思路

1.扫雷游戏就是如平常战争片里见到的,工兵去布满雷的地区去一步步的排除雷,该游戏就简单模拟该场景。

2.该游戏是在9*9的81个格子中随机布置10个雷,然后通过排查坐标的形式慢慢排查出雷的位置

3.玩家通过输入要排查坐标的位置来开始扫雷,如该位置是雷的话,则玩家被炸死,游戏结束,反之该位置将显示周围8个坐标位置雷的数量,便于玩家继续思考排查

4.若排查完所有的无雷的71个坐标,则显示扫雷成功

二:初步规划的游戏界面

1.打开游戏便显示游戏菜单

通过玩家选择    1:玩游戏     0:退出游戏         其余数字均显示选择错误重新选择

2.开始玩游戏之后,显示9*9的一个布置好10个雷的棋盘,为了隐藏雷的信息,可以创建两个数组,mine数组用来存放雷的信息,show数组用来隐藏雷的信息,为方便起见,创建两个字符数组,mine数组用‘1’表示雷,‘0’表示无雷,show数组全部用‘*’来显示

3.如果要排查(8,0) 这个坐标的话,假设不是雷,那么就要统计周围雷的个数,会发现此时数组会越界访问,为防止这种情况的发生,我们应该创建个11*11的格子,并且全部初始化为‘0’,我们正式扫雷时只使用其中的9*9的格子进行游戏

4.当玩家扫雷被炸死或者扫雷成功之后显示mine数组中存放雷的信息

三:开始扫雷游戏的实现

注:1.创建三个文件,test.c用来测试整个游戏的运行,game.c用来实现扫雷游戏的主体,game.h用来函数声明和包含头文件
2.为方便定位坐标,在展示数组时添加行号和列号

3.     game.h

#pragma once
#include <stdio.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINECOUNT 10
#include <stdlib.h>
#include <time.h>
//初始化数组
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set);//展示数组
void DisplayBoard(char arr[ROWS][COLS], int row, int col);//在mine数组中随即设置10个雷的信息
void SetMine(char arr[ROWS][COLS], int row, int col);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查周围雷的数量
int GetMineCount(char mine[ROWS][COLS], int x, int y);

                                   test.c 

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
{printf("****************\n");printf("**** 1.play ****\n");printf("**** 0.exit ****\n");printf("****************\n");
}
void game()
{//创建11*11的两个字符数组  mine数组用来存放雷的信息,show数组用来展示排查雷的信息char mine[ROWS][COLS] = {0};char show[ROWS][COLS] = {0};//初始化数组,用'0'来初始化mine数组,用'*'来初始化show数组InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//展示数组//DisplayBoard(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//在mine数组种随机设置10个雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}
void test()
{srand((unsigned int)time(NULL));int input = 0;do{menu();//上来先打印游戏菜单printf("请输入对应游戏选项的数字\n");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;
}

                                           game.c 

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
//初始化数组
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){arr[i][j] = set;}}
}
//展示数组
void DisplayBoard(char arr[ROWS][COLS], int row, int col)
{int i = 0;printf("-----开始扫雷-----\n");for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){int j = 0;printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",arr[i][j]);}printf("\n");}
}
//设置雷
void SetMine(char arr[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int count = MINECOUNT;//雷的数量while (count){x = rand() % row + 1;//随机生成下标y = rand() % col + 1;if (arr[x][y] == '0'){arr[x][y] = '1';//用'1'来表示雷}count--;}
}
//排查周围雷的数量
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{int i = 0;int ret = 0;for (i = x - 1; i <= x + 1; i++){int j = 0;for (j = y - 1; j <= y + 1; j++){ret += (mine[i][j] - '0');}}return ret;
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int count = row * col - MINECOUNT;int x = 0;int y = 0;int ret = 0;while (ret<count){printf("请输入要排查坐标的数字\n");scanf("%d%*c%d", &x, &y);if (show[x][y] == '*'){if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int ret=GetMineCount(mine, x, y);show[x][y] = ret + '0';DisplayBoard(show, ROW, COL);}}else{printf("该坐标已经被排查,请重新输入坐标\n");}ret++;}if (ret == count){printf("恭喜你,扫雷成功\n");DisplayBoard(mine, ROW, COL);}	
}

四:谢谢观看 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244508.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

Java 数据结构集合

文章目录 Java 数据结构1. 基本数据结构1.1 数组 (Array)1.2 链表 (Linked List)1.3 栈 (Stack)1.4 队列 (Queue)双向队列优先级队列 2. 树形数据结构2.1 二叉树 (Binary Tree)2.2 堆 (Heap) 3. 散列数据结构3.1 哈希表 (Hash Map)3.2 LinkedHashMap3.3 TreeMapConcurrentHashM…

【python文件】生成的csv文件没两行数据之间有一个空行

问题描述 用python代码将数据写入csv文件&#xff0c;但生成的csv文件没两行数据之间有一个空行&#xff0c;如下图所示&#xff1a; 解决办法 在open函数中添加newline&#xff0c;如以下代码所示&#xff0c;即可解决这一问题。 with open(r"C:\Users\xxx\Desktop\DR…

Linux的奇妙冒险———vim的用法和本地配置

vim的用法和本地配置 一.vim的组成和功能。1.什么是vim2.vim的多种模式 二.文本编辑&#xff08;普通模式&#xff09;的快捷使用1.快速复制&#xff0c;粘贴&#xff0c;剪切。2.撤销&#xff0c;返回上一步操作3.光标的控制4.文本快捷变换5.批量化操作和注释 三.底行模式四.v…

【征服Redis12】redis的主从复制问题

从现在开始&#xff0c;我们来讨论redis集群的问题&#xff0c;在前面我们介绍了RDB和AOF两种同步机制&#xff0c;那你是否考虑过这两个机制有什么用呢&#xff1f;其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统&#xff0c;广泛应用于Web应用…

服务器感染了.wis[[Rast@airmail.cc]].wis勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 在当今数字化的时代&#xff0c;恶意软件攻击已经变得越来越复杂和狡猾&#xff0c;[[MyFilewaifu.club]].wis [[backupwaifu.club]].wis[[Rastairmail.cc]].wis勒索病毒是其中的一种新威胁。本文91数据恢复将深入介绍[[MyFilewaifu.club]].wis [[backupwaif…

Dify学习笔记-基础介绍(一)

1、简介 Dify AI是一款强大的LLMOps&#xff08;Language Model Operations&#xff09;平台&#xff0c;专为用户提供便捷的人工智能应用程序开发体验。 该平台支持GPT系列模型和其他模型&#xff0c;适用于各种团队&#xff0c;无论是用于内部还是外部的AI应用程序开发。 它…

基于springboot+vue的美容院管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

JAVA用Zxing生成的二维码扫码桩识别出现\000026

使用Zxing生成的二维码&#xff0c;扫码桩扫描偶先扫描出\000026 文章目录 [TOC](文章目录) 前言一、出现原因分析二、解决方式三、iso ECI 字符集编码说明 前言 Hutool QrCodeUtil&#xff08;底层Zxing&#xff09; 生成二维码扫码桩扫描二维码 出现类似&#xff1a;"\…

react18介绍

改进已有属性&#xff0c;如自动批量处理【setState】、改进Suspense、组件返回undefined不再报错等 支持Concurrent模式&#xff0c;带来新的API&#xff0c;如useTransition、useDeferredValue等 如何升级React 18 npm install reactlatest react-domlatestnpm install ty…

python pip安装包时,出现 WARNING: Ignoring invalid distributio xxxx,解决办法

pip安装包时&#xff0c;出现 WARNING: Ignoring invalid distributio xxxx&#xff0c;解决办法 遇到的问题&#xff0c;如图 这个问题其实就是python环境下的包无效了&#xff0c;找到WARNING: Ignoring invalid distributio xxxx后面对应的路径&#xff0c;删除对应的~XXXX…

Android开发--状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

TortoiseSVN源码安装与迁移全攻略

一、前言 随着版本控制系统的普及&#xff0c;越来越多的开发者和团队开始使用SVN&#xff08;Subversion&#xff09;来管理代码。本文将详细介绍TortoiseSVN的源码安装及迁移过程&#xff0c;帮助您轻松掌握这一版本控制工具。 二、TortoiseSVN源码安装 依赖环境安装&…

Window安装Python和开发Pycharm

准备&#xff1a; 1&#xff1a;安装Python环境 https://www.python.org/downloads/windows/ 2: 下载Pycharm https://www.jetbrains.com/pycharm/download/other.html

快速排序

快速排序 概况步骤代码示例输出结果 要想学习快速排序&#xff0c;前提必须了解 递归算法 概况 快速排序是一种高效的排序算法&#xff0c;它采用了分治的策略。 基本思想是选择一个基准数&#xff0c;通过一趟排序将待排序序列划分成两个子序列&#xff0c;其中一个子序列的…

乔迁新居发言

亲爱的家人们&#xff0c;大家好&#xff01; 非常感谢大家在百忙之中抽出宝贵的时间来到这里为我们的新居增添福气。我代表我和田小帆对大家的到来表示热烈的欢迎和衷心的感谢。 在这个特殊的时刻&#xff0c;我对我们小家庭建设过程中帮助我们的所有亲人、朋友和同学们表示由…

大模型实战营Day6 笔记

本期主题为&#xff1a; 为何测评&#xff0c;因场景众多&#xff0c;需要统一的标准&#xff1a; 评测的意义&#xff1a; 传统NLP的一些评测需要&#xff1a; 到了大模型时代&#xff0c;需要评测的就更多了&#xff1a; 客观评测&#xff1a; 有些主观题可以用模型评价…

Shell脚本的条件语句-------if语句与case语句

目录 一、if语句 1、bash的配置文件 2、单分支结构 3、双分支结构 4、多分支结构 ①单分支应用举例&#xff1a;写一个脚本检查80端口是否开启&#xff0c;如果开启则反馈http正在运行&#xff0c;否则启动httpd服务 ②多分支应用例子&#xff1a;90-100 是优秀 70-89…

FlinkAPI开发之状态管理

案例用到的测试数据请参考文章&#xff1a; Flink自定义Source模拟数据流 原文链接&#xff1a;https://blog.csdn.net/m0_52606060/article/details/135436048 Flink中的状态 概述 有状态的算子 状态的分类 托管状态&#xff08;Managed State&#xff09;和原始状态&…

springboot123基于springboot框架的网上商城系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于springboot框架的网上商城系统的设计与实现 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看…