这是关于我自己对扫雷的一些认识,希望大家能提些建议。
在一个系统给出的棋盘里找出不是雷的坐标。
在我们玩游戏的时候一般都会有一个菜单让你选择,所以脑中第一个想法就是创建出一个菜单,
当菜单有了之后,自然而然我们就会需要输入我们的选择让电脑执行我们的想法。
当我们选择了‘0’的话,电脑应输出游戏结束并停止程序的运行。而选择出现错误的时候,电脑应让我们重新选择,所以这应该是一个循环。我们规定‘1’为雷,‘0’为不是雷。
当我们进入游戏,我们要创建两个二维数组。一个用来随机存放雷,另一个用‘*’来掩盖这些坐标。
先让两个数组全都初始化。在arr1中埋雷,埋雷是随机的,所以我们要用到随机函数rand(),而使用rand函数时,要先使用srand函数。我们以系统时间为变量。头文件就需要有#include
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("*********************\n");
printf("****1.play 0.exit****\n");
printf("*********************\n");
}
void game()
{
char arr1[ROWS][COLS] = { 0 };
char arr2[ROWS][COLS] = { 0 };
init(arr1, ROWS, COLS, '0');
init(arr2, ROWS, COLS, '*');
mailei(arr1, ROW, COL);
display(arr2, ROW, COL);
pailei(arr1, arr2, ROWS, COLS);
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:> ");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,重新输入\n");
break;
}
} while (input);
return 0;
}
代码如下
#pragma once
#include
#include
#include
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
void init(char arr[ROWS][COLS], int rows, int cols, char set);
void mailei(char arr1[ROWS][COLS], int row, int col);
void display(char arr2[ROWS][COLS], int row, int col);
void pailei(char arr1[ROWS][COLS], char arr2[ROWS][COLS], int row, int col);
代码如下:
void init(char arr[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
arr[i][j] = set;
}
}
}
代码如下:
void mailei(char arr1[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int i = 0;
int count = EASY_COUNT;
while (count)
{
x = rand() % ROW + 1;
y = rand() % COL + 1;
for (i = 0; i < EASY_COUNT; i++)
{
if (arr1[ROW][COL] == '0')
{
arr1[x][y] = '1';
count--;
}
}
}
}
代码如下:
void display(char arr2[ROWS][COLS], int row, int col)
{
int i = 0;
for (i = 0; i <= row; i++)
{
printf("%d ", i);
}
printf("\n**********扫雷***********\n");
for (i = 1; i <= row; i++)
{
int j = 0;
printf("%d ", i);
for (j = 1; j <= col; j++)
{
printf("%c ", arr2[i][j]);
}
printf("\n");
}
}
代码如下:
int shuzi(char arr1[ROWS][COLS], int x, int y)
{
return arr1[x - 1][y - 1] +
arr1[x - 1][y] +
arr1[x - 1][y + 1] +
arr1[x][y - 1] +
arr1[x][y + 1] +
arr1[x + 1][y - 1] +
arr1[x + 1][y] +
arr1[x + 1][y + 1] - 8 * '0';
}
void pailei(char arr1[ROWS][COLS], char arr2[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int win = 0;
while (win <= ROW * COL - EASY_COUNT)
{
printf("请输入要排查的坐标:>");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (arr1[x][y] == '1')
{
printf("抱歉,游戏结束\n");
display(arr1, ROW, COL);
break;
}
else
{
int count = shuzi(arr1,x,y);
arr2[x][y] = count + '0';
display(arr2, ROW, COL);
win++;
}
}
else
{
printf("坐标非法,请重新输入\n");
}
}
if (win == ROW * COL - EASY_COUNT)
{
printf("你赢了\n");
display(arr1, ROW, COL);
}
}
以上就是我对扫雷游戏的认识,当你了解扫雷本质是一个二维数组,在二维数组中放难度不同的雷进去,让人输入坐标去排除这些雷之后,你会发现和三子棋的一些程序很相似。
写博客的能力还有待加强。