BETA

コンソール画面で行くコルネオの館

投稿日:2020-05-13
最終更新:2020-05-14

ff7が発売された記念にコンソール画面上でできるゲームをつくりました。
Java学習からひと月。
習った事を応用してつくろうと思いましたが、想像していた程スマートには書けませんね。

以下、ゲーム内容を記載します。

【ゲーム内容】

コルネオの館に向かうためにクラウドに女装をさせるゲーム。
選択肢は数字のみの簡素なつくり。イベントは勿論簡略化。
リメイク発売記念と言いながら自分はリメイクをプレイしていないので、イベントは全て原作に準拠。
ドレス→コロン→かつら→ティアラ→下着
の順に選択肢を選び、選択に応じたコルネオポイントを加算する。
全てが終わるとコルネオの館に行き、ポイントに応じてコルネオに選ばれたり選ばれなかったりする。

コンソール画面例↓

コルネオチャレンジ!女装をしてコルネオの館に乗り込もう!  
おしとやかにね!クラウドちゃん!  
ドレスを探しに来た。  
店員「どんなドレスをお探しかい?」  
「肌ざわりは・・・」  
[0:さらっとした 1:さわっとした]  
0  
「光具合は・・・」  
[0:きらきらしたの 1:つやつやしたの]  
1  
「ふんふん、わかったわい。ちょっと待ってろ・・」  
シルクのドレスを手に入れた!  
次へ(Enter)  

-----------------------  
-----------------------  
コロンを探しに来た  
おや?クーポンをお持ちですね。それでは商品を1つだけ選んでください  
[0:消毒薬  1:消臭薬  2:消化薬]  
2  
はい。どうぞ。  
消化薬を手に入れた  
トイレで困っている人がいる  
え、これをくれるのかい?ありがとう。  
ふーすっきりした。お礼にこれをあげるよ  
セクシーコロンを手に入れた!  
次へ(Enter)  

-----------------------  
-----------------------  
男男男ジムにやってきた。  
カツラが欲しければ愛♡言葉を言いなさい!  
合言葉は・・・  
[0:のばら 1:ゆうき 2:ざせつ ]  
1  
その通りよ!  
ブロンドのかつらを手に入れた!  
次へ(Enter)  

-----------------------  
-----------------------  
内密な頼みを請け負った。  
宿屋にある自販機であるモノを購入してほしいらしい。  
夜中の宿屋にやってきた。  
自販機に商品が並んでいる・・・  
どれにしようか・・・  
[0:買わない 1:200ギルのもの 2:100ギルのもの 3:50ギルのもの]  
1  
ありがとう!お礼にこれをあげるよ!  
ダイヤのティアラを手に入れた!  
次へ(Enter)  

-----------------------  
-----------------------  
蜜蜂の館にやってきた。  
いくぜ!!  
ぽ・・・♡  
お客さん・・・♡  
はやくっはやくっ♡  
[0:愛のすばこ 1:団体様のすばこ]  
0  
この部屋にするよ  
・・・・・・・・・・・  
・・・・・・・・・・・  
・・・・・・・・・・・  
ぼうずっ!!倒れちゃったんだって?  
次、がんばんなさい。  
ランジェリーを手に入れた!  
次へ(Enter)  

-----------------------  
-----------------------  
コルネオの館にやってきた!  
ほひー!  
今夜のお嫁さんは・・・!  
この骨太のおなごじゃ!  
おめでとう!コルネオに選ばれました!  
あなたの総コルネオポイントは15でした。  
おわり  

原作に準拠と言っておきながらちょいちょい変えています。
合言葉を間違えないでくださいね。

以下、コード

Main.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class Main {  

    public static void main(String[] args) throws IOException{  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System. in));  

        System.out.println("コルネオチャレンジ!女装をしてコルネオの館に乗り込もう!\nおしとやかにね!クラウドちゃん!");  

        //Dressオブジェクトを生成  
        CoPoint coPoint = new CoPoint();  

        //  
        Dress1 dress1 = new Dress1();  
        dress1.dressChoise(coPoint);  

        System.out.println("次へ(Enter)");  
        reader.readLine();  

        System.out.println("-----------------------");  
        System.out.println("-----------------------");  

        //Colonクラス  
        Colon colon = new Colon();  
        colon.drugName(coPoint);  

        System.out.println("次へ(Enter)");  
        reader.readLine();  

        System.out.println("-----------------------");  
        System.out.println("-----------------------");  

        //Wigクラス  
        Wig wig = new Wig();  
        wig.question(coPoint);  

        System.out.println("次へ(Enter)");  
        reader.readLine();  

        System.out.println("-----------------------");  
        System.out.println("-----------------------");  

        //Tiaraクラス  
        Tiara tiara = new Tiara();  
        tiara.vendingMachine(coPoint);  

        System.out.println("次へ(Enter)");  
        reader.readLine();  

        System.out.println("-----------------------");  
        System.out.println("-----------------------");  

        //Lingerieクラス  
        Lingerie lingerie = new Lingerie();  
        lingerie.Iyan(coPoint);  

        System.out.println("次へ(Enter)");  
        reader.readLine();  

        System.out.println("-----------------------");  
        System.out.println("-----------------------");  

        //result  
        Result result = new Result();  
        result.colneo(coPoint);  

    }  

}  

