なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
そろそろ「お金」の概念を導入して、それっぽいゲームに近づけて行こうと思う。
いろいろ考えた結果、「経験値」は使わずに、お金稼いで街で鍛えるタイプにしようかと。 そのほうがプログラム以外の説明少なくてすむし。ね。 ダウンロード 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(); メソッドに任せてる。 あと、敵に勝ったときにお金を拾う。 テストプレイ。 なかなかいいんじゃね? 適当に作ってるわりに。 ダウンロード Entry011.zip (2009.07.31) PR |
カレンダー
カテゴリー
フリーエリア
最新記事
(01/29)
(01/28)
(01/26)
(12/28)
(12/27)
(12/25)
(12/20)
(09/09)
(09/09)
(09/09)
(09/08)
(09/08)
(09/08)
(09/06)
(09/05)
(08/27)
(08/27)
(08/27)
(08/25)
(08/23)
ブログ内検索
P R
アクセス解析
カウンター
|