运用c语言数组知识实现简单的扫雷小游戏,游戏可以自己设定棋盘大小,其中以“*”代表雷,以“$”代表旗子
话不多说直接上代码
game.h
定义函数,主要的函数定义在这里
#define _CRT_SECURE_NO_WARNINGS 1;
#define ROW 10
#define COL 10
#include
#include
void InitBoard(char board[ROW][COL],int row,int col);
void DispalyBoard(char board[ROW][COL], int row, int col);
void Mine(char board[ROW][COL], int row, int col,int x, int y);
char FakeClick(char board[ROW][COL], int x, int y);
void circle(char board[ROW][COL], int x, int y);
void FakeDisplay(char board[ROW][COL], char board2[ROW][COL]);
void Flag(char board[ROW][COL],int row,int col);
int judge(char board[ROW][COL], char board2[ROW][COL]);
int judge2(char board[ROW][COL], char board2[ROW][COL], int x, int y);
int ergodic(char board[ROW][COL]);
test.c
运行程序在这里进行运行,首先选择游戏玩或不玩,之后运用坐标的方式来代替鼠标点击棋盘中的方格,在输入坐标时如果选择了y就代表着要进行插旗,如若直接输入坐标则是正常点击,游戏规则与玩法和扫雷几乎一样
#define _CRT_SECURE_NO_WARNINGS 1;
#include
#include"game.h"
#define ROW 10
#define COL 10
index()
{
printf("*************************\n");
printf("* 1.play game *\n");
printf("* 0. exit *\n");
printf("*************************\n");
}
game()
{
int i = 0;
int j = 0;
int a = 0;
char b;
char board[ROW][COL];
char board2[ROW][COL];
InitBoard(board,ROW,COL);
InitBoard(board2, ROW, COL);
DispalyBoard(board2, ROW, COL);
printf("\n");
printf("这是一个%dX%d的棋盘,请不要越界!\n",ROW-2,COL-2);
while (1)
{
printf("请输入要点击的坐标:");
scanf("%d,%d", &i, &j);
if (0 < i <= 18 && 0 < j <= 18)
{
if (a < 1)
{
Mine(board, ROW, COL, i + 1, j + 1);
a++;
}
printf("\n");
circle(board, i + 1, j + 1);
FakeDisplay(board, board2);
DispalyBoard(board, ROW, COL);
printf("\n");
DispalyBoard(board2, ROW, COL);
printf("请问要插旗子吗(y/n)\n");
scanf("%c", &b);
if (b == 'y')
{
printf("请输入棋子的坐标:");
scanf("%d,%d", &i, &j);
Flag(board2, i + 1, j + 1);
DispalyBoard(board2, ROW, COL);
}
}
else if (b == 'n')
{
continue;
}
if (judge2(board, board2, i, j) == 1)
{
printf("失败了,嘤嘤嘤(っ °Д °;)っ\n");
break;
}
if (a == (ROW-2)*(COL-2)-(ROW/2))
{
judge(board, board2);
printf("你成功了,耶耶耶┗|`O′|┛ 嗷~~");
break;
}
}
}
int main()
{
int a = 0;
srand((unsigned)time(NULL));
do
{
index();
printf("请输入要选择的选项\n");
scanf("%d", &a);
switch (a)
{
case 1:
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("没有此选项,请重新选择\n");
break;
}
} while (a);
return 0;
}
game.c
最主要的代码就是实现点击之后雷的个数显示,和运用数组迁移实现点击棋盘的显示,并且由于对初学者比较友好所以部分代码写的比较繁琐
#define _CRT_SECURE_NO_WARNINGS 1;
#include"game.h"
#include
void InitBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 1; i < row-1; i++)
{
for (j = 1; j < col-1; j++)
{
board[i][j] = ' ';
}
}
for (j = 0; j < row; j++)
{
board[row-1][j] = '#';
}
for (j = 0; j < row; j++)
{
board[0][j] = '#';
}
for (j = 1; j < row-1; j++)
{
board[j][0] = '#';
}
for (j = 1; j < row - 1; j++)
{
board[j][row-1] = '#';
}
}
void DispalyBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c |", board[i][j]);
}
printf("\n");
printf("————————————————————\n");
}
}
void Mine(char board[ROW][COL], int row, int col,int x,int y)
{
int i = 0;
int j = 0;
for (i = 0; i < ROW/2; i++)
{
int X = rand() % (row);
int Y = rand() % (col);
if (board[X][Y] != '*' && X != x-1 && Y != y-1 && board[X][Y]!='#'&& 0
运用的几乎全是数组的知识,非常适合初学者做着玩来提高理解,虽然简单,但是也废了博主不少时间,也有一点小bug(多多包涵)
下面则为游戏开始棋盘的输出方式
输入坐标显示,并且随机显示5颗雷(雷的个数可以自己恒定)
运用数组挪移即可不显示雷
插入旗子,只需输入y,在输入旗子的坐标即可
如果点击的坐标是雷,游戏结束
同理,如果所有旗子覆盖了雷,并且其他位置全部被点开,则游戏胜利
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)