[C语言]扫雷小游戏实现 注释 代码
Posted 只yao为你发光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]扫雷小游戏实现 注释 代码相关的知识,希望对你有一定的参考价值。
思路
一、初始化用户棋盘和雷区棋盘
二、雷区棋盘随机布雷
三、打印初始化棋盘
四、用户输入坐标
五、判断输赢
六、打印雷区棋盘
game.h的创建和代码
这部分做的是头文件的声明以及后面所要用到的大部分函数的定义
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9 //用户棋盘大小
#define COL 9
#define ROWS ROW+2//雷区棋盘大小
#define COLS COL+2
#define Mine_Count 10//雷数
void InitBoard(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col);//初始化雷区棋盘和用户棋盘
void SetMine(char mine_board[ROWS][COLS], int row, int col);//放置雷
void ShowBoard(char user_board[ROWS][COLS], int row, int col);//打印用户棋盘
char Get_Mine(char mine_board[ROWS][COLS], int x, int y);//获取用户选择坐标周围的雷数
void SweepMine(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col);//扫雷
game.c的创建和代码
这部分做的是game.c文件中定义的函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col)//初始化雷区棋盘和用户棋盘
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
mine_board[i][j] = '0';//初始化雷区棋盘
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
user_board[i][j] = '?';//初始化用户棋盘
}
}
}
void SetMine(char mine_board[ROWS][COLS], int row, int col)//放置雷
{
int mine_count = Mine_Count;
while (mine_count!=0)
{
int x = rand() % ROW + 1;
int y = rand() % COL + 1;
if (mine_board[x][y] == '0')
{
mine_board[x][y] = '1';
mine_count--;
}
}
}
void ShowBoard(char user_board[ROWS][COLS], int row, int col)//打印用户棋盘
{
printf("============================================\\n");
for (int i = 0; i <= row; i++)
{
printf("%d ", i);
}
printf("\\n");
for (int i = 1; i <= row; i++)
{
printf("%d ", i);
for (int j = 1; j <= col; j++)
{
{
printf("%c ", user_board[i][j]);
}
}
printf("\\n");
}
printf("============================================\\n");
}
char Get_Mine(char mine_board[ROWS][COLS], int x, int y)//获取用户选择坐标周围的雷数
{
return mine_board[x - 1][y - 1] + mine_board[x - 1][y] + mine_board[x - 1][y + 1]
+ mine_board[x][y - 1] + mine_board[x][y + 1]+ mine_board[x + 1][y - 1]
+ mine_board[x + 1][y] + mine_board[x + 1][y + 1]-8*'0';
}
void SweepMine(char mine_board[ROWS][COLS], char user_board[ROWS][COLS], int row, int col)//扫雷
{
int count = 0;
while (count < ROW*COL - Mine_Count)
{
printf("请输入你的选择 x,y:");
int x = 0;
int y = 0;
scanf("%d,%d", &x, &y);
if (user_board[x][y] == '?')//判断是否曾经输入过这个坐标
{
if (mine_board[x][y] == '1')//等于字符1就踩雷
{
printf("很遗憾,踩到雷了...\\n");
break;
}
else//否则返回该坐标周围的雷数并打印新的棋盘
{
user_board[x][y] = Get_Mine(mine_board, x, y) + '0';
ShowBoard(user_board, ROW, COL);
count++;
}
}
else
{
printf("刚才已经扫过此地...");
}
}
if (count == ROW*COL - Mine_Count)//判断走的步数和棋盘安全位置是否相等
{
printf("恭喜你,扫雷成功!!");
ShowBoard(mine_board, ROW, COL);
}
}
test.c的创建和代码
这部分做的是菜单、游戏的运行函数和主函数的编写
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("**********************\\n");
printf("*********扫雷*********\\n");
printf("****0.exit**1.play****\\n");
printf("**********************\\n");
}
void game()
{
char mine_board[ROWS][COLS] = { 0 };
char user_board[ROWS][COLS] = { 0 };
InitBoard(mine_board, user_board, ROWS, COLS);
SetMine(mine_board, ROWS, COLS);
ShowBoard(user_board, ROW, COL);
//ShowBoard(mine_board, ROW, COL);这个函数在最开始会打印一边雷区 供调试使用
SweepMine(mine_board, user_board, ROWS, COLS);
}
int main()
{
srand((unsigned int)time(NULL));
int input;
do
{
menu();
printf("请输入你的选择:");
scanf("%d", &input);
switch(input)
{
case 1:
printf("开始游戏\\n");
game();
break;
case 0:
printf("退出游戏\\n");
break;
default:
printf("选择不合法");
}
} while (input);
return 0;
}
以上是关于[C语言]扫雷小游戏实现 注释 代码的主要内容,如果未能解决你的问题,请参考以下文章