自治扫雷,基本功能全部实现

来源:互联网 发布:英国可以用淘宝吗 编辑:程序博客网 时间:2024/06/05 16:23
#ifndef _MINE_H__#define _MINE_H__#include<stdlib.h>#include<time.h>#include<stdio.h>#include<string.h>#include<time.h>#define LINE 10//行#define COWS 10//列#define MINE 20//雷int GameOperation();void initialize(int n,int arr[LINE][COWS]);//初始化函数void PutMine(int arr[LINE][COWS]);void Show(int arr[LINE][COWS]);int win(int arr[LINE][COWS]);void maue();void GetCoordinate(int *p, int *q);//生成随机坐标int FindMine(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y, int count);void show_0(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y);void show(int arr[LINE][COWS]);#endif

这是头文件mine.h
#define _CRT_SECURE_NO_WARNINGS 1#include"mine.h"int main(){GameOperation();printf("\n");return 0;}
这块是test文件
#define _CRT_SECURE_NO_WARNINGS 1#include"mine.h"int GameOperation(){char judge = ' ';int SaveMine[LINE][COWS] = { 0 }, ShowMine[LINE][COWS] = { 0 };do{srand((unsigned int)(time(NULL)));initialize(0, SaveMine);//初始化SaveMineinitialize((int)'*', ShowMine);//初始化ShowMinemaue();//打印菜单flag1:judge = ' ';judge = getchar();fflush(stdin);if (judge == '2'){break;}else if (judge != '1' ){printf("输入错误请重新输入\n");goto flag1;}else{printf("游戏开始:\n");}PutMine(SaveMine);//show(SaveMine);show(ShowMine);int count = 0;do{int x = 0, y = 0;printf("请输入你要扫的坐标:\n");scanf("%d%d", &x, &y);fflush(stdin);//x += 2;//y += 2;int t = FindMine(SaveMine, ShowMine, x, y, count);//show(SaveMine);show(ShowMine);if (t == -1){printf("你输了\n");break;}int s = win(ShowMine);//判断是否胜利或者失败if(s == -1){printf("你赢了兄弟,老铁666!!!!!\n");break;}count++;} while (1);} while (1);return 0;}void initialize(int n, int arr[LINE][COWS]){//memset(arr, n, LINE*COWS*sizeof(arr[0][0]));for (int i = 0; i < LINE; i++){for (int j = 0; j < COWS; j++){arr[i][j] = n;}}}void maue(){printf("*********欢迎来到扫雷********\n");printf("**********1、开始************\n");printf("**********2、结束************\n");printf("*****************************\n");}void PutMine(int arr[LINE][COWS]){for (int i = 0; i < MINE; i++){int x = 0, y = 0;do{GetCoordinate(&x, &y);} while (arr[x][y] != 0);arr[x][y] = 1;}}void GetCoordinate(int *p, int *q)//生成随机坐标{*p = (rand() % (LINE - 2)) + 1;*q = (rand() % (COWS - 2)) + 1;}void show(int arr[LINE][COWS]){for (int i = 0; i < COWS - 1; i++){if (!i){printf("  ");}else{printf("%d ",i);}}printf("\n");for (int i = 1; i < COWS - 1; i++){printf("%d ", i);for (int j = 1; j < LINE - 1; j++){if (arr[i][j] == '*'){printf("* ");}else{printf("%d ", arr[i][j]);}}printf("\n");}}int FindMine(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y, int count){flag2:if (arr1[x][y] == 0){show_0(arr1, arr2, x, y);}else if (count == 0){arr1[x][y] = 0;int a = 0, b = 0;do{GetCoordinate(&a, &b);} while (arr1[a][b] != 0);arr1[a][b] = 1;goto flag2;}else return -1;return 0;}void show_0(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y){int m = arr1[x - 1][y - 1] + arr1[x - 1][y] + arr1[x - 1][y + 1] + arr1[x][y - 1] + arr1[x][y + 1] + arr1[x + 1][y - 1] + arr1[x + 1][y] + arr1[x + 1][y + 1];arr2[x][y] = m;if (m == 0){for (int i = -1; i <= 1; i++){for (int j = -1; j <= 1; j++){if ((i != 0 || j != 0) && (x + i) > 0 && (x + i) < LINE && (y + j) > 0 && (y + j) < COWS && arr2[x+i][y+j] == '*'){show_0(arr1, arr2, x + i, y + j);}}}}}int win(int arr[LINE][COWS]){int count = 0;for (int i = 1; i < LINE - 1; i++){for (int j = 1; j < COWS - 1; j++){if (arr[i][j] == '*'){count++;}}}if (count == MINE){return -1;}return 0;}这里就是主要的文件了   装逼的都在这  功能基本全都实现了。有点爽啊

0 0
原创粉丝点击