• 締切済み

プログラミングについての質問です。

プログラミングでのゲーム作成についての質問です。 現在ExcelVBAにて横スクロールアクションゲーム(マリオみたいなものです)を作成しています。 MAPの作成、敵キャラの作成・動作・主人公の作成・動作は完了しました。 ステージは4面構成でラストステージの最後にBOSSを設置したいと考えています。 他の敵キャラと同じように動作は出来るのですが、BOSSなので5回踏まないと倒せない等といった 体力設定をしたいと考えています。 これがBOSS動作のコードです。 Sub ouM(i As Long) Dim l As Long, ImN As Long, xP As Long With sp(i) If .m = 1 Then ImN = 4 xP = 24 End If .n = (.n + 1) Mod 40 If .n < 30 Then .x = .x + .m * 2 If .n Mod 6 < 3 Then .o.Picture = ouI(0 + ImN).Picture Else .o.Picture = ouI(1 + ImN).Picture End If Else .x = .x + .m * 2 .o.Picture = ouI(2 + ImN).Picture End If If mapR(.x + xP, .y) = 2 Or DokanArea(.x + xP, .y) Then .m = -.m 'ElseIf mapR(.x + xP, .y + 24) = "" Then '.m = -.m End If l = .x - lEdge .o.Left = l If l <= -72 Then .o.Visible = False End If End With End Sub そしてこれがBOSSの設定です。 Case 11 With sp(schSp) .p = 11 .o.Visible = True .o.Picture = ouI(0).Picture .x = Edge * 24 .y = i * 24 .o.Left = .x - lEdge .o.Top = .y .o.Width = 40 .o.Height = 80 .m = -1 .n = Int(Rnd * 40) End With これで左右に歩きまわり、ブロックと接触すると方向転換します。 ただ、雑魚キャラと同様1度踏むと倒せてしまうので、"5回踏まないと倒せない"ようにしたいです。 なにかアドバイスお願いします。

みんなの回答

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.1

コードはろくに読んでませんが、 case11の中でBoss01でも何でも適当な変数を初期値Boss01=5でセットし、「やられた」判定ではBoss01>1の間は Boss01=Boss01-1の処理をするだけで通常動作に復帰するように組めば良いのではないですか。 一度踏まれたらその後1~2秒経過するまでは「やられた」判定自体をジャンプするなんて風にしてもいいでしょう。 jp:1 敵キャラ移動 | マイキャラ移動 | 踏んだ?判定 ↓yes それはボス?判定 ↓yes Boss01>1か?判定 ↓yes  前踏んでから2秒たってる?判定 ↓yes 踏んだよタイミングを上書き | Boss01=Boss01-1 | 効果音発生 | goto jp1 ~~~ Boss01>1か?判定            ↓no (ボス01倒した事が確定) 効果音発生 | ステージクリア表示 | 画面クリアして次ステージ描画 ~~~ 前踏んでから2秒たってる?判定 ↓no (踏みつけ無効) goto jp1 フローはこんな感じですかね~。

