扫雷

相信大家都有玩过一个游戏,那就是扫雷,今天我就给大家分享一个扫雷的c程序。

#pragma once
#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11
#define EASY 10
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu();
void game();
void init(char a[ROWS][COLS], int row, int col);
void show(char a[ROWS][COLS], int row, int col);
void set(char a[ROWS][COLS], int row, int col);
void win(char a[ROWS][COLS], char b[ROWS][COLS], int rows, int cols);
void add(char a[ROWS][COLS], char b[ROWS][COLS], int i, int j);

这个是程序的头文件test.h,主要是包含源程序所需要使用的头文件和函数声明。

#define _CRT_SECURE_NO_WARNINGS 1
#include "test.h"
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do 
	{
		menu();
		printf("请输入你的选择:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新选择:\n");
		}
	} while (input);
	return 0;
}

源程序play.c,menu函数打印一个菜单,让玩家选择玩不玩游戏,通过switch语句来执行。

#define _CRT_SECURE_NO_WARNINGS 1
#include "test.h"
void menu()
{
	printf("************************\n");
	printf("****     1.play     ****\n");
	printf("****     0.exit     ****\n");
	printf("************************\n");
}
void init(char a[ROWS][COLS],int row,int col)
{
	int i, j;
	for (i = 1; i <= row; i++)
	{
		for (j = 1; j <= col; j++)
		{
			a[i][j] = '*';
		}
	}
}
void show(char a[ROWS][COLS], int row, int col)
{
	int i, j;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", a[i][j]);
		}
		printf("\n");
	}
}
void set(char a[ROWS][COLS], int row, int col)
{
	int i, j, n = EASY;
	while(n)
	{
		i = rand() % 9 + 1;
		j = rand() % 9 + 1;
		if (a[i][j] == '0' && a[i][j] != '1')
		{
			a[i][j] = '1';
			n--;
		}
	}
}
void add(char a[ROWS][COLS], char b[ROWS][COLS], int i, int j)
{
	int m, n;
	char x = 0;
	if (a[i][j] != ' ')
	{
		a[i][j] = ' ';
		for (m = i - 1; m <= i + 1; m++)
		{
			for (n = j - 1; n <= j + 1; n++)
			{
				{
					if (a[m][n] != ' ') 
					{
						x = x + (a[m][n] - '0');
					}
				}
			}
		}
		x = x + 48;
		if (x != '0')
		{
			b[i][j] = x;
		}
		if (x == '0')
		{
			for (m = i - 1; m <= i + 1; m++)
			{
				for (n = j - 1; n <= j + 1; n++)
				{
					if (b[m][n] == '*')
					{
						b[m][n] = '0';
						add(a, b, m, n);
					}
				}
			}
		}
	}
	}
void win(char a[ROWS][COLS], char b[ROWS][COLS], int rows, int cols)
{
	int i = 0;
	int j = 0;
	int count = 0;
	while (1)
	{
		printf("请输入你要走的位置:\n");
		scanf("%d%d", &i, &j);
		if (i >= 0 && i <= 9 && j >= 0 && j <= 9 && b[i][j] == '*') 
		{
			if (a[i][j] == '0')
			{
				add(a, b, i, j);
				show(b, ROW, COL);
				for (i = 1; i <= ROW; i++)
				{
					for (j = 1; j <= COL; j++)
					{
						if (b[i][j] != '*')
						{
							count++;
						}
					}
				}
				if (count == (81 - EASY))
				{
					printf("恭喜你,排雷成功。\n"); break;
				}
			}
			else
			{
				printf("很遗憾你被炸死了。\n");
				show(a, ROW, COL);
				break;
			}
		}
		else
		{
			printf("输入错误,请重新输入:\n");
		}
	}
}
void game()
{
	int i, j;
	char a[ROWS][COLS] = { 0 };
	char b[ROWS][COLS] = { 0 };
	for (i = 0; i < ROWS; i++)
	{
		for (j = 0; j < COLS; j++)
		{
			a[i][j] = '0';
		}
	}
	init(b, ROW, COL);
	show(b, ROW, COL);
	set(a, ROW, COL);
	win(a, b, ROWS, COLS);
}

源程序game.c,实现游戏的主要程序。

首先对a和b两个数组进行初始化,a数组里全放‘0’,b全放‘*’,a数组就是我们用来放置雷的数组,b数组用于玩家的展示。

set函数实现对a数组进行随机放置雷。

win函数用于判断玩家是否踩到雷,如果没有踩到雷,就将b数组那一步显示,并且返回周围有几个雷,用show函数展示出来。

win函数中的add函数用于b数组的展开,如果玩家选的那一步周围没有雷就会显示周围的数据,递归调用add是为了大部分的展开b数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值