1、创建项目文件,添加基本框架
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
return 0;
}
2、创建开始菜单,菜单中选择1:玩游戏,选择0:退出。如果选择的是其他内容,重新选择。可将此功能写成一个函数menu
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//声明函数
void menu();
int main()
{ do
{//调用函数
menu;
}while(1)
return 0;
}
//游戏界面(开始菜单)
void menu()
{
printf("----------------\n");
printf("1:play game\n");
printf("0:exit\n")
printf("----------------\n");
printf("请选择:");
int select;
scanf("%d",&select);
switch(select)
{
case 1:
//玩游戏
break:
case 0:
printf("再见,欢迎下次你再玩🤞🏻\n");
exit(0);
default:
printf("选择错误,请重新选择");
}
}
3、编写玩游戏的功能playgame()
1>使用(9*9)二维数组创建雷区
2>向网格中进行布雷,使用随机函数产生行和列,然后在指定的地方添加雷
扫雷代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROWS 9
#define COLUMNS 9
#define MINE_ROWS 11
#define MINE_COLUMNS 11
#define COUNT 15//雷的数量
//声明函数
void menu();
void playgame();
void init_sweeping_arr(char arr[MINE_ROWS][MINE_COLUMNS], int rows, int columns, char fill);
void show_sweeping_arr(char arr[MINE_ROWS][MINE_COLUMNS], int rows, int columns);
void show(int minefield[MINE_ROWS][MINE_COLUMNS], int covering[MINE_ROWS][MINE_COLUMNS]);
void layout_mine(char minefield[MINE_ROWS][MINE_COLUMNS], int rows, int columns);
void clearance_mine(char minefield[MINE_ROWS][MINE_COLUMNS], char covering[MINE_ROWS][MINE_COLUMNS]);
int main() {
do {
menu();
} while (1);
return 0;
}
//生成菜单
void menu()
{
printf("-------------mine sweeping-------------\n");
printf("选择 1:开始游戏\n");
printf("选择 0:退出游戏\n");
printf("---------------------------------------\n");
printf("请开始你的选择:");
int select;
scanf("%d", &select);
//根据客户的选择进行相关操作
switch (select) {
case 1:
playgame();
break;
case 0:
printf("再见\n");
exit(EXIT_SUCCESS);
break;
default:
printf("请重新选择!\n");
}
}
//游戏的功能
void playgame()
{
//创建一个11*11的雷区
char minefield[MINE_ROWS][MINE_COLUMNS] = { 0 };
init_sweeping_arr(minefield, MINE_ROWS, MINE_COLUMNS, '0');
//创建一个覆盖层(用*)
char covering[MINE_ROWS][MINE_COLUMNS] = { 0 };
init_sweeping_arr(covering, MINE_ROWS, MINE_COLUMNS, '*');
//打印雷区覆盖层
//布雷
layout_mine(minefield, ROWS, COLUMNS);
show(minefield, covering);
//排雷
clearance_mine(minefield, covering);
}
//初始化二维数组
void init_sweeping_arr(char arr[MINE_ROWS][MINE_COLUMNS], int rows, int columns, char fill) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
arr[i][j] = fill;
}
}
}
//打印数据
void show_sweeping_arr(char arr[MINE_ROWS][MINE_COLUMNS], int rows, int columns) {
for (int i = 0; i <= rows; i++) {
if (i == 0)
{
printf(" ");
}
else
{
printf("%-4d",i);
}
}
printf("\n\n");
for (int i = 0; i < rows; i++)
{ printf("%-4d", i + 1);
for(int j = 0; j < columns; j++)
{
printf("%-4c", arr[i][j]);
}
printf("\n");
}
}
//显示功能
void show(int minefield[MINE_ROWS][MINE_COLUMNS], int covering[MINE_ROWS][MINE_COLUMNS]) {
printf("sweeping\n");
show_sweeping_arr(minefield, MINE_ROWS, MINE_COLUMNS);
printf("-----------------------------------\n");
printf("covering\n");
show_sweeping_arr(covering, MINE_ROWS, MINE_COLUMNS);
}
//布雷
void layout_mine(char minefield[MINE_ROWS][MINE_COLUMNS], int rows, int columns)
{
srand((unsigned int)time(NULL));
//创建一个变量,表示已经布雷的数量
int count = 0;
while (count < COUNT) {
int row = rand() % 9 + 1;
int column = rand() % 9 + 1;
if(minefield[row][column] == '1')
{
continue;
}
else
{
minefield[row][column] = 49;
count++;
}
}
}
//排雷
void clearance_mine(char minefield[MINE_ROWS][MINE_COLUMNS], char covering[MINE_ROWS][MINE_COLUMNS]) {
int count = 0;
while (count < ROWS * COLUMNS - COUNT) {
int row = 0;
int column = 0;
//清空缓冲区的数据
rewind(stdin);
printf("请输入点击的坐标:");
scanf("(%d,%d)", &row, &column);
if (row > 0 && row <= ROWS && column > 0 && column < COLUMNS) {
if(covering[row][column] != '*')
{
continue;
}
else if(minefield[row][column]!='1') {
int sum = 0;
sum = sum + minefield[row - 1][column - 1] - '0';
sum = sum + minefield[row - 1][column] - '0';
sum = sum + minefield[row - 1][column + 1] - '0';
sum = sum + minefield[row + 1][column - 1] - '0';
sum = sum + minefield[row + 1][column] - '0';
sum = sum + minefield[row + 1][column + 1] - '0';
sum = sum + minefield[row][column - 1] - '0';
sum = sum + minefield[row][column + 1] - '0';
covering[row][column] = sum + '0';
count++;
show(minefield, covering);
}
else {
printf("被炸死 游戏结束。\n");
break;
}
}
else {
printf("请重新输入!\n");
}
}
if (count = ROWS * COLUMNS - COUNT) {
printf("恭喜你,扫雷成功!\n");
}
}