这次主要是记录自己写的扫雷C语言代码,因为是自己写的代码,其中存在很多不足,所以就做过多讲解,但是此代码还是能实现扫雷游戏的基本功能。
此扫雷为初级扫雷,9*9的格子,总共10个雷,包含一个头文件,两个源文件。
1.这是game.头文件
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11
void initchar1(char board[ROW][COL], int row, int col);
void initchar2(char board[ROWS][COLS], int row, int col);
void install(char board[ROWS][COLS], int row, int col);
void printboard2(char board[ROWS][COLS], int row,int col);
void printboard1(char board[ROW][COL], int row, int col);
void playeract(char board1[ROW][COL],char board2[ROWS][COLS], int row, int col,int a,int b);
2.下面是两个源文件
#include "game.h"
void game()
{
char board1[ROW][COL];//游戏主棋盘
char board2[ROWS][COLS];//放雷辅助棋盘
initchar1(board1, ROW, COL);
initchar2(board2, ROWS, COLS);//数组初始化
install(board2, ROWS, COLS);//放雷
printboard2(board2, ROWS, COLS);//BUG
printboard1(board1, ROW, COL);
printf("本局雷的个数为10\n");
while (1)
{
printf("请输入坐标\n");
int a , b , c , d ;
int count = 0;
scanf_s("%d%d", &a, &b);
printf("你输入的坐标是(%d,%d)\n",a,b);//(行,列)
playeract(board1,board2 ,ROW, COL,a,b);//玩家扫雷
for (c = 0; c < ROW; c++)
{
for (d = 0; d < COL; d++)
{
if (board1[c][d] == '0')
count++;
}
}
if (count == 10)
{
printf("雷已排完,恭喜你,拯救了世界,获得胜利\n");
break;
}
if (board2[a][b] == '*')
{
printf("很遗憾,你踩到雷了,游戏失败\n");
break;
}
}
}
void menu()
{
printf("**********************************\n");
printf("********** 1.PLAY **********\n");
printf("********** 0.EXIT **********\n");
printf("**********************************\n");
}
void test()
{
int input;
do
{
srand((unsigned int)time(NULL));
menu();
printf("请选择\n");
scanf_s("%d", &input);
switch (input)
{
case 0:
{
printf("退出游戏\n");
break;
}
case 1:
{
printf("即将进入游戏\n");
game();
break;
}
default:
{
printf("输入错误,请重新输入\n");
break;
}
}
} while (input);
}
int main()
{
test();
return 0;
}
#include "game.h"
void initchar1(char board[ROW][COL], int row, int col)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0;j < col; j++)
{
board[i][j] = '0';
}
}
}
void initchar2(char board[ROWS][COLS], int row, int col)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = '0';
}
}
}
void install(char board[ROWS][COLS], int row, int col)
{
int count=0;
do
{
int a = rand() % 9 + 1;
int b = rand() % 9 + 1;
if (board[a][b] == '0')
{
board[a][b] = '*';
count++;
}
} while (count < 10);
}
void printboard1(char board[ROW][COL], int row, int col)
{
int a, b;
for (a = 0; a < row ; a++)
{
if (a == 0)
{
int c;
for (c = 0; c <= row ; c++)
{
printf("%d ", c);
}
printf("\n");
}
for (b = 0; b < col ; b++)
{
if (b == 0)
{
printf("%d ", a+1);
}
printf("%c ", board[a][b]);
}
printf("\n");
}
}
void printboard2(char board[ROWS][COLS], int row, int col)
{
int a, b;
for (a = 1; a < row - 1; a++)
{
if (a == 1)
{
int c;
for (c = 0; c < row - 1; c++)
{
printf("%d ", c);
}
printf("\n");
}
for (b = 1; b < col - 1; b++)
{
if (b == 1)
{
printf("%d ", a);
}
printf("%c ", board[a][b]);
}
printf("\n");
}
printf("\n");
}
int howmany(char board[ROWS][COLS], int a, int b)
{
int c, d;
int count = 0;
for (c = a - 1; c <= a + 1; c++)
{
for (d = b - 1; d <= b + 1; d++)
{
if (board[c][d] == '*')
count++;
}
}
return count;
}
void recu(char board1[ROW][COL], char board2[ROWS][COLS], int a, int b)
{
int f, g;
for (f = a - 1; f <= a + 1; f++)
{
for (g = b - 1; g <= b + 1; g++)
{
if (board2[f][g] != '*')
{
int e = howmany(board2, f, g);
board1[f - 1][g - 1] = e + '0';
if (board1[f - 1][g - 1] == '0')
board1[f - 1][g - 1] = ' ';
}
}
}
}
void playeract(char board1[ROW][COL],char board2[ROWS][COLS], int row, int col ,int a,int b)
{
if (a >= 1 && a <= row && b >= 1 && b <= col )
{
if (board2[a][b] == '0')
{
int c = howmany(board2, a, b);
board1[a - 1][b - 1] = c+'0';//将int类型的数字转换为char类型的方法
if (board1[a - 1][b - 1] == '0')
board1[a - 1][b - 1] = ' ';
if(a>1 && a<9 && b>1 && b<9)
recu(board1, board2, a, b);
printboard1(board1,row,col);
}
else
{
board1[a-1][b-1] = '*';
printboard1(board1, row, col);
}
}
else
printf("输入错误,请重新输入\n");
}