回答編集履歴
1
追記
answer
CHANGED
@@ -39,4 +39,123 @@
|
|
39
39
|
ここでg_mine[x][y]がtrueのとき、「*」を表示するようになっています。
|
40
40
|
これだと何もしなくても「*」が出るのではないでしょうか。
|
41
41
|
|
42
|
-
あとopen関数が見当たらないのですが記載もれでしょうか?
|
42
|
+
あとopen関数が見当たらないのですが記載もれでしょうか?
|
43
|
+
|
44
|
+
----------以下追記--------------
|
45
|
+
参考としてコードを示します。ご自身のと比べて見て下さい。
|
46
|
+
```C
|
47
|
+
//min.c
|
48
|
+
|
49
|
+
#include<stdio.h>
|
50
|
+
#include<string.h>
|
51
|
+
#include<time.h>
|
52
|
+
#include<stdlib.h>
|
53
|
+
#include<stdbool.h>
|
54
|
+
|
55
|
+
#define MINE 10
|
56
|
+
#define BORD_wide 9
|
57
|
+
#define BORD_high 9
|
58
|
+
|
59
|
+
bool g_open[BORD_wide+2][BORD_high+2];
|
60
|
+
bool g_mine[BORD_wide+2][BORD_high+2];
|
61
|
+
char g_near[BORD_wide+2][BORD_high+2];
|
62
|
+
|
63
|
+
int init_board(){
|
64
|
+
int x,y,i;
|
65
|
+
|
66
|
+
for(x=0;x<11;x++){
|
67
|
+
for(y=0;y<11;y++){
|
68
|
+
g_mine[x][y]=false;
|
69
|
+
g_near[x][y]=0;
|
70
|
+
g_open[x][y]=false;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
for(i=0;i<10;i++){
|
75
|
+
int x,y;
|
76
|
+
do{
|
77
|
+
x=rand()%10;
|
78
|
+
y=rand()%10;
|
79
|
+
}while(g_mine[x][y]);
|
80
|
+
|
81
|
+
g_mine[x][y]=true;
|
82
|
+
g_near[x-1][y-1]+=1;
|
83
|
+
g_near[x][y-1]+=1;
|
84
|
+
g_near[x+1][y-1]+=1;
|
85
|
+
g_near[x-1][y]+=1;
|
86
|
+
g_near[x][y]+=1;
|
87
|
+
g_near[x+1][y]+=1;
|
88
|
+
g_near[x-1][y+1]+=1;
|
89
|
+
g_near[x][y+1]+=1;
|
90
|
+
g_near[x+1][y+1]+=1;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
const char *digitStr[]={
|
95
|
+
"1","2","3","4","5","6","7","8","9",
|
96
|
+
};
|
97
|
+
|
98
|
+
int pboard(bool sweeped){
|
99
|
+
int x,y;
|
100
|
+
printf("\n 123456789\n");
|
101
|
+
|
102
|
+
for(y=1;y<=9;y++){
|
103
|
+
printf("%d",y);
|
104
|
+
|
105
|
+
for(x=1;x<=9;x++){
|
106
|
+
|
107
|
+
if(!g_mine[x][y])
|
108
|
+
printf("?");
|
109
|
+
else if(sweeped && g_mine[x][y]) //爆弾未発見時は非表示
|
110
|
+
printf("*");
|
111
|
+
else if(!g_near[x][y])
|
112
|
+
printf("#");
|
113
|
+
else
|
114
|
+
printf("%d",g_near[x][y]);
|
115
|
+
}
|
116
|
+
printf("\n");
|
117
|
+
}
|
118
|
+
printf("\n");
|
119
|
+
}
|
120
|
+
|
121
|
+
bool checkSweeped(){
|
122
|
+
int x,y;
|
123
|
+
for(x=1;x<=9;x++){
|
124
|
+
for(y=1;y<=9;y++){
|
125
|
+
if(!g_mine[x][y]&&!g_open[x][y])
|
126
|
+
return false;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
return true;
|
130
|
+
}
|
131
|
+
|
132
|
+
int main(void){
|
133
|
+
int xx,yy;
|
134
|
+
|
135
|
+
srand((int)time(NULL));
|
136
|
+
printf("start minsweeper!");
|
137
|
+
|
138
|
+
for(;;){
|
139
|
+
init_board();
|
140
|
+
bool sweeped=false;
|
141
|
+
|
142
|
+
while(!sweeped){
|
143
|
+
pboard(sweeped);
|
144
|
+
printf("if you stop the game,put control+c.\n");
|
145
|
+
printf("input the coordinate. [x][y] : ");
|
146
|
+
scanf("%d %d",&xx,&yy);
|
147
|
+
|
148
|
+
if(g_mine[xx][yy])
|
149
|
+
break;
|
150
|
+
sweeped=checkSweeped();
|
151
|
+
}
|
152
|
+
}
|
153
|
+
pboard();
|
154
|
+
if(sweeped)
|
155
|
+
printf("cleared!!\n");
|
156
|
+
else
|
157
|
+
printf("Oh,no!you've failed.");
|
158
|
+
}
|
159
|
+
return 0;
|
160
|
+
}
|
161
|
+
```
|