C语言学习教程,用C语言编写扫雷游戏
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下
关于扫雷优化
1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置。
2.使用宏常量,后期可以任意修改游戏难度。
3.关于扫雷拓展模块,目前使用的方法比较low,若周围均没有,则全部显示。
4.剩余位置数使用全局变量count,必须考虑拓展之后count变化。
有待改进之处
1.需设计标记雷的步骤,增加用户体验。
2.拓展方式有待改进。
3.界面布局仍需要进行优化。
这里推荐一下我建的C/C++语言学习交流秋秋裙,前三位是:110,中间三位是:355,最后三位是:025,里面有学习不错视频教程、开发工具、电子书籍,完整的项目源码等,专业的老师解答问题!
扫雷游戏代码
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#include<time.h>
#define ROW 12
#define COL 12
#define MINE_NUM 15
#define TOTAL 100
#pragma warning(disable:4996)
int count = TOTAL;
void inter(){printf("=======================\n");printf("=======游戏菜单========\n");printf("======1.开始游戏=======\n");printf("========2.退出=========\n");printf("=======================\n");printf("请输入您的选择: \n");
}
int GetRandIndex(int start, int end){return rand() % (end - start + 1) + start;
}
void layout(char mine[][COL], int row, int col){srand((unsigned long)time(NULL));int count = 0;while (count<MINE_NUM){int x = GetRandIndex(1, 10);int y = GetRandIndex(1, 10);if (mine[x][y] == '0'){mine[x][y] = '1';count++;}}
}void Board(char board[][COL], int row, int col){printf(" ");int i = 1;for (; i <= 10; i++){printf(" %d ", i);}printf("\n----");for (i = 1; i <= 29; i++){printf("-");}printf("\n");for (i = 1; i <= 10; i++){printf("%2d|",i);int j = 1;for (; j <= 10; j++){printf(" %c|", board[i][j]);}printf("\n");int k = 1;for (k = 1; k <= 11; k++){printf("---");}printf("\n");}}char GetMines(char mine[][COL],int row,int col){return mine[row - 1][col - 1] + mine[row - 1][col] + mine[row - 1][col + 1]\+ mine[row][col - 1] + mine[row][col + 1]\+ mine[row + 1][col - 1] + mine[row + 1][col] + mine[row +1][col + 1]-7*'0';
}
void expand(char mine[ROW][COL], char board[ROW][COL], int x, int y){if ((x >= 1) && (y >= 1) && (x <= ROW) && (y <= COL)){if (GetMines(mine, x, y) == '0'){if (x > 1 && x < 10 && y>1 && y < 10){count = count - 8;}else if((x==1&&y==1)||(x==10&&y==10) || (x == 1 && y == 10) || (x == 10 && y == 1)) {count -= 3;}else {count -= 5;}board[x - 1][y - 1] = GetMines(mine, x-1, y-1);board[x - 1][y] = GetMines(mine, x - 1, y);board[x - 1][y + 1] = GetMines(mine, x - 1, y + 1);board[x][y - 1] = GetMines(mine, x , y - 1);board[x][y + 1] = GetMines(mine, x , y + 1);board[x + 1][y - 1] = GetMines(mine, x + 1, y - 1);board[x + 1][y] = GetMines(mine, x + 1, y);board[x + 1][y + 1] = GetMines(mine, x + 1, y + 1);}}
}
void Game(){char mine[ROW][COL]; char board[ROW][COL]; memset(mine,'0',sizeof(mine));memset(board, '*', sizeof(board));layout(mine, ROW, COL);Board(mine, ROW, COL);int x = 0;int y = 0;while (1){int i = 0;Board(board, ROW, COL);printf("请选择您要排除的位置: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= ROW - 2 && y >= 1 && y <= COL - 2){if (mine[x][y] == '0'){char num = GetMines(mine,x,y);board[x][y] = num;expand(mine, board, x, y);Board(board, ROW, COL);count--;if (count == MINE_NUM){Board(board, ROW, COL);printf("你赢了!\n");break;}}else{printf("您输了!\n");Board(mine, ROW, COL);break;}printf("还有%d个位置 \n", count);}else{printf("你输入的坐标有误,请重新输入!\n");}}
}
int main(){int quit = 0;int select = 0;while (!quit){inter();scanf("%d", &select);switch (select){case 1:Game();Sleep(5000);system("cls");break;case 2:printf("再见!\n");quit = 1;break;default:printf("您的输入不正确,请重新输入!\n");break;}}system("pause");return 0;
}
相关运行样例
以上就是本文的全部内容,希望对大家的学习有所帮助
C语言学习教程,用C语言编写扫雷游戏相关推荐
- C语言第十二课:编写扫雷游戏(综合练习2)
目录 前言: 一.文件建立: 1.头文件game.h: 2.函数定义文件game.c: 3.工程测试文件test.c: 二.编写井字棋游戏: 1.程序整体执行思路: 2.menu菜单: 3.game游 ...
- c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...
- 转 LUA语言学习教程
转 LUA语言学习教程 写在最前面,为什么要了解LUA语言?因为WOW的宏甚至插件的编写都离不开LUA!功欲擅其事,必先利其器,如果想玩转魔兽世界,而不是被魔兽世界玩的话,先来学习一下LUA语言吧! ...
- LUA语言学习教程(转)
转自:http://www.cnblogs.com/chuncn/archive/2010/07/03/1770464.html 写在最前面,为什么要了解LUA语言?因为WOW的宏甚至插件的编写都离不 ...
- C语言学习教程:搬山游戏开发源码
C语言学习教程:搬山游戏开发源码 #include<stdio.h> void main() {int n,k,x,y,cc,pc,g;clrscr();puts("****** ...
- 最新go语言学习教程
go语言学习教程 集合了连接go routine.go连接redis.go连接kafka等示例,所有代码均经过实践,可以直接使用 GitHub - fastbpmn/go-study: go语言的个人 ...
- iOS开发Swift语言学习教程-欧阳坚-专题视频课程
iOS开发Swift语言学习教程-16345人已学习 课程介绍 Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...
- Go语言学习教程(十一)
一.结构体指针 * 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成 * 可以结合new(T)函数创建结构体指针 peo := new(People) //因为结构体本质是 ...
- C语言学习教程:超级玛丽游戏开发源码分享
C语言学习教程:超级玛丽游戏开发源码分享 这里推荐一下我建的C/C++语言学习交流秋秋裙,秋秋搜索群名称:小凯C/C++语言学习之家,裙里有不错的学习教程,从入门到项目实战.学习开发用到的开发工具,专 ...
- net语言学习教程 net语言从入门到精通视频教程
net语言学习教程_0基础学net语言也可以,空闲时间学习,不耽误上班.2019年net语言新课程已经上线,多种课程任您选,随到随学,互动性强,效果好! NET语言学习介绍 NET学习课程说明 NET ...
最新文章
- 用C#实现FTP搜索引擎
- NetDevOps — NETCONF 协议
- socket传输过程
- python学习使用
- [编程题]数字分类 (20)
- 三种Ext提交数据的方法(转)
- Java开源项目EZMorph简介
- 使用Aptana搭建Python开发环境
- 【netty】Netty并发工具-Promise
- 通过函数名字符串调用函数【C语言版】
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- 关于单细胞批次矫正那些事(一)
- 如何开启/关闭Pages文稿上的字数统计功能?
- 【机器学习】图像预处理
- 财智理财7破解思路与总结
- 静态网络爬虫之Xpath学习
- Leslie cheung's Speech
- mac被限制什么意思_苹果ip完美解决电脑ip被限制问题
- 小猿日记(8) - 接口优化从13秒到3秒,我做了什么
- Java反射机制的原理及作用