扫雷游戏草稿

博主为在校大学生,因为想写博客记录代码成神之路,但是现在假期在家打CS腾不出手,先放上草稿版

数组和函数实现:扫雷游戏

控制台程序

分为三个文件,

Text.c游戏测试 逻辑

Game.c逻辑实现

Game.h

包含头文件后可以直接使用宏常量

思路:不管写什么大的程序都从菜单先写起,两种情况继续玩或者退出

防止数组越界,可以直接扩大一圈

可以设置两个数组,一个存储信息,一个用来展示

数组可以用宏常量来定义

Game,c里面放函数主体

我们在实践的过程中慢慢去完善我们的函数

.h放函数声明,.c放函数实现

布置雷可以用srand函数,出横纵坐标的函数即可想布置几个就自己定义宏常量

如果显示无法写入exe文件,只需要关闭运行框即可

可以先减去字符0再加起来即可

菜单——思索展示和信息数组----初始化函数---打印棋盘----布置雷--- 排查雷

完善程序和函数

大范围排雷一次性

显示时间

可标记雷

代码书写部分及思路:

1.菜单函数List单纯打印

2.主要逻辑部分text函数

3.从text函数开始往上数为顺序

作者创建了三个文件,分别是一个头文件game.h和game.c,text.c

game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

#define rows 11
#define cols 11
#define row rows - 2
#define  col cols - 2
#define COUNT 10

void List()
{

	printf("****************\n");
	printf("****1.open  ****\n");
	printf("****0.exit  ****\n");
	printf("****************\n");
}

void SetArray(char array[rows][cols], char ch, int a, int b)//数组初始化
{
	int i = 0;
	int j = 0;
	for (i = 0; i < a; i++)
	{
		for (j = 0; j < b; j++)
		{
			array[i][j] = ch;
		}
	}

}
void ShowArray(char array[rows][cols], int r, int c)//打印数组
{
	int i = 0;
	int j = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= r; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= c; j++)
		{
			printf("%c ", array[i][j]);

		}
		printf("\n");
	}
}

void Setmine(char mine[rows][cols], int ROW, int COL)//设置雷
{

	int count = COUNT;
	while (count)
	{
		int x = rand() % ROW + 1;
		int y = rand() % COL + 1;
		if (mine[x][y] = '0')
		{
			mine[x][y] = '1';
			/*printf("x = %d,y = %d\n", x, y);*/
		}
		count--;
	}
}
int  Clmine(char mine[rows][cols], int x, int y)//获得雷的个数
{
	int i = 0;
	int j = 0;
	int minenum = 0;
	for (i = x - 1; i <= x + 1; i++)
	{
		for (j = y - 1; j <= y + 1; j++)
		{
			if (mine[x][y] == '1')
				minenum++;
		}
	}

	return minenum;
}
void Getmine(char mine[rows][cols], char show[rows][cols], int ROW, int COL)//排雷
{


	while (1)
	{
		int x = 0;
		int y = 0;
		int cc = 0;
		printf("请输入想排查的雷的坐标:\n");
		scanf("%d %d", &x, &y);
		if (x > 0 && x <= ROW && y > 0 && y <= COL)
		{
			if (mine[x][y] == '0')
			{

				cc = Clmine(mine, x, y);
				show[x][y] = '0' + cc;
				if (show[x][y] == '0')
				{

				}
				ShowArray(show, ROW, COL);
			}
			else
			{
				printf("踩到雷了,游戏结束\n");
				ShowArray(mine, row, col);
				break;
			}
		}
		else
		{
			printf("输入错误,请重新输入\n");

		}
	}

}

void Game()//游戏主体
{
	int i = 0;
	int x = 0;
	int y = 0;
	char mine[rows][cols] = { 0 };
	char show[rows][cols] = { 0 };
	SetArray(mine, '0', rows, cols);
	SetArray(show, '*', rows, cols);


	Setmine(mine, row, col);
	ShowArray(mine ,row, col);

	ShowArray(show, row, col);
	Getmine(mine, show, row, col);

}
void Text()
{

	int input = 0;
	do
	{
		List();
		printf("Please input you choice:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		{
			printf("扫雷游戏开始\n");
			Game();

		}
		break;

		case 0:
		{
			printf("Game over\n");
		}
		break;


		default:
			printf("Input error,please enter again\n");
			break;


		}
	} while (input);
}

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Text();

text.c

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include "game.h"



int main()
{

	srand((unsigned int)time(NULL));
	Text();

	return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值