CoPoint.java

package sample0505;  

public class CoPoint {  
    //CoPointの設定  
    private int point;  

    //コンストラクタ引数なし  
    public CoPoint(){  

    }  

    //コンストラクタ引数あり  
    public CoPoint(int point){  
        this.point = point;  
    }  


    int getPoint(){  
        return point;  
    }  
    void setPoint(int point){  
        this.point = point;  
    }  


}  

入力は全てBufferedReaderを使用。(それ以外まだ入出力を使ったことがない・・・)
getter,setterによるコルネオポイントの管理
今のところ「戻り値」「カプセル化」などが大の苦手なのでsetter,getterで大苦戦。
製作時間の半分はここ。
いつまでたってもコルネオポイントの加算ができず、そして今でもなぜ上手くいったのかしっかりわかっていない。
引数を書いていなかったり、オーバーライドをしてみたりとまだまだ慣れが必要な部分だと思う。

dress1.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class Dress1 {  

    /** フィールド */  
    int point;  

    /** コンストラクタの生成 */  
    public Dress1() {  
        System.out.println("ドレスを探しに来た。");  

    }  

    public void dressChoise(CoPoint coPoint) throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
        System.out.println("店員「どんなドレスをお探しかい?」");  

        // ドレスの番号を入力  
        System.out.println("「肌ざわりは・・・」\n[0:さらっとした 1:さわっとした]");  
        String str1 = reader.readLine();  
        int num1 = Integer.parseInt(str1);  
        System.out.println("「光具合は・・・」\n[0:きらきらしたの 1:つやつやしたの]");  
        String str2 = reader.readLine();  
        int num2 = Integer.parseInt(str2);  

        //ドレスの決定  
        System.out.println("「ふんふん、わかったわい。ちょっと待ってろ・・」");  
        String dress[][] = { { "サテン", "シルク" }, { "コットン", "コットン" } };  
        System.out.println(dress[num1][num2] + "のドレスを手に入れた!");  

        /** コルネオポイントの加算 */  
        if (num1 == 0) {  
            if(num2 == 0){  
                point = coPoint.getPoint() + 2;  
            }else{  
                point = coPoint.getPoint() + 3;  
            }  
        } else {  
            point = coPoint.getPoint() + 1;  
        }  
        coPoint.setPoint(point);  

        //コルネオポイント確認用コード  
        //System.out.println("コルネオポイントを" + coPoint.getPoint() + "ゲットした!");  
    }  

    }  


何気に一番面倒だった部分。
二回数字を入力させ、素材とどう紐づけるのか、ポイントに繋げるか迷った。
悩んだ末、多次元配列を利用してドレスの素材を決定。
コルネオポイントはif文に頼った。
もっと綺麗な方法があったのかな。

Colon.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.ArrayList;  
import java.util.List;  

public class Colon {  
    //コンストラクタ  
    public Colon(){  
         System.out.println("コロンを探しに来た");  
     }  


    //リストの生成  
    List<String> drug = new ArrayList<>();  
    List<String> colon = new ArrayList<>();  
    List<Integer> cpoint = new ArrayList<>();  

