なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
もっと早い段階で入れておくべきだったのか?
変更点考えただけで胃が痛くなる。 1.Unitクラスにint Agi 追加 2.初期化 Init を、この変更に対応させる 3.Init 呼んでる 敵味方のパラメーターに追加 4.戦闘 Battle() 関数に、「素早さによる攻撃順の決定」を追加 あれ?こんなもん? 導入したいのは[4]、それについてくる1~3は、簡単すぎて問題じゃない。 ああ、他にもあったあった。 5.街で Agi も鍛えられるように。 6.それに伴う、Traning まわりの修正。 軽い気持ちで 1~3、5、6までを修正してみる。 ああ、一覧作ってから修正に入ったほうがすげー気が楽だわ。 4を導入してないから、Agi はゲーム的に何の意味ももたないけど。 ダウンロード Entry019.zip (2009.08.02) 修正1.2.メンバ変数の追加と初期化 Unit.h class Unit { protected: string Name; // 名前 int MaxHP; // 体力最大値 int HP; // 体力(現在値) int Atp; // 攻撃力 int Dfp; // 防御力 int Agi; // 素早さ int Money; // 所持金、モンスターは獲得金額 public: void Init(string Name, int HP,int Atp,int Dfp, int Agi, int Money); void ShowStatus(); int Attack(); int Defence(); string getName(){return(Name);} int Hit(int dmg); void HealMax(){HP = MaxHP;} // 体力最大まで回復 int GetMoney(){return(Money);} }; // 初期化 void Unit::Init(string Name, int HP, int Atp, int Dfp, int Agi, int Money) { this->Name = Name; this->MaxHP = this->HP = HP; this->Atp = Atp; this->Dfp = Dfp; this->Agi = Agi; this->Money = Money; } // パラメーター表示 void Unit::ShowStatus() { この続きのShowStatus() に目が行ったけど、隠しというかモンスターの素早さまで 見えなくてもいいかなと思ったんで、ShowStatus() は変更せず。 修正3.パラメータ実体にAgi追加 main.cpp void InitPlayer(Player &player) { string name; cout << "あなたの名前を入れてください:"; cin >> name; player.Init(name, 30, 8, 5, 6, 0); } void InitEnemyList(Unit (&eList)[MonsterMaxNum]) { eList[0].Init("ゴブリン", 12, 6, 3, 3, 5); eList[1].Init("ゴブ2号", 18, 7, 4, 5, 10); eList[2].Init("ゴブ大将", 24, 9, 5, 5, 30); eList[3].Init("がいこつ戦士", 30, 12, 8, 12, 50); eList[4].Init("あのひと", 99, 24, 24, 50,9999); } 数字はいたって適当。 いちおう、攻撃力と同じ計算式で、素早さ≒期待値に持って行くつもり。 どれぐらい差がつけば、超えられない壁になるのか。怖い敵になるのか。 動いてみないと、わかりません! ゆうしゃの初期値、素早さ6なら3~9、がいこつ戦士の素早さ12なら6~18 相当に運が悪くないと、レベル1ゆうしゃが先制することはできない。 でも、たまにぽろっと先制してしまう感じ。 修正点5.6.街メニューに「素早さ訓練」追加 main.cpp Result TownEvent(Player& player) { Result res; int cmd,cmdcnt = 0; static int stayPrice = 10; cout << "\n\n街にいます。\n"; while(1){ cmd = 0; res = NONE; player.ShowStatus(); player.ShowMoney(); cout << "\n1:出撃\n" << "2:宿屋(" << stayPrice << "G) 体力 " << player.getShowHP() << "\n" << "3:体力強化(" << player.TrainingCost(THP) <<"G)\n" << "4:攻撃訓練(" << player.TrainingCost(TAtk) <<"G)\n" << "5:防御訓練(" << player.TrainingCost(TDef) <<"G)\n" << "6:素早さ (" << player.TrainingCost(TAgi) <<"G)\n" << "9:終了\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.Training(THP); break; case 4: // 攻撃訓練 player.Training(TAtk); break; case 5: // 防御訓練 player.Training(TDef); break; case 6: // 素早さ訓練 player.Training(TAgi); break; case 9: res = ABORT; break; } Player.h // Player.h #include "Unit.h" enum TrainingMenu { THP, // 体力強化 TAtk, // 攻撃力強化 TDef, // 防御力強化 TAgi // 素早さ強化 }; const char *tMenu[] = { "体力", "攻撃力", "防御力", "素早さ" }; class Player : public Unit { : : void Player::Training(TrainingMenu tM) { int cost = TrainingCost(tM); int imp = 0; if(Money >= cost){ Money -= cost; switch(tM){ case THP: imp = MaxHP/12 + 1; MaxHP += imp; break; case TAtk: imp = 1; Atp ++; break; case TDef: imp = 1; Dfp++; break; case TAgi: imp = 1; Agi++; break; } cout << tMenu[tM] << "が " << imp << "上がった。\n"; } else { cout << "お金がたりませんよ!\n"; } } int Player::TrainingCost(TrainingMenu tM) { int cost = 0; switch(tM){ case THP: cost = (MaxHP/10)*5; break; case TAtk: cost = Atp*5; break; case TDef: cost = Dfp*5; break; case TAgi: cost = Agi*5; break; } return cost; } トレーニングメニュー enum Training 宣言を、Unitからこっちに持ってきた。 Unit 側にはトレーニングいらないから消しておけ。な。 Trainingメソッドのほうは、よくできてるなあ。両方に case ひとつ追加するだけ。 コンパイルしてみる。何事もなく通る。ちょっと怖い。 実行。 ふむ。 素早さの表示はいらないかと思ってたけど、街でのこの表示は気になるなあ。 ちょうどこの部分、ShowStatus() と ShowMoney() 2行をいつもワンセットで呼んでたのが 気になってたんで、修正してやるか。 Unit.h class Player : public Unit { public: void Stay(int price); // 宿に泊まる void AddMoney(int gd); // 金額加算 //void ShowMoney(); void ShowAllStatus(); void Training(TrainingMenu tM); // 強化訓練(3種) int TrainingCost(TrainingMenu tM); // 強化コスト string getShowHP(); }; void Player::ShowAllStatus() { cout << "【" << Name << "】 HP:" << getShowHP() << " Atp:" << Atp << " Dfp:" << Dfp << " Agi:" << Agi << "\n"; cout << "現在の所持金:" << Money << "G\n"; } void Player::AddMoney(int Gd) { Money += Gd; cout << Name << "は、 " << Gd << "ゴールド手に入れた!\n"; ShowAllStatus(); } main.cpp Result TownEvent(Player& player) { Result res; int cmd,cmdcnt = 0; static int stayPrice = 10; cout << "\n\n街にいます。\n"; while(1){ cmd = 0; res = NONE; player.ShowAllStatus(); cout << "\n1:出撃\n" こんなもんかな。 メインディッシュには手もつけずに、このエントリ終われ。 ダウンロード Entry019.zip (2009.08.02) 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
アクセス解析
カウンター
|