[topic] 憂鬱な勇者

RPG他の要素を全て省略してレベルアップだけするプログラム。自動またはユーザからのアクションによって、RPG風の経験値の獲得とレベルアップメッセージを出力します。

元祖のソースコードは Ruby で書かれています。

http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558

出力はほぼ原典どおりですが、それぞれの言語の特徴にあわせた処理の仕方で書いてみるとどうなるでしょうか(オブジェクト指向、再帰処理が書きやすい、など)。

これまでの言語別移植リストはこちらに掲載されています。

http://d.hatena.ne.jp/keyword/%cd%ab%dd%b5%a4%ca%cd%a6%bc%d4

Posted feedbacks - Java

意味はないけど、Iterableにしてみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.math.BigInteger;
import java.util.Iterator;
import java.util.Random;


public class Sample182 implements Iterable<String> {
    private static final int MAX_BUTTLES = 30;

    private static final String[] Monsters = {
        "焼きたてパン", "強いシャチホコ", "もんじゃ焼き一年生", "怪人ホタテ男",
        "ニセ勇者", "逃げ足の早いアレ", "睡魔", "煩悩", "愛らしい子犬の中の人",
        "恋するスズメバチ", "勇敢なクマンバチ", "信じられない物", "勇者の師匠",
        "浮遊する鎧", "怪盗ドボン", "闇の招き猫", "誘惑のカスタードクリーム",
        "しょっぱすぎる籠手", "カレー味の兜", "光沢だけは一流の盾",
        "若葉マークのモンスター", "新緑の季節", "梅雨時の車両のニオイ",
        "暑すぎる夏", "新宿らしき何か", "やたら発達したドーナツ", "育ちすぎたクマー",
        "なごやかな雰囲気", "凍り付いた気配", "忍び寄る恐怖",
    };
    private static final String[] Skills = {
        "お豆腐の買い方", "鉛筆の買い方", "消しゴムの使い方", "メモの取り方",
        "攻撃に使えないこともない呪文", "裏町の歩き方", "森林浴", "珈琲の味",
        "しじみのみそ汁の作り方", "回覧板の回し方", "郵便物の投函方法",
        "立ち話のコツ", "猫の呼び方", "犬の呼び方", "カラスの呼び方",
        "鳩専用豆鉄砲", "秘密の趣味", "速く走るコツ", "剣の使い方", "斧の使い方",
        "まきわりで、まっきわりわり", "聖なる祈り", "孤独", "涼しく過ごすコツ",
        "お洒落のコツ", "卵をふわっと焼く方法", "ごはんの研ぎ方", "油汚れの対応方法",
        "大人の振るまい", "Suicaの使い方",
    };

    private static final String MessageTemplate1 = "*-----%n" +
            "%sを倒した!%n" +
            "%sの経験値を得た。%n" +
            "勇者は%dにレベルが上がった!%n" +
            "勇者は、%sを覚えた。%n";
    private static final String MessageTemplate2 = "*-----%n" +
            "%sを倒した!%n" +
            "%sの経験値を得た。%n" +
            "勇者は、また、レベルが上がった!%n" +
            "勇者は、ふと空しさを覚えた。%n";
    private static final String MessageIntermission = "%n" +
            "そして、%n" +
            "かくかくしかじかで、山あり谷ありの冒険が続いたが割愛。%n";


    @Override
    public Iterator<String> iterator() {
        return new Iterator<String>() {
            private final Random random_ = new Random();

            private int buttle_ = 0;
            private BigInteger exp_ = BigInteger.ONE;
            private boolean isIntermission_ = false;

            @Override
            public boolean hasNext() {
                return buttle_ < MAX_BUTTLES;
            }

            @Override
            public String next() {
                if (isIntermission_) {
                    isIntermission_ = false;
                    return String.format(MessageIntermission);
                } else {
                    buttle_++;
                    String format = (buttle_ == MAX_BUTTLES)? MessageTemplate2: MessageTemplate1;
                    exp_ = exp_.multiply(BigInteger.valueOf(buttle_));
                    isIntermission_ = true;
                    return String.format(format,
                            Monsters[random_.nextInt(Monsters.length)],
                            exp_.toString(),
                            buttle_,
                            Skills[random_.nextInt(Skills.length)]);
                }
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }


    public static void main(String[] args) {
        for (String msg: new Sample182()) {
            System.out.println(msg);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }
}

Index

Feed

Other

Link

Pathtraq

loading...