    public void drugName(CoPoint coPoint) throws IOException{  
        System.out.println("おや?クーポンをお持ちですね。それでは商品を1つだけ選んでください");  
        System.out.println("[0:消毒薬  1:消臭薬  2:消化薬]");  


    drug.add("消毒薬");  
    drug.add("消臭薬");  
    drug.add("消化薬");  

    colon.add("コロン");  
    colon.add("フラワーコロン");  
    colon.add("セクシーコロン");  

    cpoint.add(1);  
    cpoint.add(2);  
    cpoint.add(3);  

    //BufferedReader  
    BufferedReader reader = new BufferedReader(new InputStreamReader(System. in));  
    String str3 = reader.readLine();  
    int num3 = Integer.parseInt(str3);  

    //薬とコロンの交換  
    System.out.println("はい。どうぞ。");  
    System.out.println(drug.get(num3) + "を手に入れた");  
    System.out.println("トイレで困っている人がいる");  
    System.out.println("え、これをくれるのかい?ありがとう。\nふーすっきりした。お礼にこれをあげるよ");  
    System.out.println(colon.get(num3) + "を手に入れた!");  
    //System.out.println(point.get(num3));  

    int point = coPoint.getPoint() + cpoint.get(num3);  
    coPoint.setPoint(point);  

    //コルネオポイント確認用コード  
    //System.out.println("コルネオポイントが" + coPoint.getPoint() + "になった!");  

    }  


}  

こちらは入力が一か所のみだったため、
配列を三つ用意して全て変数に紐づけ。

Wig.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class Wig {  

    // フィールド  
    int answer;  
    int point;  

    // コンストラクタ  
    public Wig() {  
        System.out.println("男男男ジムにやってきた。");  
    }  

    public void question(CoPoint coPoint) throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System. in));  

        System.out.println("カツラが欲しければ愛♡言葉を言いなさい!");  
        System.out.println("合言葉は・・・\n[0:のばら 1:ゆうき 2:ざせつ ]");  

        //入出力  
        String strAnswer = reader.readLine();  
        answer = Integer.parseInt(strAnswer);  

        //カツラ選び  
        switch (answer) {  
        case 0:  
            System.out.println("・・・中々筋がいいわね\nチャパツのかつらを手に入れた!");  
            point = coPoint.getPoint() + 2;  
            break;  
        case 1:  
            System.out.println("その通りよ!\nブロンドのかつらを手に入れた!");  
            point = coPoint.getPoint() + 3;  
            break;  
        case 2:  
            System.out.println("ロックを知らないのかしら?\nくせ毛のかつらを手に入れた!");  
            point = coPoint.getPoint() + 1;  
            break;  
        default:  
            System.out.println("帝国のスパイだな!\nジムを追い出されてしまった!");  
            point = coPoint.getPoint();  
            break;  

        }  

        //コルネオポイントの加算  
        coPoint.setPoint(point);  

        //コルネオポイント確認用コード  
        //System.out.println("コルネオポイントが" + coPoint.getPoint() + "になった!");  
    }  

}  

Tiara.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class Tiara {  
    int answer;  
    int point;  

    // コンストラクタ  
    public Tiara() {  
        System.out.println("内密な頼みを請け負った。\n宿屋にある自販機であるモノを購入してほしいらしい。");  
    }  

    public void vendingMachine(CoPoint coPoint) throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  

        System.out.println("夜中の宿屋にやってきた。\n自販機に商品が並んでいる・・・");  
        System.out.println("どれにしようか・・・\n[0:買わない 1:200ギルのもの 2:100ギルのもの 3:50ギルのもの]");  
        // 入出力  
        String strAnswer = reader.readLine();  
        answer = Integer.parseInt(strAnswer);  

        if (answer <= 3 && answer != 0) {  
            System.out.println("ありがとう!お礼にこれをあげるよ!");  
        }  

        // 宿屋  
        switch (answer) {  
        case 0:  
            System.out.println("面倒だし、立ち去ることにした。");  
            point = coPoint.getPoint();  
            break;  
        case 1:  
            System.out.println("ダイヤのティアラを手に入れた!");  
            point = coPoint.getPoint() + 3;  
            break;  
        case 2:  
            System.out.println("ルビーのティアラを手に入れた!");  
            point = coPoint.getPoint() + 2;  
            break;  
        case 3:  
            System.out.println("ガラスのティアラを手に入れた!");  
            point = coPoint.getPoint() + 1;  
            break;  
        default:  
            System.out.println("変なボタンを押してしまった・・・!\n自販機は壊れたようだ・・・");  
        }  

        // コルネオポイントの加算  
        coPoint.setPoint(point);  

        //コルネオポイント確認用コード  
        //System.out.println("コルネオポイントが" + coPoint.getPoint() + "になった!");  
    }  
}  

Lingerie.java

