マインスイーパのコードとバグの実装

 1. 掃海コードの実装はバックギャモンの実装と非常によく似ています。基本的には配列のアプリケーションです。まず、プロジェクト全体の一般的なアイデアを書き出す必要があります。たとえば、ゲーム タイトルは次のように描画されます。 do while () 関数を使用し、次に switch ステートメントを使用して、ゲームの特定の関数の呼び出し (1 からゲームを開始し、0 からゲームを終了するなど) を選択します。図に示すように:

ゲームの実装では 2 つのボードを初期化する必要があります。1 つのボードは地雷を配置するために使用され、もう 1 つのボードはプレイヤーが見るために印刷されます。なぜこの問題を解決するために配列を使用しないのかというと、プレイヤーは次のことを行う必要があるからです。掃海用の座標を入力した後、周囲の地雷の数を表示します。チェス盤でこれらの機能を実行するのは明らかに困難です。周囲にある地雷の数を計算するときに、地雷の数が座標に表示されるため、表示されている地雷の数と変更する既存の地雷の数を指定し、後の段階で数を計算するために 2 つのチェス盤を使用する場合、地雷が配置されているチェス盤の座標を中心とした 8 つの数値の合計を返すだけで済みます。したがって、このように 2 つの配列を使用することをお勧めします。2. まず、2 つの配列を初期化します。最初の配列は地雷が配置される配列です。この配列を 0 に初期化します。2 番目の配列は掃海する配列であり、プレイヤーに表示される配列です。この配列を ' * として初期化します。 '。配列を初期化するときに問題を考慮する必要があります。9*9 のチェス盤を印刷する場合、周囲の雷を計算するときに座標が隅または側面にある場合、9*9 配列を印刷すると座標が一番良い方法は、上下に 1 行、左右に 1 列追加することで、印刷するときは 9*9 だけを印刷するだけです。図に示すように:

 

 

2 番目のステップは 2 つの配列を印刷することです。配列を印刷するときにプレーヤーが入力した座標が 0 から始まるようにするには、行数を印刷するときにもう 1 行印刷し、行数を印刷するときにもう 1 列を印刷することをお勧めします。これにより、入力座標が 1 から始まるという問題が解決されるだけでなく、プレイヤーは座標がどこにあるかをより直感的に確認できるようになります。配列を初期化して配列を出力するときは、配列が同じであることを満足する必要があります。そうでないと、座標を入力するとき、または地雷の数を計算するときに、入力座標が座標の位置にないことが非常に簡単にわかります。 、計算された地雷の数も間違っています。図に示すように:

 

チェス盤を印刷したら、地雷の配置を考えますが、地雷の配置位置を毎回変えるには乱数を使う必要がありますが、バックギャモンのゲームにはすでに乱数が実装されています。 main 関数内でのみ使用する必要があります。srand 関数を呼び出し、srand にタイムスタンプを追加します。srand((unsigned int)time(NULL))、なぜ時刻が unsigned int に強制的に変換されるのか、使用方法を確認できます。時間関数の。地雷の数を配置するとき、配置された地雷の数を計算する int 変数を作成できます。地雷の数を配置し続ける必要があるため、これにはサイクルが必要です。地雷の数を配置するたびに、減算され、変数が 0 になると、ループは停止します。図に示すように:

地雷を設置した後は、地雷を除去します。掃海機能では、まずプレイヤーが座標を入力するための変数を 2 つ作成します。位置を入力した後、入力された座標が正当であるかどうかを判断する必要があります。正当な場合は、それらの座標が正しいかどうかを判断します。が次のステップに進みます。不正な場合は再入力を促します。座標が正当になった後、その座標位置が地雷によって除去されているかどうかを判断する必要があります。除去されている場合は、プレイヤーは再入力するよう促されます。そうでない場合は、この座標に地雷があるかどうかの判断が始まります。地雷がある場合は、直接殺されます。数を数えるステップでは、数を計算する関数を作成します周囲の地雷の数を入力し、地雷を配置する入力を入力し、次に x 座標と y 座標を入力し、最後に整数変数を使用して関数によって返された値を受け取ります。この戻り値は地雷の数です。ここで説明する必要があります。配列が初期化されると配列は文字で埋められるのですが、文字を整数にして変数に渡すにはどうすればよいでしょうか? たとえば、まず、ascll テーブルの ascll 値 1 は 49 で、文字 0 の ascll 値 48 を引くと数値 1 になります。つまり、文字を減算した後に対応する整数が得られます。 0, サンダー番号が変数に返されるように、次のステップは、変数を表示配列の座標に割り当てることです。表示配列が初期化されるとき、それは文字でもあるため、配列を文字に変換する必要があります。次に、先ほどの例で言えば、文字 0 の ascl 値に数字を加算するだけで、対応する文字が得られ、地雷の数が表示されて解決されます。地雷除去のプロセスはサイクルですが、サイクル条件は何ですか? 非常に簡単で、地雷でない位置が選別されていれば地雷除去は成功なので変数を作成し、その変数が行数×列数未満であることをループ条件とします。変数が行数と列数の積に等しい場合、地雷の数が減算されると、プレーヤーは地雷の除去に成功し、それ以外の場合、プレーヤーは地雷の除去を続けます。図に示すように:

完全なコードを以下に示します。

 

 

 

 

 

おすすめ

転載: blog.csdn.net/Sxy_wspsby/article/details/126695946