简单游戏扫雷

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROW 11
#define COL 11
#define TEN 10
void umue()
{
printf("****************************************\n");
printf("*********1.play**********0.exit*********\n");
printf("****************************************\n ");
}
void init_board(char board[ROW][COL], int row, int col, char cha)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j =0 ; j < col; j++)
{
board[i][j] = cha;
}
}
}
void play_board(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
printf("  ");
for (i = 1; i < row - 1; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i < row - 1; i++)
{
printf("%d ", i);
for (j = 1; j < col - 1; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void mine(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int m = TEN;
while (m)
{
i = rand() %( row - 2) + 1;
j = rand() %( col - 2) + 1;
if (board[i][j] == '0')
{
board[i][j] = '1';
m--;
}
}
//play_board(board, row, col);
}


int getmine(char board[ROW][COL], int x, int y)
{
int count = 0;
if (board[x - 1][y - 1] == '1')
{
count++;
}
if (board[x][y - 1] == '1')
{
count++;
}
if (board[x + 1][y - 1] == '1')
{
count++;
}
if (board[x - 1][y] == '1')
{
count++;
}
if (board[x + 1][y] == '1')
{
count++;
}
if (board[x - 1][y + 1] == '1')
{
count++;
}
if (board[x][y + 1] == '1')
{
count++;
}
if (board[x + 1][y + 1] == '1')
{
count++;
}
return count;
}
void spread(char board[ROW][COL], char board1[ROW][COL], int x, int y)
{
if (board[x - 1][y - 1] == '0')
{
board1[x - 1][y - 1] = getmine(board, x - 1, y - 1);
if (board1[x-1][y-1] <= '0')
{
spread(board,board1, x - 1, y - 1);
}
}
if (board[x][y - 1] == '0')
{
board1[x ][y - 1] = getmine(board, x , y - 1);
if (board1[x ][y - 1] <= '0')
{
spread(board, board1, x , y - 1);
}
}
if (board[x + 1][y - 1] == '0')
{
board1[x + 1][y - 1] = getmine(board, x + 1, y - 1);
if (board1[x + 1][y - 1] <= '0')
{
spread(board, board1, x + 1, y - 1);
}
if (board[x - 1][y] == '0')
{
board1[x - 1][y ] = getmine(board, x - 1, y );
if (board1[x - 1][y ] <= '0')
{
spread(board, board1, x - 1, y );
}
}
if (board[x + 1][y] == '0')
{
board1[x + 1][y ] = getmine(board, x + 1, y );
if (board1[x + 1][y] <= '0')
{
spread(board, board1, x + 1, y);
}
}
if (board[x - 1][y + 1] == '0')
{
board1[x - 1][y + 1] = getmine(board, x - 1, y + 1);
if (board1[x - 1][y + 1] <= '0')
{
spread(board, board1, x - 1, y + 1);
}
}
if (board[x][y + 1] == '0')
{
board1[x][y + 1] = getmine(board, x, y + 1);
if (board1[x ][y + 1] <= '0')
{
spread(board, board1, x, y + 1);
}
}
if (board[x + 1][y + 1] == '0')
{
board1[x + 1][y + 1] = getmine(board, x + 1, y + 1);
if (board1[x + 1][y + 1] <= '0')
{
spread(board, board1, x + 1, y + 1);
}
}


}
int sweep(char board1[ROW][COL], char board2[ROW][COL])
{
int x = 0;
int y = 0;
int count = 0;


while (count != (ROW - 2)*(COL - 2) - TEN)
{
scanf_s("%d", &x);
scanf_s("%d", &y);
if (board1[x][y] == '1')
{
return 0;
}
else
{
count = getmine(board1, x, y);

if ( count - '0'>0)
{
board2[x][y] = count+'0';
play_board(board2, ROW, COL);
count++;
}
else if (count - '0' == 0)
{
spread(board1,board2 ,x, y);
play_board(board2, ROW, COL);
}

}
}
return 1;
}
int game()
{
char min_board[ROW][COL] = { 0 };//布雷数组
char printf_board[ROW][COL] = { 0 };//打印的数组


init_board(min_board, ROW, COL, '0');//初始化函数
init_board(printf_board, ROW, COL, '*');


mine(min_board, ROW, COL);//布雷函数
play_board(printf_board, ROW, COL);

if (sweep(min_board, printf_board) == 1)
{
printf("排雷成功!\n");
play_board(min_board, ROW, COL);
}
else{
printf("你踩到雷了!\n");
play_board(min_board, ROW, COL);
}

return 0;
}


int main()
{
srand((unsigned)time(NULL));
do
{
umue();
int intput = 0;
scanf_s("%d", &intput);
switch (intput)
{
case 1:    printf("欢迎来到扫雷游戏!\n");
game();
break;
case 0:    printf("结束游戏!\n");
break;
default:   printf("非法参数!\n");
break;
}
} while (1);
return 0;
}

猜你喜欢

转载自blog.csdn.net/champion_man/article/details/80010453