Windows经典小游戏–扫雷精装版
最开始玩的电脑游戏就是蜘蛛纸牌和扫雷了,那时候觉得很神奇的事情现在自己也可以做了。下面就展示一下C语言扫雷的代码。
首先创建一个“扫雷”的项目,这个项目中包含三个文件:一个game.h头文件,两个源文件test.c、game.c。

  • “game.h”:game.h文件中包含了扫雷用的所有头文件以及声明的函数。如下:
#ifndef __GAME_H__
#define __GAME_H__#define ROW 9//展示雷盘的行
#define COL 9//展示雷盘的列
#define ROWS ROW+2//雷盘的行
#define COLS COL+2//雷盘的列
#define MINE_NUM 10//扫雷游戏对应的游戏难度#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>void InitBoard(char board[ROWS][COLS], int rows, int cols, char c);//初始化雷盘
void ShowBoard(char show[ROWS][COLS], int row, int col);//展示雷盘
void SetMine(char mine[ROWS][COLS], int rows, int cols, int count);//埋雷
void Computer(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y);//计算雷数
void OpenMine(char show[ROWS][COLS], char mine[ROWS][COLS], char test[ROWS][COLS], int x, int y);//展开雷阵
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], char test[ROWS][COLS], int x, int y);//排雷#pragma once
#endif //__GAME_H__
  • “test.c”:test.c文件中包含打印菜单函数、游戏规则函数和玩游戏的主函数。如下:
#include"game.h"
//打印菜单
void menu()
{printf("***********************************\n");printf("*******       1、play       *******\n");printf("*******       0、exit       *******\n");printf("***********************************\n");
}
//制定游戏规则
void game()
{int x = 0;int y = 0;int count = MINE_NUM;char mine[ROWS][COLS] = { 0 };//存放雷盘char show[ROWS][COLS] = { 0 };//排雷盘char test[ROWS][COLS] = { 0 };//测试是否展开的雷盘InitBoard(test, ROWS, COLS,'0');//初始化测试雷盘InitBoard(mine,ROWS,COLS,'0');//初始化雷盘InitBoard(show, ROWS, COLS, '*');//初始化展示雷盘SetMine(mine,ROWS,COLS,count);//埋雷FindMine(mine,show,test,x,y);//排雷
}
int main()
{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("输入错误,请重新选择!\n");break;}} while (input);return 0;
}
  • “game.c”:game.c文件中包含了game函数所实现功能的所有函数的定义。如下:
    初始化雷盘:InitBoard(char board[ROWS][COLS], int rows, int cols, char c);
    展示雷盘:ShowBoard(char show[ROWS][COLS], int row , int col);
    埋雷函数:SetMine(char mine[ROWS][COLS], int rows, int cols, int count);
    计算雷数:Computer(char show[ROWS][COLS],char mine[ROWS][COLS], int x, int y);
    展开雷阵:OpenMine(char show[ROWS][COLS], char mine[ROWS][COLS], char test[ROWS][COLS], int x, int y);
    排雷函数:FindMine(char show[ROWS][COLS], char mine[ROWS][COLS], char test[ROWS][COLS], int x, int y);
#include"game.h"
//初始化雷盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char c)
{memset(&board[0][0], c, rows*cols * sizeof(board[0][0]));
}
//展示雷盘
void ShowBoard(char show[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 ", show[i][j]);//打印每个格子}printf("\n");}printf("\n\n");
}
//埋雷
void SetMine(char mine[ROWS][COLS], int rows, int cols,int count)
{int i = 0;int j = 0;while (count != 0){i = rand() % 9 + 1;j = rand() % 9 + 1;if (mine[i][j] == '0'){mine[i][j] = '1';count--;}}
}
//计算雷数
void Computer(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y)
{show[x][y] = mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1]- 7 * '0';
}
//展开雷阵
void OpenMine(char show[ROWS][COLS], char mine[ROWS][COLS], char test[ROWS][COLS], int x, int y)
{test[x][y] = '1';if (x > 0 && x < ROWS - 1 && y>0 && y < COLS - 1){Computer(show, mine, x, y);if (show[x][y] == '0'){Computer(show, mine, x-1, y);Computer(show, mine, x-1, y-1);Computer(show, mine, x-1, y+1);Computer(show, mine, x, y-1);Computer(show, mine, x, y+1);Computer(show, mine, x+1, y);Computer(show, mine, x+1, y-1);Computer(show, mine, x+1, y+1);if (show[x - 1][y] == '0'){if (test[x - 1][y] == '0'){OpenMine(show, mine, test, x-1, y);}}if (show[x - 1][y - 1] == '0'){if (test[x - 1][y - 1] == '0'){OpenMine(show, mine, test, x - 1, y - 1);}}if (show[x - 1][y + 1] == '0'){if (test[x - 1][y + 1] == '0'){OpenMine(show, mine, test, x - 1, y + 1);}}if (show[x][y - 1] == '0'){if (test[x][y - 1] == '0'){OpenMine(show, mine, test, x , y - 1);}}if (show[x][y + 1] == '0'){if (test[x][y + 1] == '0'){OpenMine(show, mine, test, x, y + 1);}}if (show[x + 1][y] == '0'){if (test[x + 1][y] == '0'){OpenMine(show, mine, test, x + 1, y);}}if (show[x + 1][y - 1] == '0'){if (test[x + 1][y - 1] == '0'){OpenMine(show, mine, test, x + 1, y - 1);}}if (show[x + 1][y + 1] == '0'){if (test[x + 1][y + 1] == '0'){OpenMine(show, mine, test, x + 1, y + 1);}}}}
}
//排雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], char test[ROWS][COLS], int x, int y)//排雷
{//ShowBoard(mine, ROW, COL);int ret = ROW * COL - MINE_NUM;int count = 0;while (1){int time0 = 0;int time1 = 0;int time2 = 0;ShowBoard(show, ROW, COL);time1 = ((unsigned int)time(NULL));printf("请输入您要排的坐标->\n");scanf("%d%d",&x,&y);if (x > 0 && x < ROWS - 1 && y>0 && y < COLS - 1){count++;if (mine[x][y] == '1'){if (count == 1){SetMine(mine, ROWS, COLS, count);mine[x][y] = '0';OpenMine(show, mine, test, x, y);}else{time2 = ((unsigned int)time(NULL));time0 = time2 - time1;printf("很遗憾你被炸死了!所用时间为:%ds\n", time0);ShowBoard(mine, ROW, COL);break;}}else{ret--;OpenMine(show, mine, test, x, y);}}else{printf("输入坐标错误,请重新输入!\n");}if (ret == 0){time2 = ((unsigned int)time(NULL));time0 = time2 - time1;printf("恭喜你,找到了所有的雷\n");printf("所用时间为:%ds\n", time0);ShowBoard(mine, ROW, COL);break;}}
}

