低配版扫雷的C语言黑框框实现

我在vs studio2019中创建了,game.h,game.c,test.c三个文件

game.h//存放相关声明和头文件

#define  _CRT_SECURE_NO_WARNINGS 1
#define row 9
#define col 9
#define rows row+2
#define cols col+2
#define sum_mine 10
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
void menu();
void playgame();
void board_mine_init(int arr[rows][cols]);
void board_init(char arr[rows][cols]);
void board_mine_show(int arr[rows][cols]);
void board_show(char arr[rows][cols]);
void setup_mine(int arr[rows][cols]);
int mine_num(int arr[rows][cols], int x, int y);
char find_mine(int arr1[rows][cols], char arr2[rows][cols]);
void iswin(int arr1[rows][cols], char arr2[rows][cols]);

game.c游戏运行的关键信息

#include "game.h"
void menu() {
	printf("****************\n");
	printf("1.玩游戏  0.退出\n");
	printf("****************\n");
}
void board_mine_init(int arr[rows][cols]) {//初始化地雷标记棋盘
	int i = 0, j = 0;
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			arr[i][j] = 0;
		}
	}
}
void board_init(char arr[rows][cols]) {//初始化游戏显示棋盘
	int i = 0, j = 0;
	for (i = 0; i < rows; i++) {
		for (j = 0; j < cols; j++) {
			arr[i][j] = '*';
		}
	}
}
void board_mine_show(int arr[rows][cols]) {//显示地雷标记棋盘
	int i = 0, j = 0;
	for (j = 0; j <=col;j++) {
		printf(" %d ", j);
	}
	printf("\n");
	for (i = 1; i <=row; i++) {
		printf(" %d ", i);
		for (j = 1; j <= col; j++) {
			printf(" %d ",arr[i][j]);
		}
		printf("\n");
	}
}
void board_show(char arr[rows][cols]) {//显示游戏显示棋盘
	int i = 0, j = 0;
	for (j = 0; j <=col; j++) {
		printf(" %d ", j);
	}
	printf("\n");
	for (i = 1; i <=row; i++) {
		printf(" %d ", i);
		for (j = 1; j <= col; j++) {
			printf(" %c ",arr[i][j]);
		}
		printf("\n");
	}
}

void setup_mine(int arr[rows][cols]) {//电脑设置地雷
	int count = sum_mine;
	while (count) {
		int x = rand()%row + 1;
		int y = rand()%col + 1;
		if (arr[x][y]==0) {
			arr[x][y] = 1;
			count--;
		}
	}
}
int mine_num(int arr[rows][cols],int x, int y) {//判断玩家输入坐标周围八个有几个雷
	int sum = 0;
	sum = arr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1]
		+ arr[x][y - 1] + arr[x][y + 1] +
		+arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1]+48;
	return sum;
}
char find_mine(int arr1[rows][cols], char arr2[rows][cols]) {//玩家输入坐标,有雷则返回f无雷返回c
	int x=0, y=0;
	printf("请输入坐标");
	scanf("%d %d", &x, &y);
	while (1) {
		if (x > 0 && x <=row && y>0 && y <=col && arr2[x][y] == '*') {
			if (arr1[x][y] == 1) {
				return 'f';
			}
			else {
				arr2[x][y] = mine_num(arr1, x, y);
				return 'c';
			}
		}
		else {
			printf("输入错误请重新输入");
		}
		scanf("%d %d", &x, &y);
	}
}
void iswin(int arr1[rows][cols], char arr2[rows][cols]) {//判断输赢
	int count=0;
	do {
		char a = find_mine(arr1, arr2);
		system("CLS");
		//board_mine_show(arr1);
		printf("-----------------------------\n");
		board_show(arr2);
		if (a == 'c') {
			count++;
		}
		else if (a == 'f') {
			printf("你被炸,输了!!\n");
			break;
		}
	} while(count<(row * col- sum_mine));//所有非雷被找出则赢
	if (count == (row * col - sum_mine)) {
		printf("赢了\n");
	}
}
void playgame(){
	srand((unsigned int)time(NULL));
	int arr1[rows][cols] = { 0 };
	char arr2[rows][cols] = { 0 };
	board_mine_init(arr1);
	board_init(arr2);
	printf("-----------------------------\n");
	board_show(arr2);
	setup_mine(arr1);
	printf("-----------------------------\n");
	//board_mine_show(arr1);
	iswin(arr1, arr2);


}

test.c控制游戏的开始结束

#include "game.h"
int main() {
	int input = 1;
	do {
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input) {
		case 1:
			playgame();
			break;
		case 0:
			return;
		default:
			printf("输入错误请重新输入");
			break;
		}

	} while (1);
	return 0;
}

运行截图太麻烦可以看下主页的视频

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值