2014年9月9日火曜日

プログラミング初心者がJavaでいちばん初めに作ったもの その2

今回はコード編!!

クラスの数が13個もあるので、主要なものだけアウトプットする。
コードの解説は夫である「さとし」が書きました。


FinalJudgement クラス

package diablo;

import java.util.Scanner;

public class FinalJudgement {

 public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ

  int totalLuckyPoint = 0;

  totalLuckyPoint = apprise() + isUseKeys() + calcLegendaryLuckyPoints()
    + calcSetItemLuckyPoints();

  decide(totalLuckyPoint);

  FinalJudgement f = new FinalJudgement();
 }

 static int input() {
  return new Scanner(System.in).nextInt();
 }

 /**
  * 味方を判定してラッキーポイントを返却します。
  * 
  * @return 味方から算出したラッキーポイントの合計
  */
 static int apprise() {
  System.out.println("味方の職を入力してください");

  int totalLuckyPoint = 0;

  for (int i = 0; i < 3; i++) {
  System.out.println
        ("1,Wizard 2,WitchDoctor 3,Monk 4,Barbarian 5,DemonHunter 6,Crusader");

   int heroNumber = input();

   if (heroNumber == 1) {
    totalLuckyPoint += new Wizard().getLucky();
   } else if (heroNumber == 2) {
    totalLuckyPoint += new WitchDoctor().getLucky();
   } else if (heroNumber == 3) {
    totalLuckyPoint += new Monk().getLucky();
   } else if (heroNumber == 4) {
    totalLuckyPoint += new Barbarian().getLucky();
   } else if (heroNumber == 5) {
    totalLuckyPoint += new DemonHunter().getLucky();
   } else if (heroNumber == 6) {
    totalLuckyPoint += new Crusader().getLucky();
   }
  }
  return totalLuckyPoint;
 }

 static int isUseKeys() {
  System.out.println("RiftKeyを使いましたか?");
  System.out.println("1,Yes 2,No");
  int selectUseKeys = input();

  if (selectUseKeys == 1) {
   return -3;
  } else {
   return 3;
  }

 }

 static int calcLegendaryLuckyPoints() {
  System.out.println("拾ったレジェンダリーアイテムの数を入力してください");

  int legendarys = input();
  legendarys = legendarys * new Legendary().getLucky();
  return legendarys;
 }

 static int calcSetItemLuckyPoints() {
  System.out.println("拾ったセットアイテムの数を入力してください");
  int setItems = input();
  setItems = setItems * new SetItem().getLucky();
  return setItems;
 }

 static void decide(int totalLuckyPoint) {
  System.out.println("あなたは" + totalLuckyPoint + "点でした");

  if (totalLuckyPoint < -3) {
   System.out.println("イライラしていますね");
  } else if (totalLuckyPoint < 0) {
   System.out.println("マシ");
  } else if (totalLuckyPoint < 3) {
   System.out.println("珍しい");
  } else {
   System.out.println("おめでとう");
  }
 }

}

メインクラス。この中でラッキーポイントの算出などを行っている。
このあたりはデザインパターンを使えばもっとかっこよくかけるはず。
input メソッドは本を見て私が書いた(夫)

Hero も数字で判定しているだけなので、もうちょっと Java っぽくかけなくもないが
それをやると妻が混乱するのでやめた。(generics で書くとかできそう)


AbstractHerot クラス

package diablo;

public abstract class AbstractHero implements Hero {

 int luckyPoint;

 public AbstractHero(int luckyPoint) {
  this.luckyPoint = luckyPoint;

 }

 @Override
 public int getLucky() {
  // TODO 自動生成されたメソッド・スタブ
  return luckyPoint;
 }

}

Hero の抽象クラス。
Hero ごとにポイントを保持しているのみ。
共通の処理があったらこのクラスに記述する予定で作成した。

Hero クラス

package diablo;

public interface Hero {

 int getLucky();

}

Hero のインタフェース。
全 Hero が持つべきメソッドをこのインタフェースに記述する予定で作成した。

Barbarian クラス

package diablo;

public class Barbarian extends AbstractHero {

 public Barbarian() {
  super(-5);
 }

}
バーバリアンのクラス。 各 Hero のコンストラクタにラッキーポイントを渡してインスタンスを生成する。
本当は各 Hero ごとに複雑な条件でラッキーポイントの増減をさせるつもりでいたが
面倒になったのと、入力項目が増えすぎるので頓挫した。自動化できるならやりたい


プログラミング初心者がJavaでいちばん初めに作ったもの その1「構想編」

0 件のコメント:

コメントを投稿