测试结果如下:

Windows经典小游戏--扫雷精装版相关推荐

  1. Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk

    Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame2.0.1, pymunk5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏 ...

  2. 制作Java小游戏~扫雷游戏

    上大学之前没必要去花钱培训哈.四年的时间足够自学了 可以参考我一下的建议: 看一些视频和书籍,注意你需要把基础打好.现在小破站上等很多第三方网站上有免费的,其实质量很不错的我把我自己整理的一些比较好的 ...

  3. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  4. c++编写手机小游戏代码_经典小游戏大集合(C++ 源码)

    [实例简介] 五子棋 贪吃蛇 俄罗斯方块 黑白棋 连连看 推箱子 扫雷等7个小游戏 C++源码 VC6.0 下编译运行. [实例截图] [核心代码] 经典小游戏大集合(C源码) └── 经典小游戏大集 ...

  5. 几百款经典小游戏,有你的童年吗?

    疫情当下,小伙伴们出门记得戴口罩哦!有条件的尽量还是不要出门了,尤其是在京的小伙伴,一点要做好防护! 今天给大家分享一个游戏小礼包,里面260多部的经典小游戏,有小编小时候最喜欢的冒险岛,魂斗罗--( ...

  6. 【Devc++】8款经典小游戏

    我在CSDN网站上收集了8款c++经典小游戏 1.贪吃蛇 /************************贪吃蛇***********************/ /***************** ...

  7. C语言实训——经典小游戏马里奥开发day 1

    C语言实训--经典小游戏马里奥开发day 1 卷轴式地图 一.关于卷轴式地图 ​ 在之前的开发尝试之中,我曾经使用的是地图移动但是马里奥保持在一个固定的点来实现马里奥的移动,但是我发现了几个问题: 1 ...

  8. python经典小游戏-用Python设计一个经典小游戏:猜大小

    码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...

  9. 20行python代码的入门级小游戏-用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...

最新文章

  1. 为Delphi程序添加事件和事件处理器
  2. 使用python调用zabbix接口截取监控图并生成Word文档
  3. python第三方库无法下载_无法使用从PyCharm中下载的第三方库
  4. 欧洲两个研究团队开发出了让截肢者能感觉到并准确抓住物体的仿生手
  5. Git checkout:更新路径与切换分支不兼容
  6. Axure RP 8.0软件安装教程
  7. java for循环 暂停_类中的2个for循环不想在第一次迭代后迭代c [暂停]
  8. 在Mac里给Terminal终端自定义颜色
  9. hdu 3038 HowManyAnswersAreWrong 并查集
  10. SQL删除语句同时向备份表插入数据
  11. C++ Primer 5th 源代码使用说明
  12. android 让程序在后台运行,android – 如何让我的应用程序在后台运行?
  13. 面向部件的整车E/E架构开发咨询服务
  14. 搜狗输入法双拼 linux,Ubuntu搜狗输入法设置双拼
  15. PHP友情链接检测代码
  16. SQLmap注入学习实战 —— dvwa 从low到impossble
  17. JAVA微商城_O2O微门店SAAS系统
  18. vipkid和vipjr比较,哪个更适合小升初学习?
  19. 每日一学33——Unity点击UGUI按钮后,再按空格键会自动触发按钮
  20. python一元线性回归的优点_Python数据分析之一元线性回归

热门文章

  1. python二维表转一维表_【习题】一维表转二维表
  2. APP闪退有哪些原因造成的?
  3. 大学计算机基础教程实验答案,大学计算机基础试验教程习题参考答案
  4. i.MX6ULL终结者电容触摸实验程序设计
  5. TiDB | TiDB在5A级物流企业核心系统的应用与实践
  6. 点击右键计算机属性弹出任务管理器,win10查看内存条型号的步骤
  7. 用二维数组进行学生的成绩排序和计算
  8. ForkJoinPool的使用及基本原理
  9. 物理建模钢琴-Arturia Piano V2 v2.5.0.3410 MacOSX
  10. IT软件创业之 -- 电脑设备买过来都是钱,卖出去都是废铁