参考URL:
http://shadowslasheizan.blog114.fc2.com/blog-entry-75.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Basicのプログラミングについて… (game)

    箱の上から自然に落ちるようにするにはどうすればよいのでしょうか? SET bitmap SIZE 500,500 SET WINDOW 0,10000,10000,0 LET x=5000 LET y=5000 LET jsw=0 DO UNTIL getkeystate(13)<0 PLOT LINES:0,5000+110;10000,5000+110 PLOT LINES:6000,4000;7000,4000 PLOT LINES:6000,4000;6000,5000+110 PLOT LINES:7000,4000;7000,5000+110 SET AREA COLOR "white" DRAW disk WITH SCALE(100)*SHIFT(x,y) IF getkeystate(37)<0 THEN LET x=x-50 IF getkeystate(39)<0 THEN LET x=x+50 IF x<0 THEN LET x=0 IF x>10000 THEN LET x=10000 IF getkeystate(38)<0 AND jsw=0 THEN LET jsw=1 LET i=-SQR(2500) END IF IF jsw=1 THEN LET y=i^2+2500 LET i=i+1 IF i>SQR(2500) THEN LET jsw=0 end if if i>0 then if 6000<x and x<7000 then if 4000-140<=y THEN LET jsw=0 end if end if end if if i>0 then if 6000>x then LET y=i^2+2400 IF i>SQR(2500) THEN LET jsw=0 end if end if SET AREA COLOR "black" DRAW disk WITH SCALE(100)*SHIFT(x,y) WAIT DELAY 0.01 LOOP END

  • ボールが壁に当たって跳ね返るプログラムを・・

    スタートボタンを押すと一個のボールが現れ、 picture1の中を動き回り、壁に当たると跳ね返る、 スクリーンセイバーのようなプログラムを作って いるのですが「ボールが壁に当たって跳ね返る」 部分がどうしても上手くいきません。この部分を どなたか教えてください。お願いしますm(_ _)m (見やすいように線を引きました。最後の方が「跳ね返りの部分です。それ以外の部分は、文の長さ制限にひっかかるため省いてあるところがあります。) Private Sub Command1_Click() x = Int(Rnd * 3900) y = Int(Rnd * 3900) r = 100 c = vbRed Timer1.Enabled = True Timer1.Interval = 200 Picture1.Circle (x, y), r, vbRed End Sub ----------------------------------------- Private Sub Timer1_Timer() Picture1.FillColor = Picture1.BackColor Picture1.Circle (x, y), r, Picture1.BackColor dx = 100 dy = dx x = x + dx If x < 0 Then x = 0 And dx = 0 - dx If x > Picture1.Width Then x = Picture1.Width And dx = 0 - dx End If End If y = y + dy If y < 0 Then y = 0 And dy = 0 - dy If y > Picture1.Height Then y = Picture1.Height And dy = 0 - dy End If End If Picture1.FillColor = vbRed Picture1.Circle (x, y), r, vbRed End Sub

  • 十進BASICでの衝突プログラミング

    十進ベーシック超初心者です。二次元の箱の中に円を置き、そこで衝突を繰り返すプログラムをつくりたいのですが行き詰っています。 箱の中だけでの衝突は、以下のようにプログラムできたのですが、円にぶつかるときどのようにプログラムをくんで跳ね返させればいいかわかりません。どなたか教えて下さい。 SET WINDOW -20,20,-20,20 DRAW GRID(2,2) PLOT LINES: -10,-10 ;10,-10;10,10;-10,10;-10,-10 DRAW CIRCLE WITH SCALE (2) LET X=-10 LET Y=-10 LET T=0 LET V=4.53574748 LET A=56.654968 LET VX=COS(A) LET VY=SIN(A) 100 PLOT LINES:X,Y ; IF VX>0 THEN LET LX=20-(10+X) END IF IF VX<0 THEN LET LX=20-(10-X) END IF IF VY>0 THEN LET LY=20-(10+Y) END IF IF VY<0 THEN LET LY=20-(10-Y) END IF LET T=MIN(LX/ABS(VX),LY/ABS(VY)) LET X=VX*T+X LET Y=VY*T+Y IF T=LX/ABS(VX) THEN LET VX=-VX END IF IF T=LY/ABS(VY) THEN LET VY=-VY END IF GOTO 100 END

  • ボタンが押されたときの反応 Basic

    Active Basicでゲームプログラムを書いています。 ボタンを押したときの反応で、上下左右に画像を動かしたいのですが、 ボタンを押すと、いったん静止してから、連打処理(?)のように動きます。 やりたいことは、ボタンを押すとすぐに上下左右に一定間隔で画像を動かすことです。 Sub MainWnd_KeyDown(KeyCode As Long, flags As Long) If KeyCode=37 Then If x<=3 Then Exit Sub End If MyBmpInfo=2 x=x-5 Else If KeyCode=38 Then If y<=0 Then Exit Sub End If MyBmpInfo=1 y=y-5 Else If KeyCode=39 Then If x>=600 Then Exit Sub End If MyBmpInfo=3 x=x+5 Else If KeyCode=40 Then If y>=400 Then Exit Sub End If y=y+5 End If InvalidateRect(hMainWnd,ByVal 0,TRUE) End Sub と書きました。 すみませんが、どなたかご存知の方がいらっしゃいましたら、ご教授ください。 お願いします。

  • FORTRANのプログラミングについて

    たびたび申し訳ありません。 またFORTRANに関しての質問です。 x y z 0 0 30 1 0 45 2 0 60 3 0 43 4 0 51 5 0 32 0 1 43 1 1 90 2 1 32 3 1 85 4 1 65 5 1 90 0 2 32 1 2 32 と続くファイルがあります。これをFORTRANをで書き換えて、 0 0 30 0 1 43 0 2 32 1 0 45 1 1 90 1 2 32 と続くデータにしたいのです。(これを以下目的のファイルという) 今のところ、次のようなプログラムを書き、特定のXに対しては、結果を吐き出すことに成功しています。 program dat real x1(100),h,y2(100),y1(100),z1(100) integer i,n,j,k,l,m,a(100) open(7,file='test.txt') open(9,file='af-test.dat') do i=1,100 read(7,*,end=200) x1(i),y1(i),z1(i) if(x1(i).eq.90)then write(9,*) x1(i),y1(i),z1(i) end if end do 200 close(7) close(9) end ここまではうまくいくのですが、これでは90以外の場合は出力されません。(あたりまえですが) 特定のXに限らずに例えばXを0から100まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • プログラミングの問題です

    このプログラムは何をするものか詳しく説明しなさい。 100 FOR x=1 TO 100 110 FOR y=x TO 100 120 LET a=x 130 LET b=y 140 DO 150 LET r=MOD(a,b) 160 IF r=0 THEN EXIT DO 170 LET a=b 180 LET b=r 190 LOOP 200 IF b=1 THEN 210 LET z=SQR(x^2+y^2) 220 IF INT(z)=z THEN PRINT x,y,z 230 END IF 240 NEXT y 250 NEXT x プログラムに関して初心者で、120~230(ほとんどですが…)の部分で何をしようとしているのかが分かりません。何か参考になるHPや考え方だけでも教えていただけないでしょうか。

  • マクロ_シート内容の比べについて

    下記のソースで実行したら、 MyStr1(1) = "CCC" ' の行まで 実行できて、それから "実行時エラー'9'" "インデックスが有効範囲にありません。" というエラーが出ています。 何かいけないか、わからないから、ここで質問をさせて頂きます。 ※環境はExcel2003です。 ------------------------------------------- Sub Macro1() ' M = 3 N = 2 Sheets("Old").Select Sheets("Old").Copy Before:=Sheets(1) Sheets("Old (2)").Select Sheets("Old (2)").Name = "TTT" Dim MyStr1() As String Dim K As Long ReDim MyStr1(K) MyStr1(0) = "AAA" & Chr(10) & "BBB" MyStr1(1) = "CCC" ' <----------------------------------エラーとなった行 MyStr1(2) = "DDD" MyStr1(3) = "EEE" MyStr1(4) = "FFF" MyStr1(5) = "JJJ" MyStr1(6) = "KKK" For K = 0 To 7 'セル1の判断ループ X = 1 Y = 1 M = 3 N = N + 1 For Y = 1 To 100 For X = 1 To 300 If Sheets("Old").Cells(X, Y) = MyStr1(1) Then For M = 3 To 300 X = X + 1 If Sheets("Old").Cells(X, Y) <> Sheets("New").Cells(X, Y) Then Sheets("TTT").Cells(X, Y).Select With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With Selection.Font.ColorIndex = 6 End If Next M End If Next X Next Y Next K End Sub ------------------------------------------------------ 素人なので、何か説明が足りなかったら、ご容赦してください。

  • 画像の90度回転表示の処理時間を短縮したい

    今、PictureBox に読み込んだ画像を90度回転して別の PictureBox に表示していますが、処理にとても時間がかかっています。(480×640ピクセルを右90度変換するのに約3.5秒) もっと処理が早くなる方法があれば教えてください。よろしくお願いします。 ---現在の処理(Picture1 → Picture2)--- Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long Dim p1sw  As Long  'Picture1.ScaleWidth Dim p1sh  As Long  'Picture1.ScaleHeight Dim x1    As Long Dim y1    As Long Dim c    As Long  'カラーコード Dim hDC1  As Long  'Picture1.hDC Dim hDC2  As Long  'Picture2.hDC Dim X    As Long Dim Y    As Long '縦横サイズを逆転する With Picture1   p1sw = .ScaleWidth   p1sh = .ScaleHeight   hDC1 = .hdc End With With Picture2   .Height = Picture1.Width   .Width = Picture1.Height   hDC2 = .hdc End With p1sw = p1sw - 1 p1sh = p1sh - 1 'ピクチャを90度回転 For X = 0 To p1sw         'Picture1のX座標   y1 = X   For Y = 0 To p1sh       'Picture1のY座標     x1 = p1sh - Y     c = GetPixel(hDC1, X, Y) 'カラー情報の取得     '取得したカラーを指定位置に設定する     If c <> -1 Then Call SetPixelV(hDC2, x1, y1, c)   Next Y Next X # OSはWindows95、VB6.0(SP5)を使用しています。

  • FORTRAN77のプログラミングについて教えてください。

    ・学校の課題で任意の数値の平均と、入力した数の個数を出力するプログラムを作 りなさいという課題が出たのですがうまくいきません。次にあげるプログラムの 中で修正する部分を教えてください。 *課題2 平均値 integer N real X,T1,M * 初期値 N=0 T1=0 * 累積 10 read(5,*,end=20) X N=N+1 T1=T1+X go to 10 * まとめ 20 if(N.GE.2) then M=T1/N write(6,*) '総数は' ,N, '平均は',M ELSE IF(N.EQ.1) THEN WRITE(6,*) '総数は',N, '平均は',T1 ELSE WRITE(6,*) '数値がない' END IF END IF END ・この問題は最初からよくわかりません。教えてください。  「3つの数a,b,cを読み込む。a,b,cを三角形の3辺の長さとしたとき三角形にな  るかを判定しなさい。三角形にならない場合はその面積をヘロンの公式を求め  て表示する。     s=(a+b+c)/2 , ss=s(s-a)(s-b)(s-c) として       S=sqrt(ss) とする。」 以上の二つです。分かる方お願いします。

  • マクロ シート内容の比べについて

    下記のソースで実行したら、 MyStr1(0) = "AAAAAA" & Chr(10) & "BBBBBB" ' の行で "実行時エラー'9'" "インデックスが有効範囲にありません。" というエラーが出ています。 調べても、わからないから、ここで質問をさせて頂きます。 最初に"Old""New""TEMP"3枚のシートが既存しています。 やりたいのは、"Old"シートと"New"シートの内容を検索して、異なる部分を探すことです。 ---------------------------------------------------------------- Sub Macro1() ' M = 3 N = 2 Sheets("Old").Select Sheets("Old").Copy Before:=Sheets(1) Sheets("Old (2)").Select Sheets("Old (2)").Name = "TTT" Dim MyStr1() As String Dim K As Long ReDim MyStr(K) MyStr1(0) = "AAAAAA" & Chr(10) & "BBBBBB" 'エラーになった行 MyStr1(1) = "CCCC" MyStr1(2) = "DDDDD" MyStr1(3) = "FFFFFFFFF" MyStr1(4) = "EEEEEEE" MyStr1(5) = "SSSSSSSSS" MyStr1(6) = "GGGGGGGGG" For K = 0 To 6 X = 1 Y = 1 M = 3 N = N + 1 For Y = 1 To 100 For X = 1 To 300 'セル1の判断ループ If Sheets("Old").Cells(X, Y) = MyStr1(K) Then For M = 3 To 300 X = X + 1 If Sheets("Old").Cells(X, Y) <> Sheets("New").Cells(X, Y) Then Sheets("TTT").Cells(X, Y).Select With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With Selection.Font.ColorIndex = 6 End If Next M End If Next X Next Y Next K End Sub ----------------------------------------------------------- 以上、宜しくお願いします。

このQ&Aのポイント
  • 化石の質量数14の炭素Cの残有量が現在の炭素Cの16分の1である場合、その化石の年代は約何万年前か?選択肢から最も近いものを選びなさい。
  • 質問文章は、化石の質量数14の炭素Cの残有量が現在の炭素Cの16分の1である場合、その化石の年代を推定する問題です。選択肢から最も近い年代を選びましょう。
  • 化石の質量数14の炭素Cの残有量が現在の炭素Cの16分の1である場合、その化石は約何万年前のものか?選択肢から最も近いものを選びましょう。
回答を見る