C语言实现扫雷游戏附注释

概述

扫雷是一款大众类的益智小游戏。游戏目标是根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

实现过程

1、创建一个用户交互菜单

2、布雷函数

3、显示扫雷矩阵

4、玩家自定义坐标

5、计算排雷数

多文件实现

头文件  clear_mine.h

#pragma once //防止头文件被重复包含

#define _CRT_SECURE_NO_WARNINGS 1 //实现 scanf 编译通过

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <windows.h>

#define ROW 8

#define COL 8

#define STYLE '?' //初始化

#define NUM 20 //埋雷数

extern void Game();

源文件main.c

向玩家展示菜单栏

#include "clear_mine.h"

static void Menu() //用户交互菜单

{

printf("########################\n");

printf("# 1. Play 0.Exit #\n");

printf("########################\n");

}

int main()

{

int quit = 0;

int select = 0;

while (!quit)

{

Menu();

printf("Please Enter# ");

scanf("%d", &select);

switch (select)

{

case 1:

Game();

break;

case 0:

quit = 1;

break;

default:

printf("Position Error, Try Again!\n");

break;

}

}

printf("byebye!\n");

system("pause");

return 0;

}

源文件clear_mine.c

#include "clear_mine.h"

static void SetMines(char board[][COL], int row, int col) //布雷

{

int count = NUM;

while (count)

{

int x = rand() % (row - 2) + 1;

int y = rand() % (col - 2) + 1; //随机数生成 矩阵长宽分别-2 的随机数

if (board[x][y] == '0') //非法判断 只能同一个位置生成一个随机数

{

board[x][y] = '1';

count--;

}

}

}

static void ShowLine(int col)

{

for (int i = 0; i <= (col - 2); i++)

{

printf("----");

}

printf("\n");

}

static void ShowBoard(char board[][COL], int row, int col) //显示扫雷矩阵

{

printf(" ");

for (int i = 1; i <= (col - 2); i++) //表头数字打印

{

printf("%d ", i);

}

printf("\n");

ShowLine(col);

for (int i = 1; i <= (row - 2); i++)

{

printf("%-3d|", i);

for (int j = 1; j <= (col - 2); j++)

{

printf(" %c |", board[i][j]);

}

printf("\n");

ShowLine(col);

}

}

static char CountMines(char board[][COL], int x, int y) //计算某点周围8个位置雷总数

{

return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + \

board[x][y + 1] + board[x + 1][y + 1] + board[x + 1][y] + \

board[x + 1][y - 1] + board[x][y - 1] - 7 * '0';

}

void Game()

{

srand((unsigned long)time(NULL)); //生成随机数种子

char show_board[ROW][COL];

char mine_board[ROW][COL];

memset(show_board, STYLE, sizeof(show_board)); //生成用户显示矩阵

memset(mine_board, '0', sizeof(mine_board)); //生成扫雷矩阵

SetMines(mine_board, ROW, COL); //布雷

int count = (ROW - 2)*(COL - 2) - NUM; //排雷

while (count)

{

system("cls"); //清屏

ShowBoard(show_board, ROW, COL);

printf("Please Enter Your Position <x,y># ");

int x = 0;

int y = 0;

scanf("%d %d", &x, &y);

if (x < 1 || x > 10 || y < 1 || y > 10) //非法性判断

{

printf("Postion Error!\n");

continue;

}

if (show_board[x][y] != STYLE){

printf("Postion Is not *\n");

continue;

}

if (mine_board[x][y] == '1'){

printf("game over!\n");

ShowBoard(mine_board, ROW, COL);

break;

}

show_board[x][y] = CountMines(mine_board, x, y);

count--;

}

}

初始化好的扫雷矩阵 

游戏体验结果

感兴趣的小朋友可以尝试下哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C语言实现扫雷游戏附注释 的全部内容, 来源链接: utcz.com/p/246234.html

回到顶部