忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[28] [27] [26] [25] [24] [23] [22] [21] [20] [19] [18]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ようやくここまできた。寄り道ばっかりだけど、長い道のりだった。



e016.png





ダウンロード  Entry016.zip (2009.08.01)





main.cpp


Result TownEvent(Unit& player)
{
    Result res;
    int cmd,cmdcnt = 0;
    static int stayPrice = 10;

    cout << "\n\n街にいます。\n";
    player.ShowStatus();
    player.ShowMoney();

    while(1){
        cmd = 0;
        res = NONE;
        cout << "\n1:出撃\n2:宿屋(" << stayPrice << "G)\n3:体力強化\n4:攻撃訓練\n5:防御訓練\n9:終了\nどうする?";
        if(cmdcnt){
            cin.clear();
            cin.ignore();
        }
        cin >> cmd;
        cout << "\n";
        switch(cmd){
            case 1:     // 出撃
                res = DEPARTURE;
                break;
            case 2:     // 宿泊
                player.Stay(stayPrice);
                break;
            case 3:     // 体力強化
                player.TraningHP();
                break;
            case 4:     // 攻撃訓練
                player.TraningAtp();
                break;
            case 5:     // 防御訓練
                player.TraningDfp();
                break;
            case 9:
                res = ABORT;
                break;
        }

        if(res!=NONE) break;
        if((++cmdcnt)>100){res = ABORT; break;}   //無限ループ防止
    }

    return res;
}



やる気の無い拡張。
入力判定の部分を、switch~case で書きなおす。
前はwhile()無限ループが多重になってたから、抜け出すのが大変だったんだ。
意外にも、関数にしての切り出し、整理がこんなところで役に立つとは。
ここの話を書きながら気がついた。

車を止めてエンジン切る前にサイドブレーキかけるぐらい、何も意識せず自然に
ここの修正出てきた。


Unitクラスに追加する予定のメソッドは、適当につけてみた。
たぶんやることはほとんど同じだから、引数でなんとかできるような気がするけど、
今のところ、うまくまとまるか見通しは立ってない。
とりあえず書いてみる。

Unit.h


class Unit
{
    string Name;    // 名前
    int MaxHP;      // 体力最大値
    int HP;         // 体力(現在値)
    int Atp;        // 攻撃力
    int Dfp;        // 防御力
    int Money;      // 所持金、モンスターは獲得金額
public:
    void Init(string Name, int HP,int Atp,int Dfp, int Money);
    void ShowStatus();
    int Attack();
    int Defence();
    string getName(){return(Name);}
    int Hit(int dmg);
    void HealMax(){HP = MaxHP;}         // 体力最大まで回復
    void Stay(int price);               // 宿に泊まる
    void AddMoney(int gd);              // 金額加算
    int GetMoney(){return(Money);}
    void ShowMoney();                   // しょーもねー(笑い)
    void TraningHP();                   // 体力強化
    void TraningAtp();                  // 攻撃訓練
    void TraningDfp();                  // 防御訓練

};



void Unit::TraningHP()
{
    char input;
    int cost = (MaxHP/10)*5;
    cout << "体力強化の訓練は、" << cost << "G かかります。\n";
    if(Money >= cost){
        cout << "強化しますか?(Y/N):";
        cin >> input;
        if(input == 'y' || input == 'Y'){
            Money -= cost;
            MaxHP += HP/12 + 1;
        }
    } else {
        cout << "お金がたりませんよ!\n";
    }

}

void Unit::TraningAtp()
{
    char input;
    int cost = Atp*5;
    cout << "攻撃の訓練は、" << cost << "G かかります。\n";
    if(Money >= cost){
        cout << "強化しますか?(Y/N):";
        cin >> input;
        if(input == 'y' || input == 'Y'){
            Money -= cost;
            Atp++;
        }
    } else {
        cout << "お金がたりませんよ!\n";
    }

}

void Unit::TraningDfp()
{
    char input;
    int cost = Dfp*5;
    cout << "防御の訓練は、" << cost << "G かかります。\n";
    if(Money >= cost){
        cout << "強化しますか?(Y/N):";
        cin >> input;
        if(input == 'y' || input == 'Y'){
            Money -= cost;
            Dfp++;
        }
    } else {
        cout << "お金がたりませんよ!\n";
    }

}





Unit::Traning○○ 関数をだらっと作ってみた。
どこまで共通化できるかは、今の段階でわからなかったからな。

頭の中で完成させてしまおうとせずに、いちどだらっと書いてみてから眺めてみると、
うまくいくかもしれない。

結局は、HP強化作ってコピーしただけだけど。
それでも、共通にできそうなところ、無理そうなところを切り分ける判断はできる。





プレイしてみる。つい遊んでしまうぐらいの出来になってきた気がする。
スクリーンショット取るためだけなのに、ついつい欲をかいて負けてしまう。
行ったりきたりの、3~4戦目あたりのバランスはかなり良い気がするんだ。自画自賛。
ゴブリン大将倒して30Gおいしいです。

ただ、どうにも見辛い部分がある。
せっかく「街」コマンドを一覧で出すようにしているんだから、各訓練のコストも表示するぐらいの
余裕は欲しい。


次はまだキャラデータのセーブロードじゃなく、ソースコードの整理になるかな。

ダウンロード  Entry016.zip (2009.08.01)
PR


忍者ブログ [PR]
カレンダー
12 2025/01 02
S M T W T F S
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
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター