- ベストアンサー
C++で簡単な対戦ゲームを制作!初心者向けのコードを解説!
- C++で簡単な対戦ゲームの制作方法を解説します。初心者でも理解しやすいように、コードの詳細な解説を行います。
- プレイヤーとモンスターが戦う対戦ゲームのコード例を紹介します。プレイヤーとモンスターのHPが0になった時にゲームを終了させる方法や、攻撃の選択肢を増やす方法などを解説します。
- 対戦ゲームに「急所に当たった」という表現を追加する方法を解説します。急所に当たった場合のダメージ倍率や、急所に当たる確率を設定する方法を紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ここは質問するところなんですけど、そこのところはご理解いただいているという認識でよろしいでしょうか? >要望が3つあります 要望以前にちゃんと動作するコードにする必要がありそうですが。 >int x = 0, a = 11, b = 17, c = 50; >printf("あなたの運勢を二桁以内の半角英数字で入力してください:"); >scanf("%d",x); 数字の入力は出来ませんね。 少なくとも入力文字の先頭に数字を入力してはいけないコードです。 「先に進ませる」ためには。 # 理由はご丁寧にコンパイル時の警告メッセージとして出力されています。 数字を入力するとプレイヤーとモンスターの戦闘は神により禁止されます。 # SegmentationFaultかアクセス違反という神罰により平和な世界が訪れる。 で、数字に入力できないので…ここでのxは常に0になり以降の計算式も毎回同じ値を返すことが確定します。 # ゲーム的要素ないですね…。 >printf("(Ctrl+cで終了します。先頭を続けるにはEnterキーを押してください)\n"); Ctrl+cでやはり神を召喚します。 結果として「先頭は無かった」ことにされ、プレイヤーもモンスターも死なない平和が実現されます。 # プロセスの強制終了。 環境によっては世界の裏側でプレイヤーとモンスターが神からの時間停止呪文の解放を待ち続けます。 # フォアグランドにならないとgetchar()から先進めないでしょうしね。 >・プレイヤーかモンスターのどちらかのHPが0になった時に、このゲームを終了させたい。 >while(1){ のループの継続条件を整理してみてください。 ちなみに、「0」になる確率にも注意が必要です。 # 25-30は0ではありませんから。 まぁ、ループの継続条件だけでなく中断判定も入れないとアンデットになったプレイヤーがモンスターに攻撃可能だったりします。 さすが勇者!死んでもただでは死にません! # そして、最初のループ継続条件をミスするとアンデットになったプレイヤーとモンスターがえいえんの戦闘を繰り広げます。 えいえんの戦闘の果て、アンデットから体力バカに転生します。 # えいえんはあるよ。ここにあるよ。 とりあえず、疑似乱数ってものがあることは勉強しましょう。 # あと、種が必要であることも。 >・攻撃の選択肢を増やしたい。(魔法や必殺技など) getchar()での入力内容によって分岐する処理でも追加すればよいでしょう。 「想定外の入力」についても考慮は必要でしょうが。 # MPやら必殺技の使用条件とか考える必要もあるでしょうねぇ。 >・「急所に当たった」という表現を追加したい。 乱数で判定でしょうかねぇ。 行動選択できるなら判定処理ちゃんと考えないとアホな結果になるのでご注意を。 プレイヤーは回復の呪文を唱えた! プレイヤーのHPが34回復。 モンスターの急所に当たった!! モンスターに74のダメージ!! みたいな。 # いつ攻撃したよ? ちなみに何度か指摘しているループ継続条件をミスると、回復呪文でプレイヤーの負けになる場合もあります。 # アンデットから生者になれるわずかな隙間で。 >お時間がよろしければ下記サイトに例としてコードを書いていただけないでしょうか。 謹んでお断りいたします。 「こういうコードにして、こういう結果を望んだけど違う結果になる。どこが悪いの?」みたいな質問でしたら回答してくれる人はそれなりに居るでしょうが。