当前位置: 首页 > article >正文

C语言最简单的扫雷实现(解析加原码)

头文件

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numlei 10

do while可以循环玩
两个板子,内板子放0,外板子放*
set函数初始化两个板子
lei函数,x,y随机两数,把内板子某些0改为1
print函数打印内或外板子
board返回周围8个格子雷的个数

#include "game.h"
void set(char arr[ROWS][COLS], int row, int col,char set)
{
	for (int i = 0;i < ROWS;i++)
	{
		for (int j = 0;j < COLS;j++)
		{
			arr[i][j] = set;
		}
	}
}
void lei(char arr[ROWS][COLS], int row, int col)
{
	int count = numlei;
	while (count)
	{
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (arr[x][y]=='0')
		{
			arr[x][y] = '1';
			count--;
		}
	}
}
void print(char arr[ROWS][COLS], int row, int col)
{
	for (int i=0;i<=row;i++)
	{
		printf("%d ",i);
	}
	printf("\n");
	for (int i = 1;i <= row;i++)
	{
		printf("%d ", i);
		for (int j = 1;j <= col;j++)
		{   
			printf("%c ", arr[i][j]);
		}
		printf("\n");
	}
}
int board(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 game()
{
	printf("********************\n");
	printf("**** 1.游戏开始 ****\n");
	printf("**** 0.退出游戏 ****\n");
	printf("********************\n");
	int input;
	char show[ROWS][COLS];
	char inside[ROWS][COLS];
	do
	{
		
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			set(show, ROW, COL, '*');
			print(show, ROW, COL);
			set(inside, ROW, COL, '0');
			lei(inside, ROW, COL);
			int win = 0;
			while (win<ROW*COL-numlei)
			{

				int x, y;
				scanf("%d %d", &x, &y);
				if (x >= 1 && y >= 1 && x <= ROW && y <= COL)
				{
					if (inside[x][y] == '1')
					{
						printf("你被炸了\n");
						print(inside, ROW, COL);
						break;
					}
					else
					{
						int c = board(inside, x, y);
						show[x][y] = c + '0';
						print(show, ROW, COL);
						win++;
					}
				}
				else
					printf("输入坐标错误,请重新输入\n");
			}
			if (win == ROW * COL - numlei)
			{
				printf("排雷成功\n");
				print(inside, ROW, COL);
			}
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("重新输入\n");
			break;
		}
	} while (input);
}

int main()
{   
	srand((unsigned) time(NULL));
	game();
	return 0;
}

http://www.kler.cn/a/393295.html

相关文章:

  • 详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
  • 【专题】计算机网络之网络层
  • 《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
  • 随手记:简单实现纯前端文件导出(XLSX)
  • ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结
  • 《DiffusionDet: Diffusion Model for Object Detection》ICCV2023
  • 各版本android studio下载地址
  • Vue slot 插槽 v-slot属性具名插槽
  • 足球社区管理系统 基于Spring Boot框架实现的足球社区管理系统(程序+数据库+报告)
  • 当kafka消费的数据滞后1000条时,打印告警信息
  • 在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程
  • 第23节 arkts 如何实现多语言
  • 蓝桥杯每日真题 - 第7天
  • 重构代码之移动字段
  • AutoSAR CP DoIP规范导读
  • 网页直播/点播播放器EasyPlayer.js无插件H5播放器关于其后地址不带协议后缀的判断逻辑
  • 方法论-利益驱动模型与系列选择模型(说服他人)
  • acwing算法基础02一高精度,前缀和,差分
  • 引入第三方jar包部署服务器后找不到jar处理方法
  • Ansible剧本检测Windows防火墙状态
  • Redis - 哨兵(Sentinel)
  • 【MySQL】summary
  • 传奇996_21——龙岭事件
  • 丹摩征文活动 |通过Pycharm复现命名实体识别模型--MECT模型
  • JS 实现SSE通讯和了解SSE通讯
  • AI大模型识别多人发音的实时语音交互理论研究