質問: ### 前提・実現したいこと (「」内の0は踏んでいないところ、1は踏んだところです。) 一次元マインスイーパーの作成 1.プログラム側で0から9までの整数をランダムに二つ選ぶ.(これが地雷の位置となる.) 2.「0~9」までの整数を入力してください:」と表示する. 3.キーボードより整数を入力する. 4.入力された整数によって,以下の処理を行う. A) 1で選んだ整数と同じであれば「地雷を踏みました!!」と表示してゲームを終了 する. B) A)以外の場合は,「0000010000」のようにこれまで入力をした場所に関する情報 を表示して2へ戻る. ここで,*はまだ入力されていない場所, ○は入力を受け付けたが地雷がなかった場 所。 C) 地雷の場所以外全ての場所を試したら,「おめでとうございます.全ての地雷を特 定しました.」と表示してゲーム終了する. ■ 実行結果例 「0~9」までの整数を入力してください.:5 「0000010000」 「0~9」までの整数を入力してください.:1 「0100010000」 「0~9」までの整数を入力してください.:3 「0101010000」 「0~9」までの整数を入力してください.:9 「0101010001」 「0~9」までの整数を入力してください.:8 「0101010011」 「0~9」までの整数を入力してください.:7 「0101010111」 「0~9」までの整数を入力してください.:6 地雷を踏みました. という条件のもと実行結果を出したいです。 ワイル文やdoワイル文などは習ってなくfor文、if文、あとは常識の範囲の文(scan,printfなど)しか使えません。 ### 発生している問題・エラーメッセージ ``` エラーメッセージ ``` ### 該当のソースコード ``` #include #include #include int main(void) { int a,b,c,d,e,f; srand(time(NULL)); a=rand()%9+1; b=rand()%9+1; for(d=1;d<=10;d++) { printf("「0〜9」までの整数を入力してください:"); scanf("%d",&e); for(f=1;f<=10;f++) { if(e==a||e==b) { printf("地雷を踏みました\n"); break; } else if(f==e) { e++; printf("○ "); } else { e++; printf("*"); } } printf("\n"); } return 0; } ``` ### 試したこと 上記のことを試してみました。 ### 補足情報(言語/FW/ツール等のバージョンなど) できれば、実行結果になるソースコードではなく、その実行結果になるまでの過程をヒント形式で答えてくれるとありがたいです。
回答: ・10個の配列が必要(入力済みの位置を覚えておくため) ・入力できる範囲は10個で、内2個は爆弾なので、最大8回ループさせればよい 但し、入力済みの場合の処理は必要 簡単に書くとこんな流れでしょうか。 ``` 配列[10] 爆弾の位置決定 for(8回ループ){ 入力 配列と比較して入力済みチェック 爆弾の位置と比較 同じ→地雷を踏みました 異なる→配列に格納 } 地雷を踏まなかった→おめでとうございます ``` それから、気になる箇所があったので指摘しておきます。 `rand()%9+1`では、1~9になりそう。`rand()%10`で良いのでは。 `if(e==a|e==b)` ORの書き方が違います。`||`です。