扫雷小游戏作为初学c语言的小白有很大的帮助,其中用到了函数的定义,函数的声明,循环语句,数组思想等等知识,对于代码理解和设计代码思路有很大的帮助,本文就详细介绍了代码的各个步骤和运行结果。希望给到和我一样的小白一点帮助。
- //game.h头文件
- #include<stdio.h>
- #include<stdlib.h>
- #include<time.h>
- #define ROW 9//定义了界面的长宽,可以直更改ROW,COL的值,避免了程序中数字重复出现
- #define COL 9
- #define ROWS ROW+2
- #define COLS COL+2
- #define EASYCOUNT 10//定义了雷的个数,即游戏难度,也可以运用再测试时,比如在通关界面时,直接可以得到结果。
- //初始化扫雷棋盘
- void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
- void DispalyBoard(char board[ROWS][COLS], int row, int col);
- void SetMine(char mine[ROWS][COLS], int row, int col);
- void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
- //game.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include "game.h"
- void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)//该函数的作用是为数组初始化,设计展示的界面
- {
- int i = 0;
- int j = 0;
- for (i = 0; i < rows; i++)
- {
- for (j = 0; j < cols; j++)
- {
- board[i][j] = set//set可以更改为各种字符,随你喜欢;
- }
- }
- }
- void DispalyBoard(char board[ROWS][COLS], int row, int col)//打印数组函数
- {
- int i = 0;
- int j = 0;
- for ( i = 0; i <=row; i++)
- {
- printf("%-2d", i);
- }
- printf("\n");
- for (i = 1; i <= row; i++)
- {
- printf("%d", i);
- for (j = 1; j <= col; j++)
- {
- printf("%2c", board[i][j]);
- }
- printf("\n");
- }
- }
- void SetMine(char mine[ROWS][COLS], int row, int col)//布置雷的函数
- {
- int count = EASYCOUNT//难度,可以在头文件中更改;
- while (count)
- {
- int x = rand() % row + 1;
- int y = rand() % col + 1;
- if (mine[x][y]=='0')
- {
- mine[x][y] = '1' ;
- count--;
- }
- }
- }
- int GetMineCount(char mine[ROWS][COLS], int x, int y)//返回值,即在玩家输入坐标时,判断该坐标有没有雷,如果没有返回周围一圈的雷数
- {
- return (mine[x - 1][y] +
- mine[x - 1][y - 1] +
- mine[x][y - 1] +
- mine[x + 1][y - 1] +
- mine[x + 1][y] +
- mine[x][y + 1] +
- mine[x+1][y + 1] +
- mine[x - 1][y + 1] - 8 * '0');
- }
- void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
- {
- int x = 0;
- int y = 0;
- int win = 0;
- while (win-row*col-EASYCOUNT)
- {
- printf("请输入要排查的坐标:>");
- scanf("%d%d", &x, &y);
- if (x >= 1 && x <= row && y >= 1 && y <= col)
- {
- if (mine[x][y] == '1')
- {
- printf("很不幸,你被炸死了\n");
- DispalyBoard(mine, row, col);
- break;
- }
- else
- {
- int count = GetMineCount(mine,x,y);
- show[x][y] = count + '0';
- DispalyBoard(show, row, col);
- win++;
- }
- if (win == row*col - EASYCOUNT)
- {
- printf("恭喜你通关了!!!\n");
- DispalyBoard(mine, row, col);
- }
- }
- else
- {
- printf("注意输入范围,请重新输入:>\n");
- }
- }
- }
- //paly.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include"game.h"
- void menu()//菜单功能
- {
- printf("********************\n");
- printf("**** 1.paly ****\n");
- printf("********************\n");
- printf("**** 0.out ****\n");
- }
- void game()
- {
- //雷的信息储存
- //1.布置好的雷的信息:
- char mine[ROWS][COLS] = { 0 };
- //2.排查出的雷的信息:
- char show[ROWS][COLS] = { 0 };
- //初始化:
- InitBoard(mine, ROWS, COLS,'0');
- InitBoard(show, ROWS, COLS,'*');
- //打印棋盘:
- //DispalyBoard(mine, ROW, COL);
- //DispalyBoard(show, ROW, COL);
- //布置雷:
- SetMine(mine, ROW, COL);
- //打印布置好的雷
- //DispalyBoard(mine, ROW, COL);
- DispalyBoard(show, ROW, COL);
- //排查雷
- FindMine(mine,show, ROW, COL);
- }
- void test()
- {
- srand((unsigned)time(NULL));
- int input = 0;
- do
- {
- menu();
- printf("请根据菜单选择:>\n");
- scanf("%d", &input);
- switch (input)
- {
- case 1:
- game();
- break;
- case 0:
- printf("退出游戏:>\n");
- break;
- default:
- printf("输入错误,请重新输入:>\n");
- break;
- }
- } while (input);
- }
- int main()
- {
- test();
- return 0;
- }
菜单界面:
运行时的扫雷界面(参考坐标为玩家提供方便):
假如踩雷,游戏失败界面:
排雷完毕游戏通关的界面:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
原文链接:https://blog.csdn.net/IRON__MAN__/article/details/105169093