プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

テニススコア集計アプリ書いてみました。


みなさんアプリのソースコードを公開されているので、

//
//  SetScorer class
//
class SetScorer
{
    private int player1 = 0;
    private int player2 = 0;

    private final int setScore = 7;
    private final int winScore = 6;
    private final int loseScore = 5;

    //
    //  min
    //
    private int min(int x, int y)
    {
        return x < y ? x : y;
    }

    //
    //  max
    //
    private int max(int x, int y)
    {
        return x > y ? x : y;
    }

    //
    //  isGameTied
    //
    private boolean isGameTied(int leaderScore, int loserScore)
    {
        return leaderScore == loserScore;
    }

    //
    //  isGameSet
    //
    private boolean isGameSet(int leaderScore, int loserScore)
    {
        return (leaderScore >= setScore) || 
               ((leaderScore >= winScore) && loserScore < loseScore);
    }

    //
    //  gameWon
    //
    public void gameWon(int playerno)
    {
        if (playerno == 1)
            player1++;
        else
            player2++;
    }

    //
    //  getSetScore
    //
    public String getSetScore()
    {
        int leader = player1 > player2 ? 1 : 2;
        int leaderScore = max(player1, player2);
        int loserScore = min(player1, player2);

        if (isGameTied(leaderScore, loserScore)) {
            // even
            return "Set is tied at " + leaderScore;
        } else if (isGameSet(leaderScore, loserScore)) {
            // game set
            return "Player" + leader + " wins the set " +
                   leaderScore + " - " + loserScore;
        } else {
            // now playing
            return "Player" + leader + " leads " +
                   leaderScore + " - " + loserScore;
        }
    }
}


最初から自分で書くのであればgetSetScore()メソッドだけでなく、ゲーム状態やリードプレイヤーを返すなどのメソッドを実装するところですが、インタフェースはそのままで書いてみましたが、いかがでしょうか!?


今回初めてJava 2 SDKをインストールしてみました。コマンドラインで使えるところがいいですね。書き方とかJavaらしくないところがあるかと思いますが、どうかご容赦を。min/maxなんていかにもありそうだよなあ。


元の記事のサンプルコードが見やすいかどうかはさておき、いろいろな方のコードを見ることができて楽しかったです。機会があれば、またコーディング大会をしてみたいですね。自分のコードの出来は問わないってことで。:)




過去の関連記事:
yasuhoの隠れ家 - 自分の書くコードは美しいか