なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ようやくここまできた。寄り道ばっかりだけど、長い道のりだった。
ダウンロード 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 |
カレンダー
カテゴリー
フリーエリア
最新記事
(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
アクセス解析
カウンター
|