ExcelでのVisual Basicのプログラミングでモンスターが乱数で攻撃をする方法

このQ&Aのポイント
  • ExcelでのVisual Basicのプログラミングでモンスターが乱数で攻撃をしてHPを減らすものを作りたいのですがどうすればいいのでしょうか?
  • ExcelのVisual Basicプログラミングでモンスターが乱数で攻撃をする方法を教えてください。
  • Excelでのプログラミングでモンスターがランダムな攻撃を行い、HPを減らしていく方法を教えてください。
回答を見る
  • ベストアンサー

ExcelでのVisual Basicのプログラミング

ExcelでのVisual Basicのプログラミングでモンスターが乱数で攻撃をしてHPを減らすものを作りたいのですがどうすればいいのでしょうか?ちなみにここまで出来ました。 Type Monster namae as String kougeki as Integer bougyo as Integer HP as Integer End Type Dim dragon as Monster, doragon2 as Monster dragon.namae = "red" dragon.kougeki = 50 dragon.bougyo = 50 dragon.HP = 100 dragon2.namae = "blue" dragon2.kougeki = 10 dragon2.bougyo = 10 dragon2.HP = 50 If dragon.kougeki > 50 Then MsgBox "fire"

質問者が選んだベストアンサー

  • ベストアンサー
  • nac03056
  • ベストアンサー率48% (203/419)
回答No.4

誰の補足もないようなのと、適当に作ったにしても計算式があまりに不自然でしたので、修正しました。でついでに要望のありました戦闘結果も出すようにしましたので、あとはパラメータの調整をするなど、存分に改造してみてください。 Randomize ' 乱数初期化 Do dragon.HP = dragon.HP - dragon2.kougeki * Rnd + dragon.bougyo * Rnd ' ドラゴンへの攻撃 dragon2.HP = dragon2.HP - dragon.kougeki * Rnd + dragon2.bougyo * Rnd ' ドラゴン2への攻撃 MsgBox dragon.HP & " " & dragon2.HP ' 双方の残りHPを表示 Loop While dragon.HP > 0 And dragon2.HP > 0 ' 双方が生きている間はdoに戻って戦いを繰り返す If dragon.HP > 0 Then ' ドラゴンが生き残っていたら MsgBox "ドラゴン" & dragon.namae & "が勝ちました" ElseIf dragon2.HP > 0 Then ' ドラゴン2が生き残っていたら MsgBox "ドラゴン" & dragon2.namae & "が勝ちました" Else ' どちらでもなかったら MsgBox "引き分け" End If 注釈などの文脈でおおよその流れはわかると思いますから、いろいろ手を加えてプログラムを理解してみてください。

その他の回答 (3)

  • nac03056
  • ベストアンサー率48% (203/419)
回答No.3

個人的にこういうプログラムは好きなんですが、いかんせんこれでどういう結果を求めているのかはわかりません。 まず、2匹の基本パラメータはあるようですが、このゲーム?はこの2匹が戦うのでしょうか?それともあなたと戦うのでしょうか。また、これらパラメータの用途が何かを(おおよそは想像が付きますが)はっきりさせたほうがいいでしょう。たとえば、kougekiとは通常攻撃の値か最大攻撃の値か、特に最後のif文で50より大きい場合の処理が入ってますが、なぜ50と決めている dragon.kougeki の値が50を超えることがあるのかの説明なしに答えを求めるのは酷というものです。そして一番の問題は、これらの戦闘の結果をどのように表示したいのか。途中経過は表現するのかです。 やはり環境がExcelということで、vbほどの表現が難しいだけに、そのあたりの仕様までははっきりさせないと、どうにもなりません。 あとは私の想像ですが、この後で Randomize ' 乱数初期化 do dragon.HP = dragon.HP - (dragon.bougyo * rnd - dragon2.kougeki * rnd) ' ドラゴンへの攻撃 dragon2.HP = dragon2.HP - (dragon2.bougyo * rnd - dragon.kougeki * rnd) ' ドラゴン2への攻撃 msgbox dragon.HP & " " & dragon2.HP ' 双方の残りHPを表示 loop while dragon.HP > 0 and dragon2.HP > 0 ' 双方が生きている間はdoに戻って戦いを繰り返す と加えることで流れはいいかと思います。(もちろん攻撃の計算式は適当でバランスも取れていませんし、防御が上回って回復してしまう時もあります) p.s. dim の所の変数名のつづりが間違ってますよ。^^

