首页 > 其他分享 >扫雷游戏的实现

扫雷游戏的实现

时间:2024-12-08 21:57:32浏览次数:4  
标签:ROWS 游戏 实现 void COLS char int 扫雷 printf

怎么说呢,扫雷游戏已经是我的二次学习了,第一次没学会,到第二次的昏昏欲睡,结果当然是没有学会,我还是决定熟悉它并学会它。

首先是游戏进入一定要有一个进入界面功能进行选择,do-while循环就十分合适,可以进入也可以退出,进入游戏应有一个扫雷的打印,我们先要对二维数组进行初始化,后对两数组进行赋值,在打印,为了使模版更易观察,我们可以在行列加上序号,以便识别,在就是对其埋雷了,又一次用到了time函数,提供随机值,使雷随机分布,最后就是找雷了,我们可以输入行与列,判断是否有雷,一个关键点就是判断该点周围有多少个雷,并用字符表示,需要我们再写一个函数来计算周边雷的个数,最后根据找出不是雷的个数判断是否获胜。我还是存在一些问题如栈溢出,错误多,改不完等情况。所以革命尚未成功,同志们仍需努力。

game.h;

#pragma once
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
//定义
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);

void DisplayBoard(char board[ROWS][COLS], int row, int col);

void SetMine(char board[ROWS][COLS], int row, int col);

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row,int col);

再是gmae.c

#define _CRT_SECURE_NO_WARNINGS  1

#include "game.h"
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("-----扫雷游戏-----\n");
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

void SetMine(char board[ROWS][COLS], int row, int col)
{
	int count = EASY_COUNT;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}

static int get_mine_count(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 FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while (win < col*row- EASY_COUNT)
	{
		printf("请输入你要排查的坐标:");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,被炸死了\n");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else 
			{
				//这个坐标是否被排查过
				if (show[x][y] == '*')
				{
					//1. 统计这个坐标周围有几个雷
					int count = get_mine_count(mine, x, y);
					//2. 存储到show数组
					show[x][y] = count + '0';
					DisplayBoard(show, ROW, COL);
					win++;
				}
				else
				{
					printf("该坐标被排查过,不能重新排查\n");
				}
			}
		}
		else
		{
			printf("坐标非法,重新输入\n");
		}
	}
	if (win == col * row - EASY_COUNT)
	{
		printf("恭喜你,排雷成功\n");
		DisplayBoard(mine, ROW, COL);
	}
}

test.c

#include"game.h"
#define  _CRT_SECURE_NO_WARNINGS 
void game()
{
	//埋雷数组
	char mine[ROWS][COLS] = { 0 };
	//展示数组
	char show[ROWS][COLS] = { 0 };
	//初始化数组
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印棋盘
	//DisplayBoard(mine, ROW, COL);//只打印中间的9行9列
	//DisplayBoard(show, ROW, COL);//只打印中间的9行9列
	//埋雷
	SetMine(mine, ROW, COL);
	//展示
	DisplayBoard(show, ROW, COL);
	//找雷
	FindMine(mine, show, ROW, COL);
}
void nemu()
{
	printf("*******************************\n");
	printf("*******************************\n");
	printf("********** 1. 进入游戏 ********\n");
	printf("********** 0. 退出游戏 ********\n");
	printf("*******************************\n");
	printf("*******************************\n");
}

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

标签:ROWS,游戏,实现,void,COLS,char,int,扫雷,printf
From: https://blog.csdn.net/2401_87532536/article/details/144332215

相关文章

  • 用CAS思想实现一个自旋锁
    publicclassSpinLockDemo{//原子引用线程AtomicReference<Thread>atomicReference=newAtomicReference<>();publicvoidmyLock(){Threadthread=Thread.currentThread();System.out.println(thread.getName()+"\t......
  • 影刀RPA实现图片批量生成,效率翻倍!
    引言影刀RPA是一种先进的自动化技术,它通过模拟人类用户的操作来执行重复性任务。影刀RPA以其易用性、灵活性和高效率著称,特别适合于处理需要大量重复操作的图片生成工作。在数字化时代,图片处理需求日益增长,影刀RPA的应用可以显著提高图片批量生成的效率,减少人力成本,实现效率......
  • Java毕设项目案例实战II基于Java+Spring Boot+MySQL的玩具租赁系统设计与实现(开发文档
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在环保意识日益增强的今天,玩具租赁作为一种绿色、经济的消费方式,逐渐受到家长和孩......
  • java + mysql + 38_在线网络教学平台的设计与实现 +(完整源码 + 说明文档 + 演示视频)
     ......
  • 二叉树的C++实现
    文章目录一、二叉树存储的物理结构1.1二叉树基础知识1.2二叉树的存储1.2.1单个节点的存储:1.2.2二叉树的存储二、C++代码实现2.1每个二叉树节点结构体:2.2二叉树类的定义2.3方法实现一、二叉树存储的物理结构1.1二叉树基础知识(1)二叉树的定义:每个节点最多......
  • springboot毕设基于Java的大学生电子产品维修系统的设计与实现源码+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着电子产品在大学生群体中的广泛使用,其维修需求也日益增长。大学生作为电子产品的庞大消费群体,他们对电子产品的依赖程度很高,从手机、电脑到各......
  • Nodejs实现的社区居民互助系统的设计与实现-车位房子租赁
    《[含文档+PPT+源码等]精品Nodejs实现的社区居民互助系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:操作系统:Wind......
  • 初识C语言之猜数字游戏
    一.猜数字游戏的本质猜数字游戏本质就是生成随机数,然后进行猜数字,最后判断正误,决定是否需要继续猜数字。二.生成随机数1.rand函数①rand函数会返回一个伪随机值,范围是0-32767②代码实现:printf("%d",rand());如上方代码,会生成伪随机数。③但是这个随机数不是真正的随机......
  • 实现验证码登录 -2024/12/8
    预览:前端代码让图片src=产生验证码图片的servletservlet代码publicvoidcheckCode(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{ServletOutputStreamos=response.getOutputStream();StringcheckCode=Check......
  • 基于SpringBoot的校园志愿者管理系统的设计与实现
    1.1 研究背景科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机信息不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以创新的视角去不断方便人们的生活,推动对新知识的学习,培养自学能力,锻炼动手实......