###前提・実現したいこと
centのcmd上でc言語のマインスイーパーを作ろうとしています。
###発生している問題・エラーメッセージ
乱数が重複することと、最初から盤面上に爆弾の位置が表示されてしまい、それに加えて座標を入力してもopenできません。
エラーメッセージ
エラーメッセージはありません。
###該当のソースコード
//min.c
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<stdbool.h>
#define MINE 10
#define BORD_wide 9
#define BORD_high 9
bool g_open[BORD_wide+2][BORD_high+2];
bool g_mine[BORD_wide+2][BORD_high+2];
char g_near[BORD_wide+2][BORD_high+2];
int init_board(){
int x,y,i;
for(x=0;x<11;x++){
for(y=0;y<11;y++){
g_mine[x][y]=false;
g_near[x][y]=0;
g_open[x][y]=false;
}
}
for(i=0;i<10;i++){
int x,y;
do{
x=rand()%10;
y=rand()%10;
}
while(g_mine[x][y]);
g_mine[x][y]=true;
g_near[x-1][y-1]+=1;
g_near[x][y-1]+=1;
g_near[x+1][y-1]+=1;
g_near[x-1][y]+=1;
g_near[x][y]+=1;
g_near[x+1][y]+=1;
g_near[x-1][y+1]+=1;
g_near[x][y+1]+=1;
g_near[x+1][y+1]+=1;
}
}
const char digitStr[]={
"1","2","3","4","5","6","7","8","9",
};
int pboard(){
int x,y;
printf("\n 123456789\n");
for(y=1;y<=9;y++){
printf("%d",y);
for(x=1;x<=9;x++){
if(!g_mine[x][y])
printf("?");
else if(g_mine[x][y])
printf("");
else if(!g_near[x][y])
printf("#");
else
printf("%d",g_near[x][y]);
}
printf("\n");
}
printf("\n");
}
bool checkSweeped(){
int x,y;
for(x=1;x<=9;x++){
for(y=1;y<=9;y++){
if(!g_mine[x][y]&&!g_open[x][y])
return false;
}
}
return true;
}
int main(void){
int xx,yy;
srand((int)time(NULL));
printf("start minsweeper!");
for(;;){
init_board();
bool sweeped=false;
while(!sweeped){
pboard();
printf("if you stop the game,put control+c.\n");
printf("input the coordinate. [x][y] : ");
scanf("%d %d",&xx,&yy);
open(xx,yy); if(g_mine[xx][yy]) break; sweeped=checkSweeped(); } pboard(); if(sweeped) printf("cleared!!\n"); else printf("Oh,no!you've failed.");
}
return 0;
}
###試したこと
どこを直せばよいかわからず、下手に手を加えるのが怖くて何もできていません。
###補足情報(言語/FW/ツール等のバージョンなど)
c言語 emacs gcc開発環境
回答2件
あなたの回答
tips
プレビュー