teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/08/22 07:40

投稿

退会済みユーザー
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
+ ```