扫雷增强版
来源:互联网 发布:形势与政策论文 网络 编辑:程序博客网 时间:2024/04/30 03:52
之前写过一个普通版的扫雷,最近编写了一个增强版主要又包括了以下两个新功能:
1. 为了保证游戏体验第一次扫雷不被炸死,如果踩到雷上,那颗雷更换位置
2. 扫雷的时候如果选中位置周围没有雷将选中位置进行扩展
#ifndef _GAME_H_#define _GAME_H_#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define COUNT 10void Setmine(char arr[ROWS][COLS], int row, int col);void Inintmeun(char arr[ROWS][COLS], int row, int col, char set);void Output(char arr[ROWS][COLS], int row, int col);int Clean(char arr[ROWS][COLS], char arr1[ROWS][COLS], int row, int col);int num(char arr[ROWS][COLS], int x, int y);void Extend(char arr[ROWS][COLS], char arr1[ROWS][COLS], int x, int y);#endif
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){printf("*****************************\n");printf("**1.play game 0.exit **\n");printf("*****************************\n");printf("** 请通过键盘进行选择 **\n");}int main(){int n = 0;menu();scanf("%d", &n);int i = 0;char menu[ROWS][COLS];char game[ROWS][COLS];char set1 = '*';char set2 = '0';printf(" ");for (i = 1; i <= ROW; i++){printf(" %d ", i);}printf("\n");while (n){Inintmeun(menu, ROWS, COLS,set1);Inintmeun(game, ROWS, COLS, set2);Output(menu, ROW, COL);Output(game,ROW, COL);Setmine(game, ROW, COL);Output(game, ROW, COL);Clean(game,menu, ROWS, COLS);Output(menu, ROW, COL);n = 0;}system("pause");}
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void Inintmeun(char arr[ROWS][COLS], int row, int col, char set){memset(arr, set, row*col*sizeof(set));}void Output(char arr[ROWS][COLS], int row, int col){int x = 1;int y = 1;printf(" ");int n = 1;for (n = 1; n <=9; n++){printf(" %d ", n);}printf("\n");for (x = 1; x <= row; x++){printf(" %d ", x);for (y = 1; y <= col; y++){printf(" %c ", arr[x][y]);}printf(" %d", x);printf("\n");}printf("\n");}void Setmine(char arr[ROWS][COLS], int row, int col){int x = 0;int y = 0;int count = 0;srand((unsigned)time(NULL));while (count < COUNT){x = rand() % row + 1;y = rand() % col+ 1;if (arr[x][y] =='0'){arr[x][y] = '1';count++;}}}int num(char arr[ROWS][COLS], int x ,int y){int count = 0;if (arr[x + 1][y] == '1')count++;if (arr[x -1][y] =='1')count++;if (arr[x + 1][y+1] == '1')count++;if (arr[x + 1][y-1] == '1')count++;if (arr[x -1][y+1] == '1')count++;if (arr[x - 1][y-1] == '1')count++;if (arr[x][y-1] == '1')count++;if (arr[x][y+1] == '1')count++;return count;}int Clean(char arr[ROWS][COLS],char arr1[ROWS][COLS], int row, int col){int x = 0;int y = 0;int count = 0;int sum = 0;printf("请输入想要清除的坐标");scanf("%d", &x);scanf("%d", &y);while(((x >= 1) &&( x <= 9)) && ((y >= 1) && (y <= 9))){if (arr[x][y] == '1'){if (sum == 0){arr[x][y] = '0';int m = 0;int n = 0;int count1 = 0;srand((unsigned)time(NULL));while (count <1){m = rand() % row + 1;n = rand() % col + 1;if (arr[m][n] == '0'){arr[m][n] = '1';count++;}}sum++;count = num(arr, x, y);arr1[x][y] = count + '0';Extend(arr, arr1, x, y);Output(arr1, ROW, COL);}else{arr1[x][y] = '1';Output(arr1, ROW, COL);printf("被炸死了\n");return 0;}}else{sum++;count = num(arr, x, y);arr1[x][y] = ' ';Extend(arr, arr1, x, y);Output(arr1, ROW, COL);if (sum == ROW*COL - COUNT){printf("扫雷成功\n");return 0;}printf("请输入想要清除的坐标");scanf("%d", &x);scanf("%d", &y);}}printf("坐标不合法\n");return 0;}void Extend(char arr[ROWS][COLS], char arr1[ROWS][COLS], int x, int y){int i = -1;int j = -1;for (i = -1; i < 2; i++) //边界{for (j = -1; j < 2; j++){if (i != 0 || j != 0) // 避免排到自己注意此处的逻辑关系{if (x + i >= 1 && x + i <= ROW && y + j >= 1 && y + j <= COL) //x y坐标是否合法{if (arr1[x + i][y + j] == '*'&&arr[x + i][y + j] != '1'){int count = num(arr, x + i, y + j);if (count != 0){arr1[x + i][y + j] = count + '0';}else{arr1[x + i][y + j] = ' ';Extend(arr,arr1, x + i, y + j);}}}}}}}//void Extend(char arr[ROWS][COLS], char arr1[ROWS][COLS], int x, int y)//{//int n = 0;//if ((x<1) || (y<1) || (x>9) || (y>9))//return;//n = num(arr, x , y);//if (n == 0)//{////if (arr[x - 1][y] == '0')//{//if (arr1[x - 1][y] != ' ')//{////arr1[x - 1][y] = ' ';////}//////Extend(arr, arr1, x - 1, y);//}//if (arr[x + 1][y] == '0')//{//if (arr1[x + 1][y] != ' ')//{////arr1[x + 1][y] = ' ';////}//////Extend(arr, arr1, x + 1, y);//}//if (arr[x][y + 1] == '0')//{//if (arr1[x][y + 1] != ' ')//{////arr1[x][y + 1] = ' ';////}////Extend(arr, arr1, x, y + 1);//}//if (arr[x - 1][y + 1] == '0')//{//if (arr1[x - 1][y + 1] != ' ')//{////arr1[x - 1][y + 1] = ' ';////}////Extend(arr, arr1, x - 1, y + 1);//}//if (arr[x + 1][y + 1] == '0')//{//if (arr1[x + 1][y + 1] != ' ')//{////arr1[x + 1][y + 1] = ' ';////}////Extend(arr, arr1, x + 1, y + 1);//}//if (arr[x][y - 1] == '0')//{//if (arr1[x][y - 1] != ' ')//{////arr1[x][y - 1] = ' ';////}////Extend(arr, arr1, x, y - 1);//}//if (arr[x + 1][y - 1] == '0')//{//if (arr1[x + 1][y - 1] != ' ')//{////arr1[x + 1][y - 1] = ' ';////}////Extend(arr, arr1, x + 1, y - 1);//}//if (arr[x - 1][y - 1] == '0')//{//if (arr1[x - 1][y + 1] != ' ')//{////arr1[x - 1][y + 1] = ' ';////}////Extend(arr, arr1, x - 1, y - 1);//}//}//else//arr1[x][y] = n + '0';//}//void Extend(char arr[ROWS][COLS], char arr1[ROWS][COLS], int x, int y)//{//int a = 0;//int b = 0;//int n = 0;//a = x-1;//b = y;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//////n = num(arr, a , b);//if (n == 0)//{////if (arr1[a ][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a ][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a - 1;//}//a = x+1;//b = y;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a + 1;//}//a = x;//b = y+1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//b = b + 1;//}//a = x-1;//b = y+1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a - 1;//b = b + 1;//}//a = x+1;//b = y+1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a + 1;//b = b + 1;//}//a = x;//b = y-1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//b = b - 1;//}//a = x-1;//b = y-1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a - 1;//b = b - 1;//}//a = x+1;//b = y-1;//while (!((a<1) || (b<1) || (a>9) || (b>9)))//{//n = num(arr, a, b);//if (n == 0)//{////if (arr1[a][b] != ' ')//{//arr1[a][b] = ' ';//}//else//break;//}//else//{////arr1[a][b] = n + '0';//Extend(arr, arr1, a, b);//break;//}//a = a +1;//b = b - 1;//}////}
这里最后几个是我最初使用的函数,一直提示Stack Overflow,我在这里依然留下来,让大家看一下两者的区别,如果以后遇到问题的时候更改函数能有一个方向
最后附上一张程序运行图
阅读全文
0 0
- 扫雷增强版
- QT| C/C++之win98扫雷外挂增强版
- 扫雷(C#版)
- 扫雷 VB.net 版
- c#版扫雷网络版
- 扫雷游戏javascript版
- JS版扫雷
- [原创]JavaScript版扫雷
- 扫雷算法(C#版)
- java版扫雷
- 控制台版扫雷程序
- JavaScript版的扫雷
- java版扫雷小游戏
- C#版扫雷游戏
- Win32简易版扫雷
- java控制台版扫雷
- 扫雷测试版
- 扫雷(java版)
- hanooi汉诺塔递归问题
- 第十五周项目一(8)——验证算法之基数排序
- AlphaZero 成全场焦点,认知科学大牛唱反调:生活不是一场 Kaggle 竞赛!
- eclipse快捷键
- android包反编译相关
- 扫雷增强版
- HDOJ1408 盐水的故事(高精度)
- 手把手教你完成App端-微信支付Android
- 2017-12-09 杭电OJ2000 《ASCII码排序》
- android学习路线
- iOS开发UI篇—Quartz2D (四) 图形上下文栈,矩阵
- JAVA中的HTTP通信
- android apk文件内部结构
- Revit二次开发之创建双坡式屋顶及在屋顶开洞口【比目鱼原创】