なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
行動を自分で決められるだけで、印象ずいぶん違う。
なんかぽろっと適当に作ってみた。 main.cpp int main() { srand(static_cast<unsigned int>(time(NULL))); Unit player,enemy; player.Init("ゆうしゃ", 30, 8, 5); enemy.Init("ゴブリン", 12, 6, 3); /* Hist_Atk(player); Hist_Atk(enemy); Hist_Def(player); Hist_Def(enemy); Hist_NA(player, enemy); Hist_NA(enemy,player); */ int cnt = 1, cmd, cmdcnt; while(1){ cmdcnt = 0; cout << "\ncnt:" << cnt << "\n"; player.ShowStatus(); enemy.ShowStatus(); while(1){ cout << "どうする?(1:攻撃 2:逃げる):"; cin >> cmd; cout << "\n"; if(cmd == 1) break; if(cmd == 2) { cout << player.getName() << "は逃げ出した!\n"; break; } if((++cmdcnt)>10){cmd = 2;break;} //無限ループ防止 } if(cmd == 2)break; if(NormalAttack(player,enemy))break; if(NormalAttack(enemy,player))break; if((++cnt)>100)break; // 無条件ループなので、無限ループ防止 Sleep(600); } cout << "\n\n終了。" << endl; return 0; } 追加したところ。 まず、ヒストグラム関連はいらないんで、ばっさり斬る。コメントアウト!! しばらく邪魔っぽいんで、別のところに切り出してもいいと思う。 入力については、正しい答えを引き出すまで引き下がる気は無いんで、例によって無限ループ。 ループ内で「どうするべ?」って聞いて、cin でコマンド入力を受け付ける。 「1」入力されたら、無限ループ抜けてそのまま戦闘モードに。 「2」入力されたら、メッセージ表示して無限ループ抜ける。その外のループも抜ける。 その次の行、 if((++cmdcnt)>10){cmd = 2;break;} が工夫のしどころ。 cmdcnt は、この入力ループに入る前にゼロに設定してる。 ここを通過する度に1づつ上がっていく。で、10回以上ボケられたら問答無用で終了する。 cmdに「2」を入れるのは、このあとの処理が逃げたときと同じだから。 何をまわりくどいことやってんだとお思いでしょうが。 そう思うなら、この行を削除(コメントに)して、実行してみましょう。 そして、数字以外の文字、a とか z とか入力してみるとあばばばばばばばばばばばばばばば ・・・ ・・・落ち着いた? この結果は知ってた。マニュアル通りの解決方法もあるんだけど、まわりくどい上に いろいろやったらやっぱりおかしな動作になる。 これ、cin のバグだと思う。この仕様は百害あって一利なし。 解決策は、この方法がソース的にいちばん短く、分かりやすいんじゃないかなと思う次第。 いろんなC++の教科書とか授業で教えてくれるプログラムとかあるけど、数字入力のときに 文字を入れると、たいていあばばばばばってなる。 「先生、パソコンがぶっ壊れました!!!」ってわざとやると楽しい。 3回いじめたら先生には嫌われるね。 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
アクセス解析
カウンター
|