失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 用C语言实现一个简单的扫雷小游戏(附全代码及教程)

用C语言实现一个简单的扫雷小游戏(附全代码及教程)

时间:2021-07-09 22:33:59

相关推荐

用C语言实现一个简单的扫雷小游戏(附全代码及教程)

本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下:

首先,创建一个text.c文件:

编写主函数:

int main(){test();return 0;}

定义test()函数,开始实现

void test(){printf("扫雷游戏!\n");int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏!\n");break;default:printf("选择错误!请重新选择!");break;}} while (input);}

实现menu()函数,制作一个简易的游戏开始界面:

//扫雷游戏#include "game.h"void menu(){printf("*************************\n");printf("*** 1.玩 0.不玩 ***\n");printf("*************************\n");}

制作game()函数,整个扫雷游戏的实现在这里面定义:

void game(){//雷的信息//1.布置好的雷的信息char mine[ROWS][COLS] = { 0 };//11*11//2.排查出雷的信息char show[ROWS][COLS] = { 0 };//初始化InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//打印棋盘//DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//扫雷FindMine(mine, show, ROW, COL);}

随后,创建一个头文件game.h:

在头文件中调用库函数及声明要实现的函数,然后其它文件调用头文件,这样就可以使库函数避免重复调用:

#pragma once#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 78#include<stdio.h>#include<stdlib.h>#include<time.h>void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);void DisplayBoard(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文件,用于函数的实现:

#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;}}}void DisplayBoard(char board[ROWS][COLS], int row, int col){int i = 0;int j = 0;//打印列号for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}}void SetMine(char mine[ROWS][COLS], int row, int col){int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}//0 1 2 3x//1 1 1 1//2 1 1 1//3 1 1 1//yint get_mine_count(char mine[ROWS][COLS],int x,int y){return mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x - 1][y] +mine[x + 1][y] +mine[x - 1][y + 1] +mine[x][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- EASY_COUNT){printf("请输入坐标:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){//合法的坐标//1.踩到雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了!\n");DisplayBoard(mine, ROW, COL);break;}else{//2.没踩到int count = get_mine_count(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, row, col);win++;}}else{printf("输入错误,请重新输入:");}}if (win == row*col - EASY_COUNT){printf("恭喜你,扫雷成功!\n");DisplayBoard(mine, ROW, COL);}}

代码运行:

注意事项:

1.所有的库函数声明都在头文件中,其它文件只需调用头文件即可,避免重复定义;

2.对于棋盘等数值的定义,最好用#define在头文件中定义,其它函数再使用,这样可以方便后期修改:

3.注意,定义棋盘的时候,如果是要玩9*9的扫雷,就定义一个11*11的棋盘(ROWS和COLS),这样方便编写时处理边界的问题,以下图为例:

真正下棋的地方在内框。

今天的扫雷小游戏就制作到这里,感谢您的观看,谢谢大家!

动动你敲代码无比666的小手,为我点个赞呗!谢谢您!

有问题也可以在评论区留言哦!

如果觉得《用C语言实现一个简单的扫雷小游戏(附全代码及教程)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。