C语言_扫雷
来源:互联网 发布:淘宝店卖什么好呢 编辑:程序博客网 时间:2024/06/08 09:15
做一个扫雷的游戏,首先分析一下扫雷需要实现的功能:
1.选择一个位置,如果该位置是雷则结束游戏,并显示所有雷的位置。如果不是雷则显示该位置周围雷的数量。
2.如果周围没有雷,则该位置显示空,并且周围如果也为空则一并展开。
3.第一次选择时必定不是雷
4.当盘上剩余的位置只有雷了,则游戏也结束,并且玩家胜利。
然后可以用两个二维数组,一个数组保存雷的排布,一个数组显示游戏界面,假设是10*10的界面的话,数组大小应该为12*12,周围一圈全为0,以便雷布在边界时,周围的数字更好的计算。
头文件部分:
#ifndef _GAME_H_#define _GAME_H_#include <stdio.h>#include <time.h>#include <stdlib.h>#define ROW 11#define COL 11#define ROWS ROW+1#define COLS COL+1#define EASY 10int game(); //游戏实现void fill_mine(char arr[ROWS][COLS]); //随机布雷void show_mine(char show[ROWS][COLS]); //展示该数组void clean_show(char show[ROWS][COLS]); //初始化该数组void IS_mine(char arr[ROWS][COLS], char show[ROWS][COLS], int x, int y); //判断该位置周围雷的个数,没有雷则展开void copy(char arr[ROWS][COLS], char show[ROWS][COLS]); //将雷的位置显示在显示数组里#endif //game.h
主菜单部分:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include "game.h"void meau(){printf("****************************************\n");printf("********1.开始扫雷 0.退出扫雷********\n");printf("****************************************\n");printf("请选择:");}int main(){int a=1;while (a){meau();scanf("%d", &a);if (a != 1 && a !=0){printf("输入错误,请重新输入\n");}else if (1 == a){game();}}printf("谢谢使用!\n");return 0;}
游戏功能实现部分:
int game(){char arr[ROWS][COLS];char show[ROWS][COLS];int x, y;int cout = 0;clean_show(arr);fill_mine(arr);clean_show(show);show_mine(show);for (;;){cout++;printf("请输入坐标:x,y>");scanf("%d%d", &x, &y);if (x<1 || x>10 || y<1 || y>10){printf("输入不合法!\n");}else if ('*' == arr[x][y]){if (1 == cout){clean_show(arr);fill_mine(arr);IS_mine(arr, show, x, y);show_mine(show);}else{printf("你被炸死了!\n");copy(arr, show);show_mine(show);break;}}else{IS_mine(arr,show, x, y);show_mine(show);if (win(show)){printf("你赢了\n");show_mine(arr);break;}}}return 0;}
各函数定义:
#define _CRT_SECURE_NO_WARNINGS#include "game.h"void fill_mine(char arr[ROWS][COLS]) //随机布雷{int i, j;int ret = 0;srand((unsigned int)time(NULL));do{i = rand() % 10;j = rand() % 10;if (arr[i+1][j+1] != '*') //最外一圈不布雷{arr[i+1][j+1] = '*';ret++;}} while (ret <= EASY);}void show_mine(char show[ROWS][COLS]){int i, j;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (0 == i){printf("%2d ", j);}else if (0 == j){printf("%2d ", i);}else{printf("%2c ", show[i][j]);}}printf("\n");}}void clean_show(char show[ROWS][COLS]){int i, j;for (i = 0; i < ROWS; i++){for (j = 0; j < COLS; j++){show[i][j] = '0';}}}void copy(char arr[ROWS][COLS], char show[ROWS][COLS]){int i, j;for (i = 1; i < ROW; i++){for (j = 1; j < COL; j++){if ('*' == arr[i][j]){show[i][j] = arr[i][j];}}}}void IS_mine(char arr[ROWS][COLS], char show[ROWS][COLS], int x, int y){int cout;cout = 0;if ((x >= 1 && x <= 10 && y >= 1 && y <= 10) && '0' == show[x][y]){cout = ('*' == arr[x - 1][y + 1]) + ('*' == arr[x][y + 1]) + ('*' == arr[x + 1][y + 1])+ ('*' == arr[x - 1][y]) + ('*' == arr[x + 1][y])+ ('*' == arr[x - 1][y - 1]) + ('*' == arr[x][y - 1]) + ('*' == arr[x + 1][y - 1]);if (cout != 0){show[x][y] = cout + '0';}else{show[x][y] = ' ';if (y > 0 && show[x][y - 1] == '0'){IS_mine(arr, show, x, y - 1);}if (x > 0 && show[x - 1][y] == '0'){IS_mine(arr, show, x - 1, y);}if (y < COL && show[x][y + 1] == '0'){IS_mine(arr, show, x, y + 1);}if (x < ROW && show[x + 1][y] == '0'){IS_mine(arr, show, x + 1, y);}}}}int win(char show[ROWS][COLS]){int i, j;int cout = 0;for (i = 1; i < ROW; i++){for (j = 1; j < COL; j++){if ('0' == show[i][j]){cout++;}}}if (10 == cout){return 1;}else return 0;}
运行结果:
阅读全文
0 0
- C语言_扫雷
- C/C++_扫雷
- C语言扫雷源码
- C语言扫雷程序
- C语言扫雷
- C语言扫雷基础
- C语言扫雷
- C语言小游戏“扫雷”
- C语言-扫雷游戏
- c语言编写扫雷
- c语言扫雷游戏
- c语言扫雷程序
- 扫雷小游戏【C语言】
- C语言实现扫雷
- c语言实现扫雷
- C语言实现扫雷
- c语言扫雷游戏
- c语言小游戏---扫雷
- 【bzoj4719】[Noip2016]天天爱跑步
- 1096. Consecutive Factors (20)
- Java相关技术点及技术内容
- 1.1关于数据挖掘
- SpannableString 实现TextView的各种绚丽效果
- C语言_扫雷
- PHP求某二维数组,某一列元素的最大最小值
- Nginx 重启错误
- LUA中的协成特性
- unity坐标点的一些理解
- 解决:phpMyAdmin:The mbstring extension is missing. Please check your PHP configuration
- java自学1--java基础
- POJ-2184 Cow Exhibition (带负坐标的01背包 坐标平移)
- 使用Jsonlib将对象转换成json格式数据