Eclipse Gluon Game〜じゃんけんゲームを作る2〜

イントロダクション

前回は、作成したじゃんけんゲームの自己レビューの観点などを記載しました。

なので今回は、実際に自己レビューをやろうと思います。

自己レビューの内容

1:コードが汚い → コードが整理されていないので汚い。

ぱっと見で以下の点が気に入らない(「初めからやれよ!」と言われそうだが試行錯誤しながらだとそうも行かなかったのです。。。)

  • フィールド変数が多すぎる
  • アニメーションと勝敗判定がごちゃ混ぜになっている
  • コンポーネント(画面の部品)とアクションがごちゃ混ぜ

コードを眺めて見ると他にもあるが、とりあえずは目の前の敵を倒すことが先決! → 目の前のものを片付けると、先が見やすくなるなどメリットが沢山!

フィールド変数が多すぎる

前回記載しましたが「指摘した問題に対する『答え』」もセットにしておきます。問題と答えを同時は無理なので、問題→答えのように1問1答式に用意すると次にどうしたら良いか?がすぐにわかります。「答え」が難しいですがね(笑)

自分の出した答え

フィールドが多いのは、以下の部分で(クラス全体で)使用する変数が多いためです。

「じゃんけんの判定」と「結果の表示」

この部分はクラスを新たに作成して対応しようと思います。

<キーポイント>
1つのオブジェクトに1つの機能を実装する

なので、じゃんけんの判定と結果の文字列を返却する(まとめる)クラスを作成することにします。

この時点でのクラス構成は下のようになります。新しいクラスは「Judgement」クラスです。(なんかスタンドの名前みたい(笑))

「zenryokuservice.apps.fx.janken.util」パッケージを作成しそこに上のクラスを追加しました。Gitに登録していないので「?」が付いています。

そして、ここのコードから「じゃんけん判定」と「結果返却」の処理を抜き取ります。

ちなみに、ソースを修正して「間違った」「気に入らない」など元に戻したい場合はGit(バージョン管理)へコミット( or Push)をしなければいつでも元に戻せます。→リビジョン番号で取得すればそこの時点で戻すこともできます。

つまり「やれるだけやってから、いくらでも元に戻せる」ということです。

<リファクタ手順>

フィールドの移動
とりあえずは、移植(新規クラスへ移動したい)フィールドをサクッと移動してしまいます。

<移植した直後>

<TestingViewクラス>
<Judgementクラス>

ビルドエラーで赤くなっています、つまり修正が必要な部分です。

じゃんけん判定を行うために

今までは、TestingVIewクラスでじゃんけん判定を行っていたので描画処理で使用した変数などをごちゃ混ぜに使用していましたが、ここからは全て「じゃんけん判定」のために使用する変数を「Judgement」クラス、じゃんけんゲームの描画に使用する変数を「TestingView」クラスに作成する必要があります。

現状で出ているビルドエラー(赤い行)はここで必要になる修正部分になります。

どのように修正するか?

ここで考える必要があるのは「Judgement」クラスにどのようにして「判定」を行わせるか?になります。

どのようにするか?は直感的なもの(センス?)が必要な感じもしますが、1つずつやっていけばセンスなんぞはいりません!(センスとかダメダメなので。。。)

まずはビルドエラーを解消する
ビルドエラーのでている部分は以下の部分です。

  • ユーザーの手を設定
  • CPUの手を設定
  • じゃんけんの判定

そして、じゃんけんの判定は「Judgement」クラスでやるので判定メソッドは移植します。つまり「shobu()メソッド」を移植します。

shobu()メソッドの移動

ソースがこんな感じになりました。ビルドエラーに着目してください。左「TesingView」右「Judgement」

ユーザーとCPUの手を設定している部分を直す → Judgementクラスに「setUserTe()」と「setCpuTe()」のメソッドを追加する。

TestingViewクラスにユーザーの手とCPUの手を設定している部分を修正する。下のようなコードを修正します。そして、ちょっと悩んだのですが「Judgement」クラスは「new 」することにしました。なのでTestingViewクラスのコンストラクタに以下のコードを追加します。

// フィールド変数にJudgementクラスを定義
Judgement judge;
public TestingView() {
 ・
 ・ 
  judge = new Judgement();
 ・
 ・
}

ソースの修正

// ユーザーの手を設定
userTe = ? → judge.setUserTe(?);
// CPUの手を設定
cpuTe = ?  → judge.setCpuTe(?);

ここで、Getter/Setterの自動生成をしておきます。

下のようにビルドエラーが解消できました。

最後に起動して今までと同じように動くか確認します。

そして、リファクタリング後のコードです。(Gitにアップしています。)

でわでわ。。。