package sample0505;  

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class Lingerie {  
    int inum;  

    public Lingerie() {  
        System.out.println("蜜蜂の館にやってきた。\nいくぜ!!");  
    }  

    public void Iyan(CoPoint coPoint) throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
        System.out.println("ぽ・・・♡\nお客さん・・・♡\nはやくっはやくっ♡");  
        System.out.println("[0:愛のすばこ 1:団体様のすばこ]");  
        String str = reader.readLine();  
        int num = Integer.parseInt(str);  
        String tenten = "・・・・・・・・・・・\n・・・・・・・・・・・\n・・・・・・・・・・・";  

        System.out.println("この部屋にするよ");  

        switch (num) {  
        case 0:  
            System.out.println(tenten);  
            System.out.println("ぼうずっ!!倒れちゃったんだって?\n次、がんばんなさい。");  
            System.out.println("ランジェリーを手に入れた!");  
            inum = 3;  
            break;  
        case 1:  
            System.out.println("ぼうず!ともに青春のアカとアセを流そうではないか!");  
            System.out.println(tenten);  
            System.out.println("ぼうず!これ僕の大事なもの。\n今日の記念に持っていきな!");  
            System.out.println("ビキニパンツを手に入れた!");  
            inum = 1;  
            break;  
        case 100:  
            System.out.println("女性「あら、いやだ!!\nお客さん、こんなところまで入ってこないでね♡」");  
            System.out.println("クラウド「女装するとなればにゅうねんな準備が必要だ」");  
            System.out.println("「頼みがあるんだ。俺にもけしょうをしてくれないか?」");  
            System.out.println("「ぬりぬりぬり・・・」\n「プッ……♡」");  
            System.out.println("クラウドの魅力が果てしなく上がった!");  
            inum = 10;  
            break;  
        default:  
            System.out.println("エアリスいないしな・・・やっぱりやめることにした");  
            break;  
        }  

        int point = coPoint.getPoint() + inum;  
        coPoint.setPoint(point);  

        // コルネオポイント確認用コード  
        // System.out.println("コルネオポイントが" + coPoint.getPoint() + "になった!");  
    }  

}  

全てswitch文で作成。
switch文は楽に作れるので・・・というより他にいい手が思いつかなかった。
ここにはcaseさえ足せば隠しコマンドも作れるので簡単かつ楽しかった部分。
その分コードがやけに長ったらしくなっているのでfor文とかif文とかつくったほうが見栄えはすっきりしそう。

Result.java

package sample0505;  

public class Result {  
    public Result(){  
        System.out.println("コルネオの館にやってきた!");  
    }  

    public void colneo(CoPoint coPoint){  
        System.out.println("ほひー!");  
        System.out.println("今夜のお嫁さんは・・・!");  

        int point = coPoint.getPoint();  
        if(point > 16){  
            System.out.println("ほひほひほひ!!\nこのかんわいいおなごじゃ!");  
            System.out.println("おめでとうございます!完璧な女装でした!\n遊んでいただきありがとうございました!");  
        }else if(point >= 15){  
            System.out.println("この骨太のおなごじゃ!");  
            System.out.println("おめでとう!コルネオに選ばれました!");  
        }else if(point >= 10){  
            System.out.println("この子じゃ!");  
            System.out.println("残念!コルネオに選ばれませんでした!");  
        }else{  
            System.out.println("このおなごじゃ!");  
            System.out.println("コルネオに選ばれませんでした!・・・狙ってましたよね?");  
            System.out.println("バッドエンドクリア情報:蜜蜂の館の選択肢で100を入力すると・・・?");  
        }  
        System.out.println("あなたの総コルネオポイントは" + point + "でした。");  
        System.out.println("おわり");  
    }  

}  

まごうことなきif文。
以上。

【つくってみて思ったこと】

思い付きから完成まで10数時間かかりました。
この時間が多いのか少ないのかわかりませんが、多分初心者って感じなのでしょう。
初めにノートか何かに作る内容や使う技術をまとめた為、無駄なコーディングの時間が削れてよかったと思います。

ただ例外処理をつくっていなかったり、自分が簡単に書けるコードに逃げたりとまだまだ課題もありそうです。
「自分がつくりたいもの」って「今自分ができるコーディング」の中でしかつくれない面がありますね。
継承やオーバーライドといったところには手を出せませんでした。
パッケージを分けたからか、冗長なコードになったあたりも改善したい・・・

長々と書きましたが、こんなクソコードでも完成した時の達成感は素晴らしかったです。
想像通り動いたときは思わずガッツポーズをとりました。

また何かつくりたいなあ。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

FF好きの未経験エンジニアによるアウトプット用のブログです。 初期の初期からアウトプットをしていきます。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう