1

私は単純な C# コンソール アプリケーションをプログラミングしています。

仕様は次のとおりです。

ゲームは 10 フレームで構成され、10 個のピンの完全なラックから始まります。各フレームで、10 個のピンのうちできるだけ多くのピンをノックダウンするために、ボールを 2 回配達します。最初のボールですべてのピンを倒すと、ストライクと呼ばれます。ストライクの場合、次の 2 つのボールの値がボーナスとして得られるため、スコアはすぐには加算されません。たとえば、最初のフレームでストライクを記録し、2 番目のフレームで 7 と 1 を獲得した場合、最初のフレームで 18 (10+7+1)、2 番目のフレームで 8 を獲得し、合計は2 フレーム後の 26。最初のボールのピンの一部を倒し、2 番目のボールの残りのピンを倒した場合、それはスペアとして知られています。繰り返しますが、スコアはすぐには追加されません。これは、スペアの場合、次のボールの値がボーナスとして得られるためです。

コードの書き方などは理解しています。ただし、このスコアリング システムを実行する最善の方法が思いつかず、アドバイスが必要です。明らかに、プレイヤーごとに新しいオブジェクトが作成されますが、最初は単純なプログラミングの問題のように見えたものを回避する方法がわかりません。

どんな助けでも大歓迎です。

よろしく

4

3 に答える 3

5

ボウリングでは、ストライクとスペアを「マーク」と呼びます。これを使って!

enum Marks { Open, Spare, Strike };

このようにして、フレームごとにどのタイプのマークがあるかを判断できます。ボールが投げられた後、最後の 2 つのフレームを確認し、それらのスコアを更新します。次に、スコアを合計します。

別の注意: フレームごとのスコアを表示している場合は、一連のストライクでフレーム スコアを表示しないでください (たとえば、連続した 4 つのストライクでフレーム 1 に「30」が表示されないようにする必要があります)。合計が表示されるまで、スペアまたはオープンを待ちます。何か違うことをするのは不適切な採点であり、ビデオゲームがそれを認識しないと、私はひどくイライラします.

于 2009-06-05T14:48:34.900 に答える
4

ボウリング ゲームの OOP と TDD を扱う真に詳細な議論が必要な場合は、この記事全体を読むことをお勧めします。

http://www.objectmentor.com/resources/articles/xpepisode.htm

それ以外の場合は、一番下までスクロールして、実装方法を確認してください。

于 2009-06-05T14:45:20.790 に答える
0

このような問題に取り組むとき、フラグを使用すると便利であることがわかりました。フラグとは、何かが true か false かを示すだけの小さな boolean または int 変数を意味します。次のように:

bool isStrike;
bool isSpare;

これらの変数をオブジェクトに入れ、人がストライキを取得したら、isStrike を true に設定します。

スコアを計算するときが来たら、これらのフラグをチェックして計算システムを変更できます。

if(isStrike)
    // do not calculate the score until the other two bowls are made.
if(isSpare)
    // do not calculate the score until one more bowl is made

次に、これらのボウルの後にこれらを反映するようにスコア保持変数を更新します。

注: ボウリングでスコア管理がどのように機能するかはわかりませんが、ここでの情報は一般的なもので十分だと思います。

于 2009-06-05T14:54:53.127 に答える