Volatile memory

物覚えの悪いわたしの、備忘録的な技術系ブログです。

みんなまとめて

ヨットの続きです。

1だけ作って寝て起きたら、 2から6も同じだと気づきますよね。

なんで寝る前に気づかないんでしょうね?

1のとこをこうしたらもう明らかですよね。

        public void SelectNumber(Score score, int n)
        {
            score.Select(Dice.Sum(die => die.Value == n ? n : 0));

            Reset();
        }

        public void SelectOne()
        {
            SelectNumber(OneScore, 1);
        }

こんな感じで他も書けます。

        public void SelectTwo()
        {
            SelectNumber(TwoScore, 2);
        }

こういうものを定義したら、

            NumberScores = new Score[]
            {
                OneScore,
                TwoScore,
                ThreeScore,
                FourScore,
                FiveScore,
                SixScore,
            };

こういうのが簡単にかけます。

        public int NumberTotalScore
        {
            get
            {
                return NumberScores.Sum(s => s.Value);
            }
        }

        public int BonusScore
        {
            get
            {
                return NumberTotalScore >= 63 ? 35 : 0;
            }
        }

        public int TotalScore 
        {
            get
            {
                return NumberTotalScore + BonusScore;
            } 
        }

        public void End()
        {
            Reset();
            foreach (var s in NumberScores)
            {
                s.Reset();
            }
        }

Formの方もこういうのを定義して、

            NumberScoreLabels = new Label[]
            {
                OneScore,
                TwoScore,
                ThreeScore,
                FourScore,
                FiveScore,
                SixScore,
            };

表示の更新をこんなふうに書けます。

        private void UpdateView()
        {
//中略
            RestLabel.Text = Yacht.Rest.ToString();

            for (int i = 0; i < Yacht.NumberScores.Length; ++i)
            {
                NumberScoreLabels[i].Text = ToScoreString(Yacht.NumberScores[i]);
            }
            BonusScore.Text = Yacht.BonusScore.ToString();
            TotalScore.Text = Yacht.TotalScore.ToString();
        }

1から6まで選んでみました。 ちゃんとボーナス入ってます。

これで1から6までできました。 ボーナスも表示されます。