news 2026/8/7 22:18:14

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

作者头像

张小明

前端开发工程师

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/8/7 11:54:51

用NATS+AI快速构建物联网数据采集原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个物联网数据采集系统原型&#xff0c;使用NATS处理设备上报的传感器数据。要求实现设备注册、数据收集、实时监控和异常报警功能。前端使用Vue.js展示实时数据仪表盘&#x…

作者头像 李华
网站建设 2026/8/7 11:33:03

Excel格式转换异常?新手必看的5分钟解决指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的交互式Excel格式转换教学应用。通过分步引导的方式&#xff1a;1) 展示常见格式错误现象 2) 解释exceltype参数的含义 3) 提供可视化参数选择器 4) 实时预览转…

作者头像 李华
网站建设 2026/8/5 7:20:21

【智能聊天助手部署教程 (基于 Streamlit + Ollama)】

&#x1f680; 智能聊天助手部署教程 (基于 Streamlit Ollama) 文章目录 &#x1f680; 智能聊天助手部署教程 (基于 Streamlit Ollama)✅ 1. 环境准备 (Prerequisites)&#x1f4e5; 2. 获取项目代码&#x1f6e0;️ 3. 安装依赖 (Dependencies)⚙️ 4. 配置文件设置 (Confi…

作者头像 李华
网站建设 2026/8/7 22:12:09

守护代码世界的守门人——软件测试团队心理健康白皮书

看不见的质量防线与看得见的心理负荷 在数字化浪潮席卷全球的2025年&#xff0c;软件测试工程师作为产品质量的最终守门人&#xff0c;正面临着前所未有的心理挑战。他们既要保持极致的逻辑严谨性&#xff0c;又要承受来自项目周期、技术迭代和业务期望的多重压力。这道“看不…

作者头像 李华