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

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

そろそろ「お金」の概念を導入して、それっぽいゲームに近づけて行こうと思う。
いろいろ考えた結果、「経験値」は使わずに、お金稼いで街で鍛えるタイプにしようかと。

そのほうがプログラム以外の説明少なくてすむし。ね。


CRPG015.png


ダウンロード Entry011.zip (2009.07.31)


で、ユニットクラスに「Money(お金)」を追加する。


Unit.h


#pragma once

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 Unit::Init(string Name, int HP, int Atp, int Dfp, int Money)
{
    cout << "Init:"<< Name << "\n";
    this->Name = Name;
    this->MaxHP = this->HP = HP;
    this->Atp = Atp;
    this->Dfp = Dfp;
    this->Money = Money;
}



必要そうなメソッド追加してみた。
嘘だけど。このエントリ書くところまでは先にプログラム書いてるから、必要になってから
作ってる。

AddMoney(); とか GetMoney(); とか、ややこしいぜ。
この馬鹿のセンスの無さがうかがえる。


で、メソッドの実体。
Unit.h


void Unit::AddMoney(int Gd)
{
    Money += Gd;
    cout << Name << "は、 " << Gd << "ゴールド手に入れた!\n";
    ShowMoney();
}

void Unit::Stay(int price)
{
    if(Money >= price){
        cout << Name << "は、宿に泊まった・・・\n体力が全快した。\n";
        HP = MaxHP;
        Money -= price;
    } else {
        cout << "お金がたりませんよ!\n";
    }
    ShowStatus();
    ShowMoney();
}

void Unit::ShowMoney()
{
    cout << "現在の所持金:" << Money << "G\n";
}





やってることは単純。


で、メインに「お金」を導入してみる。
main.cpp


int main()
{
    Result res;
    int cmd,cmdcnt;
    srand(static_cast<unsigned int>(time(NULL)));

    Unit player,enemy,eList[5];
    player.Init("ゆうしゃ", 30, 8, 5, 0);

    eList[0].Init("ゴブリン", 12, 6, 3, 5);
    eList[1].Init("ゴブ2号", 18, 7, 4, 10);
    eList[2].Init("ゴブ大将", 24, 9, 5, 30);
    eList[3].Init("がいこつ戦士", 30, 12, 8, 50);
    eList[4].Init("あのひと", 99, 24, 24, 9999);


    while(1)
    {
        // 街
        cout << "\n\n街にいます。\n";
        player.ShowStatus();
        player.ShowMoney();
        cmdcnt=0;
        while(1){
            cmd = 0;
            cout << "どうする?(1:出撃 2:宿屋(10G) 9:終了):";
            if(cmdcnt){
                cin.clear();
                cin.ignore();
            }
            cin >> cmd;
            cout << "\n";
            if(cmd == 1) break;
            if(cmd == 2) {
                player.Stay(10);
            }
            if((++cmdcnt)>10){cmd = 9; break;}   //無限ループ防止
            if(cmd == 9) break;
        }
        if(cmd == 9) break;      // あばば状態のとき、終了のお知らせ。

        // 戦闘
        for(int i=0;i<5;++i)
        {
            enemy = eList[i];
            res = Battle(player,enemy);
            if(res==WIN){         // プレイヤー勝利
                cout << "勝ち。\n";
                player.AddMoney(enemy.GetMoney());
            } else break;
        }
        if(res==WIN){
            // 戦闘勝利で終了してるってことは、大勝利の予感
            cout << "\n\n*+*+*  完 全 勝 利 !!  *+*+*\n";
            cout << "勇者 " << player.getName() << " の名を永遠に称えるがよい。\n\n";
            break;  // ゲーム終了
        }
        if(res==LOSE){
            cout << player.getName() << " は死亡した。\n\n-GAME OVER-\n";
            break;  // ゲーム終了
        }
        if(res==ABORT) break;    // 「終了」コマンド選択
    }

    cout << "\n\n終了。" << endl;
    return 0;
}


こんなもんかな。
初期化のところはパラメーターひとつ増えたんでごっそり変更。
2体目までは間違いなく勝てる強さなんで、宿代を2体の所持金合計基準で決める。
3体目に勝てれば大きな前進だし、何度か挑戦してるだけでも、宿代+αぐらいのペースで
少しづつ溜まっていく計算。

宿のなかの処理は、ぜんぶ Unit.Stay(); メソッドに任せてる。

あと、敵に勝ったときにお金を拾う。



テストプレイ。


CRPG015.png


なかなかいいんじゃね?
適当に作ってるわりに。

ダウンロード Entry011.zip (2009.07.31)
PR


忍者ブログ [PR]
カレンダー
02 2025/03 04
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
アクセス解析
カウンター