简单的扫雷游戏

采用多文件来编写:

头文件:

#pragma once
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#define ROW 12
#define COL 12
#define NUM 20  //雷的个数
#define BOOM  '1'   //雷为1
#pragma warning (disable:4996)

extern void Game();

主函数:

#include"test.h"

int main() {
	srand((unsigned long)time(NULL));//种随机数种子
	int quit = 0;
	while (!quit) {
		Menu();
		printf("请做出你的选择:");
		int select = 0;
		scanf("%d", &select);
		switch (select) {
		case 1:
			Game();
			break;
		case 2:
			quit = 1;
				break;
		default:
			printf("输入有误,请重新输入\n");
			break;
		}
	}
	printf("ByeBye!\n");
	return 0;
}


函数调用:

#include"test.h"
void Menu() {
	printf("#####################################\n");
	printf("#####1.play     2.exit    ###########\n");
	printf("#####################################\n");
}
 void SetMines(char mine_board[][COL], int row, int col) {
	int i = 0;
	while (i < NUM) {
		int _x = rand() %(row-2) + 1;
		int _y = rand() % (col-2) + 1;
		if (mine_board[_x][_y] == BOOM) {
			continue;
		}
		mine_board[_x][_y] = BOOM;
		i++;
	}
}
static void ShowBoard(char show_board[][COL], int row, int col) {
	for (int i = 1; i <= row-2; i++) {
		printf("%5d", i);
		}
	printf("\n");
	printf("  ");
	for (int k = 1; k <= row-2; k++) {
		printf("-----");
	}
    printf("-\n");
	for (int i = 1; i <= row - 2; i++) {
		printf("%2d|", i);
		for (int j=1;j<=col-2;j++) {
			printf(" %c | ",show_board[i][j]);
		}
		printf("\n");
		printf("  ");
		for (int k = 1; k <= row-2; k++) {
			
			printf("-----");
		}
		printf("-\n");
	}
}
static int CountMines(char mine_board[][COL],int x,int y) {

	return mine_board[x - 1][y - 1]+mine_board[x - 1][y]+mine_board[x - 1][y + 1]+\
		mine_board[x][y - 1]+mine_board[x][y + 1]+mine_board[x + 1][y - 1]+\
		mine_board[x + 1][y]+mine_board[x + 1][y + 1] - 8 * '0';

}
void Game() {
	
	char show_board[ROW][COL];
	char mine_board[ROW][COL];
	memset(show_board, '*', sizeof(show_board));//初始化数组,初始化为*
	memset(mine_board, '0', sizeof(mine_board));//初始化数组,初始化为0
	SetMines(mine_board,ROW,COL);
	int total = (ROW-2)*(COL-2)-NUM;   //总共扫多少次
	int clear = 0;    //已经扫过的
	while (1) {
		system("cls");//清屏
		int x = 0;
		int y = 0;
		ShowBoard(show_board,ROW,COL);
		printf("请输入坐标<x,y>\n");
		scanf("%d,%d", &x, &y);
		
		if (!(x >= 1 && x <= ROW - 2 && y >= 1 && y <= COL - 2)) {
			printf("扫雷的位置有问题,请重新输入:\n");
			continue;
		}
		if (show_board[x][y] != '*') {
			printf("扫雷的位置已经被排除!\n");
			continue;
		}
		if (mine_board[x][y] == '1') {
			ShowBoard(mine_board, ROW, COL);
			printf("对不起,你被炸死了!\n");
			break;
		}
		else {
			int count = CountMines(mine_board,x,y);
			show_board[x][y] = count+'0';
			clear++;
		}
		if (clear >= total) {
			printf("恭喜你,游戏通过!\n");
			break;
		}
	}

}

运行结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山野都有雾灯-Meico

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值