用c语言写扫雷游戏

前言:

今天我们讲的扫雷游戏,在此过程中,我们会经常提两个字,纵横

接下来,正片开始

在开始讲解扫雷游戏之前,我们先来思考一个问题:我们之前的代码是不是都是写在一个源文件里面?那么这次我将换个方式讲解一下扫雷游戏,此后我也会尝试一下以多文件的方式写猜数字游戏。

首先还是之前我们在猜数字游戏里使用过的程序 

void menu()
{
    printf("******************************\n");
    printf("********* 1.开始游戏 *********\n");
    printf("********* 0.退出游戏 *********\n");
    printf("******************************\n");
}

void game()
{
    char mine[ROWS][COLS] = { 0 };//(初始化)答案盘的纵横
    char show[ROWS][COLS] = { '*'};//(初始化)题目盘的纵横

补充:1.上面两个数组中中括号内的参数需要在game.h这个头文件中用#define去定义纵横数量

           2.在主函数所在的文件中写上#include“game.h”,否则,程序依然会报错喔

什么?你不知道为什么这个头文件要用引号而不是<>?,没事,那我开个小灶,给你讲一下吧。

首先我们要知道stdio.h并不是我们自己创造的,换句话说,它是前辈们总结出来的一个头文件,我们只是站在前辈们的肩膀上做程序而已,所以以表尊重,我们统一使用<>,而game.h是我们自己临时创造出来的,所以用“”。


    Initboard(mine, ROWS, COLS,'0');//初始化答案盘    

     Initboard(show, ROWS, COLS,'*');//初始化题目盘,棋盘有纵横,初始化时,函数的参数有数组名、行、列以及初始化的符号
    SetMine(mine, ROWS, COLS);//在答案页在埋雷
    display(mine, ROWS, COLS );//打印答案盘
    display(show, ROWS, COLS );//打印题目盘
    //SetMine(mine,ROWS,COLS);
    FindMine(mine, show, ROWS, COLS);//排雷时,计算机需要将题目盘与答案盘进行对照
}

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

