这篇文章主要介绍了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语言怎样实现扫雷游戏”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。