ページ 11

助けてください。

Posted: 2010年9月05日(日) 12:14
by タクロウ
高校でc++の宿題が出たのですが、完成しなく困っています。
どなたか助けてください。締め切りは9月7日です。
宿題の内容はゲームを作ることです。添付したファイルが先生から配られたサンプルです。このくらいのレベルのものを作りたいと思っています。


私は主人公が魔物(何体か現れる)を倒していくゲームを作ろうと思っています。
主人公と魔物にはそれぞれ体力があって、攻撃すると減り、魔物の体力が0になれば倒せたり、魔物を倒すと主人公の体力があがる機能をつけようと思っています。

ゲームの流れは、ゲーム説明→コマンドで行動を選択(→魔物が現れる→倒す→主人公のステータスがあがっていく→主人公の英雄度が一定の数に達したらゲームクリア
としたいです。

主人公に
攻撃力(攻撃ポイント)、魔力(魔法ポイント)、体力(HPのようなもの)、英雄度(レベルのようなもの)といったステータスをつけ、魔物を倒していくにつれそれが上昇し、英雄度が一定の数値に達したらクリア としたいです。

また
・魔物を何体か出現させるシステム(ステータスや名前の違う魔物)
・攻撃すると体力が減るシステム(戦闘に入り、攻撃 魔法 などで相手を攻撃 魔物の体力を減らす)
・体力が0になると倒れるシステム(主人公と魔物のどちらかの体力が0になると次のステップに移るようにしたい)
・倒すと主人公の体力があがるシステム(魔物を倒すと、主人公のステータスが上昇する)
をどのように作ればいいのかわかりません。

環境はXcodeです。(MacOS)

現在の知識レベルに関してですが、%で示すことが難しいです。
c++の前にphpをやったことがあるので、構造は理解できます。サンプルファイルがどのような構造になっているかは完全にわかります。




先生からいただいたサンプル(sample.txt)
私の作りかけのプログラム(aiueo.cpp)
を添付しました。

画像

Re:助けてください。

Posted: 2010年9月05日(日) 12:43
by softya
まず締切りを明確にしてくださいね。
それと現在のC++の知識レベルを出来るだけ細かく書いてください。
(クラス理解度30%やポインタ理解度10%とか)
それとここはtxtやzipなら添付可能です。活用してください。

>魔物を何体か出現させるか
>攻撃すると体力が減るシステム
>体力が0になると倒れるシステム
>倒すと主人公の体力があがるシステム

ここに関してはアルゴリズムとか仕様の問題ですので細かく検討する必要があります。
日本語でどの様にしたら良いか書けますか?
できるだけ細かく書いてみてください。
ゲームの流れについても、書いてみてください。

Re:助けてください。

Posted: 2010年9月05日(日) 14:18
by softya
更新されたことに今まで気づきませんでした。
返信の形で、書いてくださいね。
タイトルももとに戻すことをお勧めします。

>宿題の内容はゲームを作ることです。添付したファイルが先生から配られたサンプルです。このくらいのレベルのものを作りたいと思っています。

時間的にはむちゃくちゃ厳しいですね。

>c++の前にphpをやったことがあるので、構造は理解できます。サンプルファイルがどのような構造になっているかは完全にわかります。

構造ということはアルゴリズムは分かりますか?
何となく分かる気がするのと、同じものが見ずに書けるのでは理解度が全く違います。
たとえば、
void Uranaishi::SettokuryokuWoAgeru(int p) // pは使用するパワー
でやっていることは日本語で説明できますか?
それで日本語で書いたあと元を見ずに同じものが書けますか?
理解しているというのは、同じものが書ける状態を言います。


>私は主人公が魔物(何体か現れる)を倒していくゲームを作ろうと思っています。
>主人公と魔物にはそれぞれ体力があって、攻撃すると減り、魔物の体力が0になれば倒せたり、魔物を倒すと主人公の体力があがる機能をつけようと思っています。
>ゲームの流れは、ゲーム説明→コマンドで行動を選択(→魔物が現れる→倒す→主人公のステータスがあがっていく→主人公の英雄度が一定の数に達したらゲームクリアとしたいです。

うーん。
まだ具体的ではないですね。
こうしましょう。
こうやって動くとんだとテキストで良いので架空の(→魔物が現れる→倒す→主人公のステータスがあがっていく)までのテキストのやりとりを実際に書いてみてください。

>主人公に
>攻撃力(攻撃ポイント)、魔力(魔法ポイント)、体力(HPのようなもの)、英雄度(レベルのようなもの)といったステータスをつけ、魔物を倒していくにつれそれが上昇し、英雄度が一定の数値に達したらクリア としたいです。

それぞれの値は何に使いますか?
攻撃力
魔力
体力
英雄度 ← なんの条件で上がるのでしょうか?
攻撃力、魔力、体力と英雄度の関係式は?
プログラムの作り方以前に決めておくべきことですね。
自分で攻略本を書くつもりで考えてみてください。

Re:助けてください。

Posted: 2010年9月05日(日) 14:44
by softya
RPGの模擬戦闘シミュレータのリンクを張っておきます。ただし、C言語です。
http://www5f.biglobe.ne.jp/~ymlab/program/c/sentoc.htm
http://tokyo.cool.ne.jp/scj/columm/takahashi_06.html

Re:助けてください。

Posted: 2010年9月05日(日) 15:29
by タクロウ
ご回答ありがとうございます。

現在外出中でして、思い出す限りですとvoid~の部分は条件によって説得力をあげるものだったと思います。入力したある数値が一定の数値を超えるか超えないかとかでプラスされる説得力変わるものだった気がします。
攻撃力は主人公の力量を表します。高ければ敵に与えるダメージも高くなります。(10~100)
魔力は行動を起こすと消費します。(10~50)
体力は主人公の体力そのものです。0になったらゲームオーバー。高ければ死ににくくなります(10~100)

英雄度は主人公のレベルです。10まであがればゲームクリアとなります(0~10)
体力と攻撃力は敵をたおすと5~10のレンジでランダムに上昇し、英雄度は1~2のレンジでランダムに上昇します。


ゲーム展開は、まずゲーム説得がはじまります。その次にコマンドで行動を選択します。1筋トレ(攻撃力をあげる)、2眠る(体力をあげる)、3何もしない
行動を起こすと魔力を~3消費し、1、2はそれぞれ体力と攻撃力を上昇させます。

2~3ターンに一度魔物が現れます。(毎回ランダムで、主人公のステータスに似たもの)
次に戦闘フェーズに入ります。


コマンドで何をするか選択します。
1、攻撃(攻撃力に応じて相手の体力をへらします。)
2、逃げる(戦闘を終わらせます)
(行動を起こせば魔力を消費します)
負ければゲームオーバー

これを主人公の体力か魔力が0になるまで繰り返します。
英雄度が10になるとゲームクリアです。

Re:助けてください。

Posted: 2010年9月05日(日) 15:43
by softya
>思い出す限りですとvoid~の部分は条件によって説得力をあげるものだったと思います。入力したある数値が一定の数値を超えるか超えないかとかでプラスされる説得力変わるものだった気がします。
同じものは見ずに書けると考えて良いですね?

>攻撃力は主人公の力量を表します。高ければ敵に与えるダメージも高くなります。(10~100)
ダメージの計算式をお願いします。

>魔力は行動を起こすと消費します。(10~50)
魔力の消費量はどうやって決まりますか?
と言うより時間がないので具体的に全てのパターンと数値を急いで決めてください。

>体力は主人公の体力そのものです。0になったらゲームオーバー。高ければ死ににくくなります(10~100)
それでは現在値と最大値を保持する必要があるのですね?
それとも、現在値だけですか?

>英雄度は主人公のレベルです。10まであがればゲームクリアとなります(0~10)
体力と攻撃力は敵をたおすと5~10のレンジでランダムに上昇し、英雄度は1~2のレンジでランダムに上昇します。
はい。それはOKですね。

>ゲーム展開は、まずゲーム説得がはじまります。その次にコマンドで行動を選択します。1筋トレ(攻撃力をあげる)、2眠る(体力をあげる)、3何もしない
>行動を起こすと魔力を~3消費し、1、2はそれぞれ体力と攻撃力を上昇させます。
魔力の回復はレベルアップだけですか?

>2~3ターンに一度魔物が現れます。(毎回ランダムで、主人公のステータスに似たもの)
>次に戦闘フェーズに入ります。
これは乱数で良いですね。
魔物の決定方法がないですね。検討をお願いします。
あと魔物パラメータも。

>コマンドで何をするか選択します。
>1、攻撃(攻撃力に応じて相手の体力をへらします。)
>2、逃げる(戦闘を終わらせます)
>(行動を起こせば魔力を消費します)
>負ければゲームオーバー

これはOKだと思います。

>これを主人公の体力か魔力が0になるまで繰り返します。
>英雄度が10になるとゲームクリアです。

じゃあ、まず足らない分を検討してみてください。
それと戦闘は後回しにして主人公の行動側から作ってみましょか。

Re:助けてください。

Posted: 2010年9月05日(日) 16:08
by タクロウ
携帯電話から投稿しているので見づらいかもしれません。

はい。構いません。

攻撃力は初期値は10(~99)
戦闘で勝つか筋トレで4~6のレンジでランダムに上昇します。
アタックダメージは現在の攻撃力の30~50%の値をランダムに出力しまし。
魔力は初期値10(~50)魔力を上昇させるには戦闘に勝つしかありません。勝ったときに2か3、行動しても2か3消費します。

体力は初期値10(~99)戦闘で勝つか眠るで4~6のレンジでランダムに上昇します。
体力は現在値のみです。
英雄度は初期値0(~10)戦闘に勝つと1か2上昇します。

魔物のステータス主人公同様、攻撃力、魔力、体力です。ダメージ値などの計算式も同じですが、それぞれの値は現在の主人公のステータスの60~80%です。

Re:助けてください。

Posted: 2010年9月05日(日) 16:22
by softya
抜けがないか自分で再確認してみてください。
パラメータが出揃ったと思うので、まず行動を作ってみましょう。

擬似プログラムで良いので、簡単にプログラムを書いてみるのをお勧めします。

[擬似プログラム]
説明(略)
入力待ち
while( 体力がnot0 and 魔力がnot0 and 英雄度<10 )の間ループ
 cinで行動番号を得る。
 if( 行動番号が1 )
  筋トレ関数()
 if( 行動番号が2 )
  眠る関数()
if( モンスター出現? )
戦闘処理の関数()
whileここまで

って感じです。
わざと省略している部分もあるので自分で補完してみてください。

Re:助けてください。

Posted: 2010年9月05日(日) 16:43
by タクロウ
ありがとうございます。本当に感謝しています。

プログラムを書いてみようと思います。
できる限り頑張ってみますが、もし出来なかった時はもう一度私に救いの手をさしのべてやってください・・

Re:助けてください。

Posted: 2010年9月05日(日) 19:41
by タクロウ
ここまでやってみました。(ファイルを添付しました)
出たエラーと、やりかけのプロラムを添付しました。

朝からずっとやっていて、現在頭があまり回っていないきがします。
かなりしょぼいミスもあるでしょうが、教えていただけるとうれしいです。

Re:助けてください。

Posted: 2010年9月05日(日) 21:11
by タクロウ
だいたいのエラーを修正しましたが、error: expected primary-expression before ‘.’ tokenというエラーだけがとれません。どういうことなのでしょうか?
また、魔王との戦闘の書き方を教えてくださいませんか?

Re:助けてください。

Posted: 2010年9月05日(日) 21:38
by softya
エラー箇所は、参照できないものを参照しているせいです、
Mamonoのインスタンス生成時に引数にJonnyのパラメータを渡す様にしてください。
//コンストラクタ
Mamono(int power,int tairyoku) :Name("魔物"), Maryoku(20)
{
Power = (int)(power * 0.6); // or 0.7 or 0.8
Tairyoku = (int)(tairyoku * 0.6); // or 0.7 or 0.8)
}
あと orって書いてあるところは乱数で生成するようにしてください。
0.6 or 0.7 or 0.8なら((double)(rand()%3 + 6) / 10.0)です。
それとint型とdouble型の演算が混在してますので、ちゃんとキャストしてください。

Re:助けてください。

Posted: 2010年9月05日(日) 21:57
by タクロウ
どうしても残りのエラーが修正できません。。
手伝ってくだいませんか?

Re:助けてください。

Posted: 2010年9月05日(日) 22:09
by softya
No:61048 のものをこちらでエラーを取ったものを添付しました。
見比べてみてください。

Re:助けてください。

Posted: 2010年9月05日(日) 22:36
by タクロウ
softyaさんいつもありがとうございます。感謝しています。

エラーはなくなったのですが、実行しても主人公がコマンドで行動を選択する場面ば表示されません。なぜでしょうか?

現在の状態のファイルを添付しました。

Re:助けてください。

Posted: 2010年9月05日(日) 23:45
by softya
すいません時間が取れそうにないので、ほかの方にお任せします。
【追記】
明日また時間を見て手伝わせてもらいます。申し訳ない。 画像

Re:助けてください。

Posted: 2010年9月06日(月) 03:29
by nazu
初めまして。
アドバイスするのも初めてなので、不安ですが

273行目の、while文に問題があります。
//体力がゼロになるか、英雄度が10になるまで繰り返す
while(you.GetTairyoku() < 0 && you.GetMaryoku() < 0 && you.GetEiyuudo() < 10)
while文は評価が真の間ループします。
このプログラムの仕様を見る限り、体力と魔力が0になるまでコマンドを実行でき、
英雄度が10になるとゲームクリアとのことですので、もう一度この部分を見直してください。


ざっと見ただけなので、見落としているかも知れません。

Re:助けてください。

Posted: 2010年9月06日(月) 22:44
by タクロウ
一応完成しました。
正常に動いています。
「ここをこうしたほうが良い」とかいうアドバイスがありましたら、教えてくださると助かります。

Re:助けてください。

Posted: 2010年9月07日(火) 15:29
by softya
完成おめでとうございます。

Re:助けてください。

Posted: 2010年9月07日(火) 22:05
by タクロウ
ありがとうございました。