int main()
{
    test();
    return 0;

这次的代码看上去会与上一次猜数字的有所不同,但实践上是一样的,只是这次的代码进行了多次函数调用

补充:void broad这个函数中少了个形参——char put,用于存放先前的‘0’和‘*' 

注意:使用了荧光笔涂色的是需要大家注意的

也许有小伙伴会问,为什么是ROWS    ROW+2,其实这样设计可以防止在排查第九行雷出现错误,那么同理列也是一样的道理

那么game.h呢差不多就是写一些头文件,以及传输从test.c的文件中的一些函数,如果不太理解的朋友可以把它理解为中转站

那么接下来,我们就要用鬼谷纵横术来写最后的代码了

小提醒:我们虽然在game.c这个文件中输入了很多头文件,但是这是个全新的文件,因此要将之前的文件名做成头文件的形式放进该文件

 注意:set对应的形参也就是上面我补充的put形参

 之所以是%2d并且空格,是为了方便对齐

如图 

 

 因为当我们输入坐标后,坐标周围一圈需要被展示,所以如图

 

 然后是循环和判断

那么我们来总结一下思路: 首先和上次的猜数字游戏一样的模板不变,那么我们要从本次代码中要学会的内容:

1. 

#define ROW 9
#define COL 9
#pragma
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10

以上的则是要记住的,可能一时半会不理解,等我们的道行更深的时候就会了解

2.制作游戏是时要学会多文件思想,有助于我们在编写程序的时候思路清晰 

3.自己设置的头文件要用“”而不是<>

4.理解扫雷游戏的制作思路:初始化棋盘、打印棋盘、埋雷、排雷以及每一步骤中容易出错的部分。

那么今天已是正月初九了,各位大学生也快开学了,祝大家在新的一年里心想事成

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

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

相关文章

提升企业竞争力:精益生产培训简介——张驰咨询

精益生产&#xff08;Lean Production&#xff09;是一种管理哲学&#xff0c;最早源于日本丰田汽车公司的丰田生产系统&#xff08;Toyota Production System,TPS&#xff09;。这套理念的核心在于最大程度地减少生产过程中的浪费&#xff0c;同时保证产品质量&#xff0c;通过…

sora的理解

1、背景 近期, openai紧跟Runway、 Google、Meta等公司, 发布了视频生成模型Sora, 全面进军视频领域。官网的视频效果炸裂&#xff0c;连贯性优秀&#xff0c;生成视频时长可达60秒&#xff0c;但模拟复杂物理场景仍有瑕疵。相对Pika、Runway的效果还是有进一步提升。考虑到这…

2024年首发!高级界面控件Kendo UI全新发布2024 Q1

Kendo UI是带有jQuery、Angular、React和Vue库的JavaScript UI组件的最终集合&#xff0c;无论选择哪种JavaScript框架&#xff0c;都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件&#xff0c;Kendo UI可以创建数据丰富的桌面、平板和移动Web应用程序。通过响应…

AI界一夜变天

没有丝毫预热和剧透&#xff0c;Open AI深夜直接丢下核弹炸了街&#xff0c;从业者深感要变天。 2月16日凌晨&#xff0c;Open AI发布了首个“文生视频”模型Sora。官方介绍&#xff0c;Sora能根据文字指令创造出包含丰富细节的逼真场景、角色&#xff0c;且能用多角度镜头&am…

爬虫工作量由小到大的思维转变---<第四十七章 Scrapy 随机请求头(补)>

前言: 之前漏了一篇关于随机请求头的文章,现在补上; 日后,大家伙遇到请求头问题,直接拿就是了!! 正文: 在Scrapy中&#xff0c;使用随机请求头是一种常见的反爬虫策略&#xff0c;可以帮助你的爬虫模拟不同用户的请求&#xff0c;以降低被目标网站识别和封锁的风险。要在Sc…

Python print函数

在Python编程中&#xff0c;print()函数是一个非常基础但也非常重要的函数&#xff0c;用于将文本或其他对象输出到控制台或文件中。本文将深入探讨Python中的print()函数&#xff0c;包括基本用法、格式化输出、输出重定向、实际应用场景&#xff0c;并提供丰富的示例代码来帮…

探索前端框架的世界:一场前端之旅

在网络世界中&#xff0c;网页开发领域的一颗明星是前端框架。这些框架为开发者提供了丰富的工具和技术&#xff0c;帮助他们构建出漂亮、高效的网页应用。现在&#xff0c;让我们随着小明的故事一起来探索一下吧。 小明的梦想 小明是一位年轻有为的前端开发者&#xff0c;他…

栈的应用(表达式求值)C++(Acwing)

代码&#xff1a; #include <iostream> #include <cstring> #include <algorithm> #include <stack> #include <unordered_map>using namespace std;stack<int> num; stack<char> op;void eval()//求值 {auto b num.top(); num.po…

mysql3.7之触发器

1.触发器的定义 触发器是由事件来触发某个操作&#xff0c;这些事件包括INSERT、UPDATE、DELETE事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序&#xff0c;当数据库执行这些语句时候&#xff0c;就相当于事件发生了&#xff0c;就会自动激发触发器执行…

echarts图表中的基本设置参数

取消显示坐标值 axisLabel: { show: false} 取消坐标轴刻度线 axisTick: { show: false} 取消网格线 splitLine: { show: false } 去除y轴的线 //写在yAxis里面 axisLine:{show:false},axisTick:{show:false},去除y轴轴线&#xff08;背景线&#xff09; splitLine…

阿里云香港服务器是cn2线路吗?

阿里云服务器是CN2线路吗&#xff1f;云服务器BGP多线精品网络线路是cn2&#xff0c;香港轻量应用服务器不是cn2。 如何测试是不是中国电信cn2网络线路&#xff1f;可以本地公网 mtr 该公网IP地址看下是否走的CN2线路&#xff1a; 163骨干网出国的最后一跳IP开头是202.97CN2 …

java生成pdf

1.pdf预览 2.maven <!--pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version></dependency><dependency><groupId>com.itextpdf</groupId>…

day33打卡

day33打卡 1005. K 次取反后最大化的数组和 解法&#xff0c;贪心&#xff1a;局部最优&#xff1a;让绝对值大的负数变为正数&#xff0c;当前数值达到最大-》整体最优&#xff1a;整个数组和达到最大。 class Solution {static bool cmp(int a, int b) {return abs(a) >…

51_蓝桥杯_数码管静态显示

一 电路 二 数码管静态显示工作原理 三 代码 代码1 实现第一个数码管显示数字6的功能 #include "reg52.h"unsigned char code SMG_Duanma[18] {0xc0,0xf9.0xa4,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f};void Delay(unsignde int t) {wh…

001:自动驾驶概述

摘要&#xff1a;本文介绍国内外自动驾驶的发展历程及现状、汽车制造商、技术公司、传感器制造商、芯片制造商、地图供应商、软件开发商以及汽车零部件供应商。 国 外 一、发展历程及现状 起步阶段&#xff08;1990年-2005年&#xff09;&#xff1a;在这个阶段&#xff0c;自…

创建Maven项目

目录 创建新项目配置Maven配置资源地址下载资源 测试代码 创建新项目 创建一个新项目。 创建包&#xff0c;选择Maven&#xff0c;JDK选择1.8 。 点击创建。 创建完成。 配置Maven 点击设置图标&#xff0c;点击Settings. 搜索maven&#xff0c;点击Builde&#xff0c;…

【STM32 CubeMX】GPIO_HAL库源码分析

文章目录 前言一、GPIO_HAL库源码分析1.1 初始化GPIO1.2 HAL_GPIO_Init源码分析GPIO_InitTypeDef初始化结构体HAL_GPIO_Init函数 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技…

05.QT坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角&#xff0c;X向右增长&#xff0c;Y向下增长。 2.设置控件位置 设置控件位置&#xff0c;就相当于是需要指定控件的坐标&#xff0c;对于该控件来说&#xff0c;其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好&#xff0c;我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号&#xff0c;离现在已经13天了。非常抱歉&#xff0c;中间隔了那么久。一方面是基础知识学完之后&#xff0c;就要开始自己写代码了。看基础知识和写代码是两回事&#xff0c;理论和实践的…

BUGKU-WEB 变量1

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; flag In the variable !<?php error_reporting(0); include "flag1.php"; highlight_file(__file__); if(isset($_GET[args])){$args $_GET[args];if(!preg_match("/^\w$/",$args…