UFOゲームの制作 VB6
 (2) オブジェクトの初期化(配置) U 前へ 目次へ 次へ 

 2. 敵などの配置

 敵などを図2-2-1のように配置されるように座標を計算する(サブプロシージャInitGame)。


図 2-2-1

・プログラムリスト その1
 グローバル変数を追加する。

Option Explicit
'定数
Const MaxTeki = 47      '8列*6行-1=47
Const MaxTaihou = 2     '自機数3個(3-1=2)
Const MaxTama = 2       '自機弾数3個(3-1=2)
'グローバル変数
Dim TaihouNokori As Integer     '自機の数
Dim Dx As Integer, Dy As Integer    '#1 基準移動量
Dim BakuF(MaxTeki) As Integer       '#2 敵の爆破フラグ
Dim UFOf As Integer                 '#3 大型UFOの爆破フラグ

Private Sub Form_Load()
    'ウインドウサイズの設定(800×600)
    Form1.Height = 9000  'ウィンドウサイズ(高さ600*15)
    Form1.Width = 12000  'ウィンドウサイズ(幅800*15)

    Randomize       '乱数初期化
    Dx = 100        '基準移動量設定
    Dy = 100
    TaihouNokori = MaxTaihou    '自機残り数設定
    MakeObject                  'オブジェクト(部品)の作成
    InitGame                    'ゲームの初期化
    lblTokuten.Top = 120        '得点表示座標設定
    lblTokuten.Left = Form1.ScaleWidth - lblTokuten.Width - 60
End Sub

#1 グローバル変数DxDyには基準となる移動量を記憶させる。Dxは左から右へ移動するときはプラス、右から左へ移動するときはマイナスとすることで、左右に移動させることができる。基準移動量はForm_Loadプロシージャで100に設定する。

#2 敵に弾が当たったとき、爆破の画像に変更してから消さなければならない。この処理をする目印として配列BakuFを敵の個数分用意する。例えば、通常は-1、弾に当たると2、そして、2,1の間爆破の画像を表示し、0のとき消す、というように使う。

#3 グローバル変数UFOfも配列BakuFと同じ働きをさせる。大型UFO用である。

 

・プログラムリスト その2(プロシージャInitGame)

Private Sub InitGame()
'#1 敵の初期化
    Dim n As Integer
    '敵の配置
    imgTeki(0).Top = 480    '一つ目(0番目)を配置
    imgTeki(0).Left = 600
    BakuF(0) = -1           '爆破フラグ初期化
    For n = 0 To MaxTeki    '二つ目以降(MaxTeki個分)を作成・配置
        With imgTeki(n)         '敵配置
            .Top = imgTeki(0).Top + imgTeki(0).Height * 1.5 * Int(n / 8)  'y座標
            .Left = imgTeki(0).Left + imgTeki(0).Width * 1.5 * (n Mod 8)  'x座標
            .Picture = Image1(Int(n / 16)).Picture  '画像設定
            .Visible = True    '表示ON
        End With
        imgTama2(n).Visible = False '敵弾表示OFF
        BakuF(n) = -1               '爆破フラグ初期化
    Next n
    imgUFO.Visible = False      'UFO表示OFF
    UFOf = -1                   '爆破フラグ初期化

'#2 自機の初期化
    '自機配置
    imgTaihou.Left = Form1.ScaleWidth / 2
    imgTaihou.Top = Form1.ScaleHeight - imgTaihou.Height * 1.5
    '自機弾MaxTama個 表示OFF
    For n = 0 To MaxTama
        imgTama1(n).Visible = False     '自機弾表示OFF
    Next n
    '自機残り表示
    TaihouNokoriHyouji TaihouNokori

'#3 基準移動量 再設定
    Dx = Abs(Dx)
    Dy = Abs(Dy)
End Sub

Private Sub TaihouNokoriHyouji(x As Integer)
'自機残り表示
    Dim n As Integer

    If x = -1 Then
        Exit Sub
    End If
    For n = 0 To x - 1          '残り分を表示ON
        With imgTNokori(n)
            .Left = .Width * n * 1.5
            .Top = Form1.ScaleHeight - .Height
            .Visible = True     '表示ON
        End With
    Next n
    For n = x To MaxTaihou - 1  '使用済み分を表示OFF
        With imgTNokori(n)
            .Left = .Width * n * 1.5
            .Top = Form1.ScaleHeight - .Height
            .Visible = False    '表示OFF
        End With
    Next n
End Sub

#1 敵の初期化 フォームに配置済みの敵(配列0番目)の座標(Left, Top)を設定する。爆破画像用のフラグBakuF(0)は-1に設定する。1匹の敵が弾を1つずつ持つようにしており、敵0番目(imgTeki(0))の敵は弾0番目(imgTama2(0))を持つことにする。
 敵の1番(imgTeki(1))から敵のMaxTeki番までの座標などを設定する。
 Int(n/8)の計算結果は1行目(n=1〜7)のとき0、2行目(n=8〜15)のとき1、・・・のように何行目かを計算している。
 n Mod 8の計算結果は1列目(n=0,8,16,24,32,40)のとき0、2列目(n=1,9,17,25,33,41)のとき1、・・・のように何列目かを計算している。
 敵の画像の設定では、16個(2列)ずつ色が変わるように配列の添字をInt(n/16))で計算している。

#2 自機の初期化 自機をウィンドウ下部中央に配置し、自機弾を非表示に設定している。
 自機の残り数(画像)を表示する部分は自機がやられたときにも必要になるので、サブプロシージャTaihouNokoriHyoujiとして作成している。

#3 基準移動量の再設定 移動量Dxはマイナスになることもあるので、最初は必ず左から右へ移動するように絶対値を求めて設定している。Dyはマイナスになることはないが念のためである。

 

 ここで実行すると上図2-2-1のようなウィンドウが表示される。


 (2) オブジェクトの初期化(配置) U 前へ 目次へ 次へ 
Copyright © 2002 Hiroshi Masuda 

 

 

inserted by FC2 system