扫雷小游戏

这次主要是记录自己写的扫雷C语言代码,因为是自己写的代码,其中存在很多不足,所以就做过多讲解,但是此代码还是能实现扫雷游戏的基本功能。

此扫雷为初级扫雷,9*9的格子,总共10个雷,包含一个头文件,两个源文件。 

1.这是game.头文件

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11

void initchar1(char board[ROW][COL], int row, int col);
void initchar2(char board[ROWS][COLS], int row, int col);
void install(char board[ROWS][COLS], int row, int col);
void printboard2(char board[ROWS][COLS], int row,int col);
void printboard1(char board[ROW][COL], int row, int col);
void playeract(char board1[ROW][COL],char board2[ROWS][COLS], int row, int col,int a,int b);

2.下面是两个源文件 

#include "game.h"

void game()
{
	char board1[ROW][COL];//游戏主棋盘
	char board2[ROWS][COLS];//放雷辅助棋盘
	initchar1(board1, ROW, COL);
	initchar2(board2, ROWS, COLS);//数组初始化
	install(board2, ROWS, COLS);//放雷
	printboard2(board2, ROWS, COLS);//BUG
	printboard1(board1, ROW, COL);
	printf("本局雷的个数为10\n");
	while (1)
	{
		printf("请输入坐标\n");
		int a , b , c , d ;
		int count = 0;
		scanf_s("%d%d", &a, &b);
		printf("你输入的坐标是(%d,%d)\n",a,b);//(行,列)
		playeract(board1,board2 ,ROW, COL,a,b);//玩家扫雷
		for (c = 0; c < ROW; c++)
		{
			for (d = 0; d < COL; d++)
			{
				if (board1[c][d] == '0')
					count++;
			}
		}
		if (count == 10)
		{
			printf("雷已排完,恭喜你,拯救了世界,获得胜利\n");
			break;
		}
		if (board2[a][b] == '*')
		{
			printf("很遗憾,你踩到雷了,游戏失败\n");
			break;
		}
	}
}

void menu()
{
	printf("**********************************\n");
	printf("**********    1.PLAY    **********\n");
	printf("**********    0.EXIT    **********\n");
	printf("**********************************\n");
}

void test()
{
	int input;
	do
	{
		srand((unsigned int)time(NULL));
		menu();
		printf("请选择\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 0:
		{
			printf("退出游戏\n");
			break;
		}
		case 1:
		{
			printf("即将进入游戏\n");
			game();
			break;
		}
		default:
		{
			printf("输入错误,请重新输入\n");
			break;
		}
		}
	} while (input);
}

int main()
{
	test();
	return 0;
}
#include "game.h"
void initchar1(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0;j < col; j++)
		{
			board[i][j] = '0';
		}
	}
}

void initchar2(char board[ROWS][COLS], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = '0';
		}
	}
}

void install(char board[ROWS][COLS], int row, int col)
{
	int count=0;
	do
	{
		int a = rand() % 9 + 1;
		int b = rand() % 9 + 1;
		if (board[a][b] == '0')
		{
			board[a][b] = '*';
			count++;
		}
	} while (count < 10);
}

void printboard1(char board[ROW][COL], int row, int col)
{
	int a, b;
	for (a = 0; a < row ; a++)
	{
		if (a == 0)
		{
			int c;
			for (c = 0; c <= row ; c++)
			{
				printf("%d ", c);
			}
			printf("\n");
		}
		for (b = 0; b < col ; b++)
		{
			if (b == 0)
			{
				printf("%d ", a+1);
			}
			printf("%c ", board[a][b]);
		}
		printf("\n");
	}
}

void printboard2(char board[ROWS][COLS], int row, int col)
{
	int a, b;
	for (a = 1; a < row - 1; a++)
	{
		if (a == 1)
		{
			int c;
			for (c = 0; c < row - 1; c++)
			{
				printf("%d ", c);
			}
			printf("\n");
		}
		for (b = 1; b < col - 1; b++)
		{
			if (b == 1)
			{
				printf("%d ", a);
			}
			printf("%c ", board[a][b]);
		}
		printf("\n");
	}
	printf("\n");
}

int howmany(char board[ROWS][COLS], int a, int b)
{
	int c, d;
	int count = 0;
	for (c = a - 1; c <= a + 1; c++)
	{
		for (d = b - 1; d <= b + 1; d++)
		{
			if (board[c][d] == '*')
				count++;
		}
	}
	return count;
}

void recu(char board1[ROW][COL], char board2[ROWS][COLS], int a, int b)
{
	int f, g;
		for (f = a - 1; f <= a + 1; f++)
		{
			for (g = b - 1; g <= b + 1; g++)
			{
				if (board2[f][g] != '*')
				{
					int e = howmany(board2, f, g);
					board1[f - 1][g - 1] = e + '0';
					if (board1[f - 1][g - 1] == '0')
						board1[f - 1][g - 1] = ' ';
				}
			}
		}
}

void playeract(char board1[ROW][COL],char board2[ROWS][COLS], int row, int col ,int a,int b)
{
	if (a >= 1 && a <= row && b >= 1 && b <= col )
	{
		if (board2[a][b] == '0')
		{
			int c = howmany(board2, a, b);
			board1[a - 1][b - 1] = c+'0';//将int类型的数字转换为char类型的方法
			if (board1[a - 1][b - 1] == '0')
				board1[a - 1][b - 1] = ' ';
			if(a>1 && a<9 && b>1 && b<9)
			recu(board1, board2, a, b);
			printboard1(board1,row,col);
		}
		else
		{
			board1[a-1][b-1] = '*';
			printboard1(board1, row, col);
		}
	}
	else
		printf("输入错误,请重新输入\n");
}

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值