bad-pc
質問者

お礼

モンスター同士が戦うものを作りたかったのですが、説明が足りなくてすみませんでした。すごいしょぼいゲームでいんですが、戦闘結果は~の勝ちで表したいのですがどうすればいいのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>ExcelでのVisual Basicのプログラミング 「エクセルVBA」というのが(分野が)あって、エクセル固有の操作(エクセルでできる機能を)スクリプトで動かすものがあります。 ほぼ仕事(ビジネス)の必要に絡むもの(数値や文字列の加工)です。この質問コーナーはそちらの質問がほとんどです。とりあえず、エクセルは、ゲームなどは念頭にありません(オブジェクト・メソッドプロパティも適したものはない)。 質問者がエクセルしか持ってないからなのか、持ち主が多いエクセルユーザーを対象とするためか判りませんが、VB(6.0相当)として使うならVBということで質問や勉強したら。 ーー なぜエクセルなのか。シートのセルが扱いやすいと思ったのか、良くわかりません。 ーー 質問のコード程度で画面の像が動くなんて想像もできません。 やりたいというだけで、勉強はあまりしてなくてこれからということかな。 もしつくり方を知っている方がいても、このコーナーに回答を上げるのは量的に荷が重いと思う。 全部教えてと丸投げ的になっているので、もう少し判らない課題点を絞って質問すべきです。

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.1

 この程度の内容では、貴方がどのようなゲームをイメージしているか全く判りません。  まずは、基本的な所から勉強をしましょう。 http://www.geocities.jp/excelgame/books/intro.html http://www1.plala.or.jp/chikada/cell/celltop.htm その他にも、「Excel VBA ゲーム」等で検索すると、役に立つサイトがいっぱいあります。 頑張って下さい。

