首先来分析一下扫雷游戏的过程,先要显示菜单,玩家选择是否玩游戏,然后需要两个数组一个布雷,另一个显示,游戏中需要显示周边雷的个数,首先说布雷,用rand()函数获得随机数,也就是随机位置,把雷布在这些地方,玩家输入位置玩游戏,核心代码是计算并显示周围雷的个数,通过这次学习,我懂得了,在写每一个程序之前应该明白每一步该做什么,每一个函数应该实现什么样的功能。
#include"mine.h"
int main()
{
int select = 0;
int quit = 0;
while (!quit)
{
Menu();
scanf("%d", &select);
switch (select)
{
case 1:
Game();
break;
case 2:
printf("Bye Bye!\n");
quit = 1;
break;
default:
printf("Please Enter Again!\n ");
break;
}
}
system("pause");
return 0;
}
函数的声明
#ifndef _MINE_H_
#define _MINE_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
#pragma warning(disable:4996)
#define ROW 12
#define COL 12
#define MINES 20
void Menu();
void Game();
void SetMine(char mine_board[][COL], int row, int col);
void PlayGame(char show_board[][COL], char mine_board[][COL], int row, int col);
int GetMineNum(char mine_board[][COL], int i, int j);
void ShowBoard(char show_board[][COL], int row, int col);
#endif
函数的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"mine.h"
void Menu()//显示菜单,玩家选择是否玩游戏
{
printf("****************************************\n");
printf("****** 1 Play 2 Exit ******\n");
printf("****************************************\n");
printf("Please Select:>");
}
static int GetIndex(int start, int end)
{
return rand() % (end - start + 1) + start;//获得start到end之间的随机数
}
void SetMine(char mine_board[][COL], int row, int col)//布雷
{
srand((unsigned long)time(NULL));//种下随机数的种子
int mine_num = MINES;//雷的个数为MINES
while (mine_num)
{
int i_index = GetIndex(1, col - 2);
int j_index = GetIndex(1, col - 2);//获得随机数得到位置
if (mine_board[i_index][j_index] == '0')
{
mine_board[i_index][j_index] == '1';//在(i,j)处布雷
mine_num--;//每布一次雷,雷的个数就少一个
}
}
}
int GetMineNum(char mine_board[][COL], int i, int j)//获得周边雷的个数
{
return mine_board[i - 1][j - 1] + mine_board[i - 1][j] + mine_board[i - 1][j + 1] \
+ mine_board[i][j - 1] + mine_board[i][j + 1] + mine_board[i + 1][j - 1] + mine_board[i + 1][j] + mine_board[i + 1][j + 1] - 8 * '0';//有雷的地方为'1',没有雷的地方为'0',访问周边元素相加减去8个'0',就是雷的个数
}
void ShowBoard(char show_board[][COL], int row, int col)//显示游戏界面
{
int i = 1;
int j = 1;
printf(" ");
for (; i < col - 2; i++)
{
printf("%d", i);
}
printf("\n");
for (i = 1; i <= col - 1; i++)
{
printf("----");
}
printf("\n");
for (i = 1; i <= row - 2; j++)
{
printf("%2d|", i);
{for (j = 1; j <= col - 2; j++)
{
printf("%c|", show_board[i][j]);
}
printf("\n");
int k = 1;
for (; k <= col - 1; k++)
{
printf("----");
}
printf("\n");
}
}
void PlayGame(char show_board[][COL],char mine_board[][COL] ,int row, int col)
{
int i = 0;
int j = 0;
int total = (ROW - 2)*(COL - 2);
while (1)
{
ShowBoard(show_board, row, col);
printf("Pleae Enter Pos<x,y>:");
scanf("%d%d", &i, &j);
if (i >= 1 && i <= row - 2 && j >= 1 && j <= col - 2)
{
if (mine_board[i][j] == '0')
{
int num = GetMineNum(mine_board, i, j);
show_board[i][j] = num + '0';
total--;
}
else
{
ShowBoard(mine_board, row, col);
printf("Gmae Over!You Lose:(\n");
break;
}
}
else
{
printf("Enter Error,Try Again!\n");
continue;
}
if (total == MINES)
{
printf("You Win:)\n");
break;
}
}*/
}
void Game()
{
char show_board[ROW][COL];
char mine_board[ROW][COL];
memset(show_board, '*', sizeof(show_board));
memset(mine_board, '0', sizeof(mine_board));
SetMine(mine_board, ROW, COL);
PlayGame(show_board, mine_board, ROW, COL);
}
本文详细介绍了使用C语言实现扫雷游戏的过程,包括菜单显示、随机布雷、计算周边雷数及游戏界面显示等功能。通过实际代码,读者可以学习如何运用rand()函数进行随机位置布雷,以及如何计算和显示周围雷的个数。
758

被折叠的 条评论
为什么被折叠?



