c简单的扫雷扫雷游戏

来源:互联网 发布:打击网络犯罪的图片 编辑:程序博客网 时间:2024/05/03 21:17
#include<stdio.h>#include<stdlib.h>//#include"Global.h"//#include"EmployeeManage.h"typedef struct Node_T{int x;int y;}Node;Node *head = NULL;int a[9][9] = {0};//初始化9*9地图int iCount = 0;void Preorder(Node *head){Node *p = head;Node *pt = NULL;if(a[p->x-1][p->y-1] == 0 && (p->x)>0 && (p->y)>0){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x-1;pt->y = p->y-1;a[p->x-1][p->y-1] += 10;Preorder(pt);free(pt);}else if(a[p->x-1][p->y-1]>0 && a[p->x-1][p->y-1]<10 && (p->x)>0 && (p->y)>0){iCount++;a[p->x-1][p->y-1] += 10;}if(a[p->x][p->y-1] == 0 && (p->y)>0){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x;pt->y = p->y-1;a[p->x][p->y-1] += 10;Preorder(pt);free(pt);}else if(a[p->x][p->y-1]>0 && a[p->x][p->y-1]<10 && (p->y)>0){iCount++;a[p->x][p->y-1] += 10;}if(a[p->x+1][p->y-1] == 0 && (p->x)<8 && (p->y)>0){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x+1;pt->y = p->y-1;a[p->x+1][p->y-1] +=10;Preorder(pt);free(pt);}else if(a[p->x+1][p->y-1]>0 && a[p->x+1][p->y-1]<10 && (p->x)<8 && (p->y)>0){iCount++;a[p->x+1][p->y-1] += 10;}if(a[p->x-1][p->y] == 0 && (p->x)>0){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x-1;pt->y = p->y;a[p->x-1][p->y] += 10;Preorder(pt);free(pt);}else if(a[p->x-1][p->y]>0 && a[p->x-1][p->y]<10 && (p->x)>0){iCount++;a[p->x-1][p->y] += 10;}if(a[p->x+1][p->y] == 0 && (p->x)<8){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x+1;pt->y = p->y;a[p->x+1][p->y] += 10;Preorder(pt);free(pt);}else if(a[p->x+1][p->y]>0 && a[p->x+1][p->y]<10 && (p->x)<8){iCount++;a[p->x+1][p->y] += 10;}if(a[p->x-1][p->y+1] == 0 && (p->x)>0 &&(p->y)<8){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x-1;pt->y = p->y+1;a[p->x-1][p->y+1] += 10;Preorder(pt);free(pt);}else if(a[p->x-1][p->y+1]>0 && a[p->x-1][p->y+1]<10 && (p->x)>0 &&(p->y)<8){iCount++;a[p->x-1][p->y+1] += 10;}if(a[p->x][p->y-1] == 0 && (p->y)>0){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x;pt->y = p->y-1;a[p->x][p->y-1] += 10;Preorder(pt);free(pt);}else if(a[p->x][p->y-1]>0 && a[p->x][p->y-1]<10 && (p->y)>0){iCount++;a[p->x][p->y-1] += 10;}if(a[p->x+1][p->y+1] == 0 && (p->x)<8 &&(p->y)<8){iCount++;pt = (Node*)malloc(sizeof(Node));pt->x = p->x+1;pt->y = p->y+1;a[p->x+1][p->y+1] += 10;Preorder(pt);free(pt);}else if(a[p->x+1][p->y+1]>0 && a[p->x+1][p->y+1]<10 && (p->x)<8 &&(p->y)<8){iCount++;a[p->x+1][p->y+1] += 10;}}int main(void){int iMineNum = 0;//表示雷的个数int i = 0;int j = 0;int x = 0;int y = 0;iMineNum = rand()%11;//随机产生了雷数for(i=0;i<iMineNum;i++)//根据雷的个数和随机产生的坐标布雷{x = rand()%9;y = rand()%9;if(a[x][y] == -1)i--;elsea[x][y] = -1;}for(i=0;i<9;i++)//对非雷区进行标记{for(j=0;j<9;j++){if(a[i][j] != -1 ){if(a[i-1][j] == -1 && i>0)a[i][j]++;if(a[i-1][j-1] == -1 && i>0 && j>0)a[i][j]++;if(a[i][j-1] == -1 && j>0)a[i][j]++;if(a[i+1][j] == -1 && i<8)a[i][j]++;if(a[i+1][j+1] == -1 && i<8 && j<8)a[i][j]++;if(a[i][j+1] == -1 && j<8)a[i][j]++;if(a[i-1][j+1] == -1 && i>0 && j<8)a[i][j]++;if(a[i+1][j-1] == -1 && i<8 && j>0)a[i][j]++;}}}for(i=0;i<9;i++)//初始化扫雷面板{for(j=0;j<9;j++)printf("%+d\t",a[i][j]);printf("\n");}for(i=0;i<9;i++)//初始化扫雷面板{for(j=0;j<9;j++)printf("*\t");printf("\n");}while(iCount < (81-iMineNum)){printf("请输入你选择的横坐标:");scanf("%d",&x);printf("请输入你选择的纵坐标:");scanf("%d",&y);if(a[x][y] == -1){printf("you lost the game\n");break;}else if(a[x][y]>0 && a[x][y]<8){a[x][y] +=10;iCount++;}else if(a[x][y] == 0){head = (Node*)malloc(sizeof(Node));iCount ++;head->x = x;head->y = y;Preorder(head);}else{printf("不能重复选该点\n");}system("cls");for(i=0;i<9;i++)//打印出已经标记的雷区{for(j=0;j<9;j++){if(a[i][j] >= 10)printf("%+d\t",a[i][j]%10);elseprintf("*\t");}printf("\n");}}free(head);return 0;} 

程序中随机数的获取有点问题,递归时候可能会存在内存泄漏,大家感兴趣的可以改改。因为课余写的像注释变量命名都不够得体,希望大家可以挑挑刺。

原创粉丝点击