news 2026/3/12 15:59:21

作业:简易版扫雷的设计讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
作业:简易版扫雷的设计讲解

不同于以前简短的练习作业,即使是简易版扫雷的代码结构,也需要做好规划文件的分装

创建了三个文件

分别是一个头文件->function.h

与两个源文件mainpart.cfunction.c

mainpart中含有主函数,主要负责的是设置随机数种子和使用do-while来构成程序的外层运行框架

随后在用户输入选项之后进入相应的操作

进入开始阶段->

1创建相应数组2初始化数组3设置雷

进入扫雷阶段

1用户输入的值2找到对应的元素计算周围的雷数并放置这个数字字符在对应位置

3累计扫雷成功的次数(没被炸死的次数),到达对应数量时跳出扫雷循环(胜利),或者被炸死

其他事项

1注意用户输入的元素不是对应的下标2使用一维数组指针接受二维数组来提升代码的扩展性

代码如下

//function.c

#pragma once

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>
#define height1 9
#define width1 9

void init_board(char*, int, int,char);
void set_mine(char*, int, int);
void print_board(char*, int, int);
void get_mine_count(char*, char*, int, int, int, int);

//function.c


#include "function.h"

void init_board(char* board, int height, int width,char n)
{
for (int i = 0;i < height;i++)
{
for (int j = 0;j < width;j++)
{
*(board+i*width+j) = n;
}

}

}

void set_mine(char* board, int height, int width)
{
int n = 10;
while (n)
{
int x = rand() % 9 + 1;
int y = rand() % 9 + 1;
if (*(board + (x-1) * width + y-1) != '1')
{
*(board + (x-1) * width + y-1) = '1';
}
else
{
continue;
}
n--;
}

}

void print_board(char* board, int height, int width)
{
for (int a = 0; a <= width;a++)
{
printf("%d ", a);

}
printf("\n");
for (int i = 0;i < height;i++)
{
printf("%d ", i+1);
for (int j = 0;j < width;j++)
{

printf("%c ", *(board + i * width + j));

}
printf("\n");
}
printf("\n");
}

void get_mine_count(char* board, char* show_board,int height, int width, int x, int y)
{
int count = 0;
int nx, ny;
for (nx = -1;nx <= 1; nx++)
{
for (ny = -1;ny <= 1;ny++)
{
if (x - 1 + nx >= 0 && x - 1 + nx <9 && y - 1 + ny >= 0 && y - 1 + ny <9)
{
if (*(board + (x-1 + nx) * width + (y-1 + ny)) == '1')
count++;

}

}
}
*(show_board + (x -1) * width + y -1) = (count+'0');

}

//mainpart.c

#define _CRT_SECURE_NO_WARNINGS

#include "function.h"

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

void game()
{

char mine_board[height1][width1];
char show_board[height1][width1];
init_board((char*)mine_board, height1, width1, '0');
init_board((char*)show_board, height1, width1, '*');
set_mine((char*)mine_board, height1, width1);
printf("输入-1 -1直接退出\n");
int win = 0;
while (1)
{
//#################
//print_board((char*)mine_board,height1,width1);
print_board((char*)show_board,height1,width1);
printf("请输入坐标,例如 a b 代表第a行的第b个位置\n");
int a, b;


scanf("%d %d", &a, &b);
if (a == -1 && b == -1)
{
printf("中途退出\n");
break;
}
if (a < 1 || a > 9 || b < 1 || b > 9)
{
printf("数值不在可输入范围\n");
continue;
}
else if (*((char*)mine_board + (a - 1) * width1 + (b - 1)) == '1')
{
printf("很遗憾,你被炸死了\n");
Sleep(300);
break;
}
else if (*((char*)show_board + (a - 1) * width1 + (b - 1)) != '*')
{
printf("该位置已被扫过\n");
continue;

}
else if (a >= 1 && a <= 9 && b >= 1 && b <= 9)
get_mine_count((char*)mine_board, (char*)show_board, height1, width1, a, b);
else
{
printf("数值错误\n");
break;
}


win++;
if (win == height1 * width1 - 10)
{
printf("恭喜你,你赢了\n");
Sleep(300);
break;
}

}
return;
}
int main()
{
int a = 0;
srand((unsigned int)time(NULL));
do
{
menu();
scanf("%d" ,&a);
switch (a)
{
case 1:
game();
break;
case 0:
{
printf("正在退出\n");
Sleep(750);
printf("已退出本次游玩\n");
return 0;
}
default:
printf("输入错误,请重新输入\n");
}

}
while (1);
return 0;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 3:58:23

企业级Oracle RAC集群实战安装指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Oracle RAC集群部署模拟器&#xff0c;模拟2节点RAC环境的安装过程。要求&#xff1a;1) 可视化展示共享存储配置(ASM) 2) 网络拓扑图展示(public/private网络) 3) 分步演示…

作者头像 李华
网站建设 2026/3/11 15:32:28

三分钟构建智能AI集群:Exo资源配额自动分配全解析

三分钟构建智能AI集群&#xff1a;Exo资源配额自动分配全解析 【免费下载链接】exo Run your own AI cluster at home with everyday devices &#x1f4f1;&#x1f4bb; &#x1f5a5;️⌚ 项目地址: https://gitcode.com/GitHub_Trending/exo8/exo 还在为家中闲置设备…

作者头像 李华
网站建设 2026/3/12 23:25:37

国产出图神器!行政边界一键填充配色、秒出专业图,附完整教程

告别繁琐&#xff0c;三步出图&#xff01;从加载数据、自定义配色到添加指北针、比例尺等专业元素&#xff0c;Bigemap Pro助你轻松完成一张规范、美观的行政边界图。支持直接打印&#xff0c;或导出高清PDF无缝嵌入汇报PPT。一、行政边界图制作全流程详解 1. 数据加载与边界提…

作者头像 李华
网站建设 2026/3/5 17:28:03

测试精粹:资深专家的十项实战心法

测试专家的价值与时代意义 在数字化浪潮席卷全球的今天&#xff0c;软件质量已成为企业竞争力的核心要素。作为软件测试从业者&#xff0c;我们不仅是缺陷的发现者&#xff0c;更是质量文化的推动者。测试专家通过多年的项目历练&#xff0c;总结出宝贵的经验教训&#xff0c;…

作者头像 李华
网站建设 2026/3/12 22:06:51

完整指南:用Figma-Context-MCP实现AI助手与设计稿的智能对话

完整指南&#xff1a;用Figma-Context-MCP实现AI助手与设计稿的智能对话 【免费下载链接】Figma-Context-MCP MCP server to provide Figma layout information to AI coding agents like Cursor 项目地址: https://gitcode.com/gh_mirrors/fi/Figma-Context-MCP 想要让…

作者头像 李华
网站建设 2026/3/12 23:32:00

AI 正在“吃光内存”,NVIDIA与SK海力士把目光投向了 NAND

继大规模蚕食DRAM市场后&#xff0c;英伟达与SK海力士计划推出性能提升近10倍的"AI SSD"&#xff0c;引发NAND供应警报。随着AI产业重心从训练转向推理&#xff0c;技术栈需全面升级以构建低延迟、高吞吐环境&#xff0c;行业正聚焦通过NAND芯片打造推理优化的AI存储…

作者头像 李华