概述
扫雷是一款大众类的益智小游戏。游戏目标是根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。
实现过程
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("######################## "); printf("# 1. Play 0.Exit # "); printf("######################## "); } 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! "); break; } } printf("byebye! "); 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(" "); } static void ShowBoard(char board[][COL], int row, int col) //显示扫雷矩阵 { printf(" "); for (int i = 1; i <= (col - 2); i++) //表头数字打印 { printf("%d ", i); } printf(" "); 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(" "); 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! "); continue; } if (show_board[x][y] != STYLE){ printf("Postion Is not * "); continue; } if (mine_board[x][y] == "1"){ printf("game over! "); ShowBoard(mine_board, ROW, COL); break; } show_board[x][y] = CountMines(mine_board, x, y); count--; } }
初始化好的扫雷矩阵
游戏体验结果
感兴趣的小朋友可以尝试下哦
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_45699237/article/details/117575623