関連するQ&A

  • プログラミング修正について

    次のようなプログラムをコンパイルしたところ以下のようなエラーが表示されました。 struct monster{ int type; /* タイプ */ char trick[25]; /* 技 */ char trick2[25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name[10]; /* 名前 */ int power; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ int HP; /* 体力 */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; main(){ int a[2][3]; struct monster monster[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, }; struct monster monster2[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, }; inputmonster(a, monster); ・ ・ ・ } void inputmonster(int x[][3], struct monster monster) { } monsterbattle.c:497:2: エラー: 2 番目の ‘inputmonster’ の引数用の互換性がない型です inputmonster(a, monster); ^ monsterbattle.c:27:6: 備考: expected ‘struct monster’ but argument is of type ‘struct monster *’ void inputmonster(int x[][3], struct monster monster) ^ monsterbattle.c:499:2: エラー: プログラム内に逸脱した ‘\357’ があります printf("これからバトルを開始します\n\n"); ^ monsterbattle.c:499:2: エラー: プログラム内に逸脱した ‘\274’ があります monsterbattle.c:499:2: エラー: プログラム内に逸脱した ‘\233’ があります monsterbattle.c:501:2: エラー: expected ‘;’ before ‘printf’ printf("player1は%sをくりだした。\n", monster[a[0][0]-1].name); プログラムを修正したいのですが、正直どこを変えればいいのか全くわかりません。 お手数ですが1つ1つ教えていただけるとありがたいです。 よろしくお願いいたします。

  • TYPE分の使い方で

    Visual Basic 6.0です。 バイナリーファイルを読むのに使用するため 下記のようなType宣言をしています。 今 KOUMOKU は String * 10で宣言しているのですが 読み込むファイルでいろいろあるので (*8,*6,*4など) たくさんのType分を作っているのですが 一つのType分で宣言できる方法はないでしょうか。 Type TYPEA KOUMOKU As String * 10 <-この10が任意で可変できないでしょうか NAMAE As String * 20 BUKA As String * 5 End Type

  • Visual Basic の簡単な問題なのですが、分からないので教えてください><

    私は大学の情報の講義で、Visual Basic を習っているのですがちょっとお聞きしたい問題があるのですが、VBに知識のある方回答お願いしますm(_ _"m)ペコリ [問題]1から10までの2乗和を求めて値を表示する3つのプロシージャex1,ex2,ex3をFor~next構文、While~Wend構文、Do Until~Loop構文をそれぞれ用いて完成させよ。 上記のような問題なのですが、For~Next構文は分かりました! Sub ex1() Dim s,n As Integer s=0   For n = 1 To 10   s = s + n^2   Next n  Msgbox s End sub For~Nextは多分これであってますかね?しかし、While~Wend構文とDo Until~Loop構文でのプログラムが考えましたが分からなかったので、分かる方、回答お願いします。 よろしくお願いします<(_ _)>

  • VBA 乱数と配列

    VBA 乱数と配列 配列(0)~配列(5)の一次元配列の中に、1から6までの数字を重複しないように入れたいのですが、 上手くいきません。 ご指導の程、お願いします。 Sub rndsys() Dim 配列(5) As Integer Dim サイコロ As Integer Dim カウントA As Integer Dim カウントB As Integer Dim フラグ As Integer For カウントA = 0 To 5 Do サイコロ = Int(Rnd(1) * 6) + 1 For カウントB = 0 To 5 If 配列(カウントB) = サイコロ Then フラグ = フラグ + 1 End If Next カウントB Loop Until フラグ > 0 配列(カウントA) = サイコロ Next カウントA MsgBox 配列(0) & vbCrLf & 配列(1) & vbCrLf & 配列(2) & vbCrLf & 配列(3) & vbCrLf & 配列(4) & vbCrLf & 配列(5) End Sub

  • C言語 構造体に関するプログラムのエラーについて

    次は自分で書いたプログラムの一部なのですが、このプログラムをコンパイルすると以下のようなエラーが表示されます。 struct monster{ int type; /* タイプ */ char trick[25]; /* 技 */ char trick2[25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name[10]; /* 名前 */ int power; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ int HP; /* 体力 */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; struct monster monster2[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, } void battle(int a[2][3], struct monster monster[], struct monster monster2[]) { ・ ・ ・ printf("player2は%sをくりだした。\n", monster2.name[a[1][0] - 1]); ・ ・ printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1][0] - 1]); } monsterbattle.c:467:61: エラー: 構造体または共用体ではない何かのメンバ ‘name’ の 要求です printf("player2は%sをくりだした。\n", monster2.name[a[1][0] - 1]); ^ monsterbattle.c:475:52: エラー: 構造体または共用体ではない何かのメンバ ‘name’ の 要求です printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1 ][0] - 1]); ^ monsterbattle.c:475:80: エラー: 構造体または共用体ではない何かのメンバ ‘HP’ の要 求です printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1 ][0] - 1]); このようなエラーがあちこちで表示されるのですが、どのようにプログラミングを改善すべきなのでしょうか? お手数ですが、よろしくお願いします。

  • ExcelVBA Delegate文がエラーになる

    Excel2010 VBAでの質問です。 画面上のすべてのトップレベルウィンドウを取り出そうと、標準モジュールに以下コーディングしました。 Option Explicit Declare Function EnumWindows Lib "User32.dll" (ByVal Proc As EnumWinProc, ByVal lParam As Integer) As Boolean Delegate EnumWinProc (ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean Sub Main() Call EnumWindows(AddressOf disp_hwnd, 0) MsgBox ("完了") End Sub Function disp_hwnd(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean MsgBox (hwnd) disp_hwnd = True End Function そうしたところ、Delegate 文が赤文字に反転してエラーになります。 Excel2003 VBAでは使えない構文なのでしょうか?あるいは何かのミスなのでしょうか? 環境ですが、WindowsXP SP3、Excel2003 SP3です。 .NET Framework1.1、2.0、3.0、4.0がインストールされています。 あと、以下の参照設定はあります。   Visual Basic For Applications Microsoft Excel 11.0 Object Library OLE Automation Microsoft Office 11.0 Object Library Microsoft Forms 2.0 Object Library Microsoft Scripting Runtime Microsoft Windows Common Controls 6.0 (SP6) 以上、よろしくお願いします。

  • ソーサリアン(DC)

    かなりアバウトな質問になりますけど申し訳ありません。 色々HPを回りましたが、どこも「マニア向け仕様」で入門者にはワカラナかったので質問します。 といっても、シナリオのタイトル忘れてしまったぁ! あの最初の3つのシナリオの3つめの沼の魔法使いにカエルにされた娘さんの話です。 「蜂の巣」がどこにあるのか全く判りません。 番兵モンスターのところでアイテム取って、扉を半分開けて、トリカブトとマンドラゴラを鍋に入れてレッドドラゴンを殺した状態です。 どうかよろしくお願いします。

  • エクセルのマクロについて

    行を選択し、関数を数値に変換するために下記のようなマクロを作成しました。 選択する行数が少ないと実行でるのですが、一度にたくさんの行を選択すると下のようなエラーが返されます。 「実行時エラー"424"」オブジェクトが必要です。 どこが間違いなのか教えて頂ければ助かります。 Sub TextValue() '選択された行範囲をデータに変換します。 Dim rc As Integer Dim rngCell As Range Dim sMsg As String rc = MsgBox("データに変換しますか?", vbOKCancel) If rc = vbCancel Then Exit Sub sMsg = "変換する範囲を選択して下さい。" Set rngCell = Application.InputBox(Prompt:=sMsg, Type:=8) rc = MsgBox("選択されている範囲の関数を" & vbCrLf & "データに変換します。" & vbCrLf & _ "選択された行範囲は " & rngCell.Address(0, 0) & vbCrLf, _ vbOKCancel, "処理を確認してください。") If rc = vbCancel Then Exit Sub rngCell.Select Selection.Value = Selection.Value End Sub Excel2002  OSはXPです。 宜しくお願い致します。

  • DATファイルが読めません(VB・VBA)

    DATの読書きをしなくちゃいけない事になって 元のコードを元に書き出す事はできたのですが 読込みができなくて困っています。構造体の中に値を入れてるんですが msgboxで値を表示しても、空白しか返ってきません。 ネットでも検索してみたんですが、どこがおかしいの分からなくてお手上げです。 どなたか宜しければおかしい所を教えて下さい。 Type TEST_DAT  TEST_A as string * 1  TEST_B as string * 2  TEST_C as string * 3 End Type Sub a ()  Dim Dat as TEST_DAT  Dim Fn as integer  Fn = FreeFile  Open ThisWorkbook.path & "\Test.dat" For Random as #Fn Len = 6  Get #Fn , , Dat  Msgbox Dat.TEST_A  Msgbox Dat.TEST_B  Msgbox Dat.TEST_C  Close #Fn  End Sub Datファイルの方には、上の構造体を使ってPut #Fn,,Dat の様に書いて1行出力した物をそのまま使っています。 なので、データが無いって事はありません。 元のコードとネットで調べはしたのですが、上で問題無い様な気がして おかしい場所がさっぱりわかりません。エラー等は一切返ってきてません。 Msgbox Len(Dat.TEST_A)の様にすると1,2,3と帰って来るので 値が入ってないのが悪いとはわかるんですが…。

  • VB2010 コードの意味を教えてほしいです。

    VB2010を使って、基礎から勉強中です。 テキストに紹介してあるサンプルプログラムを作っているところですが、 どうしても、わからないところがあります。 乱数を発生させ、こんばんはという文字を、5つのボタンにランダムに表示させて ボタンをクリックして、なんという言葉か当てるゲームです。 その中で、For ~ Nextの中に入力されている内容の意味を 詳しく知りたいです。よろしくお願いします。 Public Class Form1 Private answer As String = "こんばんは" '答え Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '答えを文字列の配列に変換 Dim moji() As Char = answer.ToCharArray() '文字入れ替え Dim rnd As New Random() '乱数を発生させる For i As Integer = 1 To 10 Dim n1 As Integer = rnd.Next(5) Dim n2 As Integer = rnd.Next(5) Dim m As Char = moji(n1) moji(n1) = moji(n2) moji(n2) = m Next Button1.Text = moji(0) Button2.Text = moji(1) Button3.Text = moji(2) Button4.Text = moji(3) Button5.Text = moji(4) '回答欄を初期化 Label2.Text = "" End Sub Private Sub btns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click Dim btn As Button = CType(sender, Button) Label2.Text &= btn.Text btn.Visible = False If Label2.Text = answer Then MsgBox("おめでとう", 0, "正解") ElseIf Label2.Text.Length >= answer.Length Then MsgBox("残念!", 0, "不正解") End If

専門家に質問してみよう