Introduction

UFO_X is an arcade game that has 2D graphics and mainly black and white graphics. The game is made from Engineering Equations, mathematics, trigonometric calculations and equations.

Unzip the Drive_K.zip to a new directory called C:\UFO .

There are 4 files to be unzipped to the directory C:\UFO .

The program has x and y axis calculations and are 2D drawings and the arcade game is able to be used with Engineering and Computer Works controllers and keyboards of computer systems.There are 4 axis movements with diagonal movement of the spacecraft.

The bullets and lasers are from Engineering and Mathematical calculations and includes trigonometric calculations.

Building the Sample

Built on Visual Studio 2015 and Visual Basic 6 and is able to be run and installed on Windows 8.1 Professional and Windows 7 Home Edition and its versions.

Description

UFO_X is a program indicating auto firing and automatic targetting of lasers and bullets and movement of an object in a screen controlled by Engineering and Computer Works controllers or the keyboard arrow keys.  

 

Visual Basic
Edit|Remove
Dim x2pos(200), xxpos(801), x1pos(801), ypos(200), Xx(0.1), Yy(0.1Dim XS(100), YS(100), pace(100As Integer, computerscore As Integer, outcome As Integer 
 Dim sndpath As String, sndname As String 
Dim xpos2 As Integer, ufoline As Integer, xpo3 As Integer, xflag As Integer, playscore As Integer 
 
'Dim x2pos(200), xxpos(801), x1pos(801), ypos(200) 
'Dim XS(100), YS(100), pace(100) As Integer, computerscore As Integer, outcome As Integer 
'Option Explicit 
 
'Private explosion As CExplosion 
'Private trail As CTrail 
'Private bExplode As Boolean 
 
Dim cx As Double 
Dim cy As Double 
Dim OldCX As Double 
Dim OldCY As Double 
Dim x() As Integer 
Dim y() As Integer 
Dim BulletsLoose As Integer 
Dim da As Double 
Dim db As Double 
Dim Direction As Double 
Dim Speed As Integer 
Dim Pie As Double 
Dim Forward As Boolean 
Dim TurnLeft As Boolean 
Dim TurnRight As Boolean 
Dim Firing1 As Boolean 
Dim Firing As Boolean 
Dim ReallyFiring As Boolean 
Dim RefreshWin As Boolean 
Dim Radian As Double 
Dim Shields As Boolean 
Dim Projectile(100As BulletData 
Dim BaseStart As Double 
Dim BaseEnd As Double 
Private Type BulletData 
    Active As Boolean 
    DistanceMoved As Integer 
    BulletX As Integer 
    BulletY As Integer 
    BulletDirection As Integer 
End Type 
Private Declare Function GetActiveWindow Lib "user32" () As Integer 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long'Halt the system for specified Time 
Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" (ByVal lpszSoundName As StringByVal uFlags As LongAs Long 
 '   Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias _ 
'      "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As _ 
  '    Long) As Long 
   Const SND_SYNC = &H0 
   Const SND_ASYNC = &H1 
   Const SND_NODEFAULT = &H2 
   Const SND_LOOP = &H8 
   Const SND_NOSTOP = &H10 
 
Sub DrawShip() 
Picture1.ForeColor = RGB(255255255) 
x(1) = (cx + (Sin(Direction)) * 300) 
y(1) = (cy + (Cos(Direction)) * 700) 
x(2) = (cx + (Sin(Direction + Degrees(140))) * 300) 
y(2) = (cy + (Cos(Direction + Degrees(140))) * 300) 
x(3) = (cx + (Sin(Direction + Degrees(220))) * 300) 
y(3) = (cy + (Cos(Direction + Degrees(220))) * 300) 
x(4) = (cx + (Sin(Direction)) * 300) 
y(4) = (cy + (Cos(Direction)) * 700) 
x(5) = (cx + (Sin(Direction + Degrees(140))) * 300) 
y(5) = (cy + (Cos(Direction + Degrees(140))) * 300) 
x(6) = (cx + (Sin(Direction + Degrees(220))) * 300) 
y(6) = (cy + (Cos(Direction + Degrees(220))) * 300) 
Picture1.FillColor = RGB(255255255) 
 Picture1.Circle (10001000), 100 
 Picture1.Circle (13001700), 300 
'ClearShip 
Picture1.Line (x(1), y(1))-(x(5), y(5)) 
Picture1.Line (x(5), y(5))-(x(14), y(14)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
'Thrusters 
x(4) = (cx + (Sin(Direction + Degrees(210))) * 320) 
y(4) = (cy + (Cos(Direction + Degrees(210))) * 320) 
x(5) = (cx + (Sin(Direction + Degrees(150))) * 320) 
y(5) = (cy + (Cos(Direction + Degrees(150))) * 320) 
 
x(6) = (cx + (Sin(Direction + Degrees(200))) * 330) 
y(6) = (cy + (Cos(Direction + Degrees(200))) * 330) 
x(7) = (cx + (Sin(Direction + Degrees(160))) * 330) 
y(7) = (cy + (Cos(Direction + Degrees(160))) * 330) 
 
x(8) = (cx + (Sin(Direction + Degrees(190))) * 340) 
y(8) = (cy + (Cos(Direction + Degrees(190))) * 340) 
x(9) = (cx + (Sin(Direction + Degrees(170))) * 340) 
y(9) = (cy + (Cos(Direction + Degrees(170))) * 340) 
 
x(10) = (cx + (Sin(Direction + Degrees(179))) * 350) 
y(10) = (cy + (Cos(Direction + Degrees(179))) * 350) 
x(11) = (cx + (Sin(Direction + Degrees(181))) * 350) 
y(11) = (cy + (Cos(Direction + Degrees(181))) * 350) 
x(12) = x(2) 
y(12) = y(2) 
x(13) = (cx + (Sin(Direction + Degrees(40))) * 230) 
y(13) = (cy + (Cos(Direction + Degrees(40))) * 230) 
x(14) = (cx + (Sin(Direction + Degrees(120))) * 160) 
y(14) = (cy + (Cos(Direction + Degrees(120))) * 160) 
x(15) = x(3) 
y(15) = y(3) 
x(16) = (cx + (Sin(Direction + Degrees(320))) * 230) 
y(16) = (cy + (Cos(Direction + Degrees(320))) * 230) 
x(17) = (cx + (Sin(Direction + Degrees(240))) * 160) 
y(17) = (cy + (Cos(Direction + Degrees(240))) * 160) 
 
 
'Sheilds 
 
If Shields = False Then Picture1.Circle (cx, cy), 2 
'ClearShip 
Picture1.Line (x(1), y(1))-(x(5), y(5)) 
Picture1.Line (x(5), y(5))-(x(14), y(14)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
 
Picture1.Line (x(1), y(1))-(x(5), y(5)) 
Picture1.Line (x(5), y(5))-(x(14), y(14)) 
Picture1.Line (x(16), y(16))-(x(17), y(17)) 
Picture1.Line (x(17), y(17))-(x(17), y(17)) 
For Direction = 50 To 130 
If 360 - UnDegrees(Direction) > 50 Then 
    BaseStart = Direction + Degrees(50Else 
    BaseStart = Direction + Degrees(50) - Degrees(360End If 
 
If 360 - UnDegrees(Direction) > 130 Then 
    BaseEnd = Direction + Degrees(360Else 
    BaseEnd = Direction + Degrees(360) - Degrees(130End If 
 
Picture1.Circle (cx, cy), 200 ', , cx, cy 'BaseStart, BaseEnd 
 
Picture1.Line (x(1), y(1))-(x(5), y(5)) 
Picture1.Line (x(5), y(5))-(x(14), y(14)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
 
Picture1.Line (x(12), y(12))-(x(13), y(13)) 
Picture1.Line (x(13), y(13))-(x(14), y(14)) 
Picture1.Line (x(15), y(15))-(x(16), y(16)) 
Picture1.Line (x(16), y(16))-(x(17), y(17)) 
 
If Forward = True Then 
Picture1.Line (x(1), y(1))-(x(5), y(5)) 
Picture1.Line (x(5), y(5))-(x(14), y(14)) 
Picture1.Line (x(14), y(14))-(x(17), y(17)) 
    Picture1.Line (x(4), y(4))-(x(5), y(5)) 
    Picture1.Line (x(6), y(6))-(x(7), y(7)) 
    Picture1.Line (x(8), y(8))-(x(9), y(9)) 
    Picture1.Line (x(10), y(10))-(x(11), y(11)) 
 
End If 
Next 
OldCX = cx 
OldCY = cy 
'ClearShip1 
'ClearShip 
End Sub 
Sub ClearShip() 
Picture1.ForeColor = RGB(000) 
 
Picture1.Line (x(1), y(1))-(x(14), y(14)) 
Picture1.Line (x(17), y(17))-(x(1), y(1)) 
Picture1.Line (x(4), y(4))-(x(5), y(5)) 
Picture1.Line (x(6), y(6))-(x(7), y(7)) 
Picture1.Line (x(8), y(8))-(x(9), y(9)) 
Picture1.Line (x(10), y(10))-(x(11), y(11)) 
Picture1.Line (x(12), y(12))-(x(13), y(13)) 
Picture1.Line (x(13), y(13))-(x(14), y(14)) 
Picture1.Line (x(15), y(15))-(x(16), y(16)) 
Picture1.Line (x(16), y(16))-(x(17), y(17)) 
'Picture1.Circle (OldCX, OldCY), 3000, , BaseStart, BaseEnd 
'Picture1.Circle (OldCX, OldCY), 4000 
End Sub 
 
Sub Form_Load() 
Dim Xx(1Dim Yy(1) 
Startup = True 
 
If Timer2.Interval = 1 Then 
Form1.B 
 
Else 
 
End If 
 
'Timer1.Enabled = False 
'Degrees (45) 
 Pie = 3.14159265358979 
Radian = (2 * Pie) / 360 
Direction = Degrees(180) 
Timer1.Interval = 10 
Speed = 1 
ReDim x(18ReDim y(18) 
ReallyFiring = True 
Firing = True 
Shields = False 
DrawShip 
'Form1.Show 
vbKeyPressRight = True 
 l = 45.1 
 For ufos = 1 To 15 
'MsgBox ("Hello") 
  
  
        ' Load ufo1(ufos) 
        ' Unload ufo1(16) 
 Next ufos 
playscore = 0 
computerscore = 0 
speeddown = 45 
speedleft = 50 
launch = 0 
'ufo1(0).Top = sky.Top - ufo1(0).Height 
'ufo1(0).Visible = True 
'ufobomb.Top = ufo5.Top 
ymove = 35 
xmove = 25 
xflag = 0 
'player.Top = sky.Height - 2500 
'bomb.Top = player.Top 
ufoline = 1 
'Call loadufos 
'Call Activate 
'Timer3.Enabled = True 
'End Sub 
Shields = True 
DrawShip1 
Firing1 = True 
ReallyFiring = True 
 
If Firing1 = True And ReallyFiring = True And Shields = False Then 
Dim TempBullet As Integer 
'First Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(13) 
Projectile(TempBullet).BulletY = y(13) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = 180 
'Second Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(16) 
Projectile(TempBullet).BulletY = y(16) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = 180 
End If 
'Form1.Show 
End Sub 
Sub DrawShip1() 
Picture1.ForeColor = RGB(255255255) 
x(1) = (cx1 + (Sin(Direction)) * 1500) 
y(1) = (cy1 + (Cos(Direction)) * 1500) 
x(4) = (cx1 + (Cos(Direction)) * 1500) 
y(4) = (cy1 + (Sin(Direction)) * 1300) 
x(2) = (cx1 + (Sin(Direction + Degrees(140))) * 1300) 
y(2) = (cy1 + (Cos(Direction + Degrees(140))) * 1300) 
x(3) = (cx1 + (Sin(Direction + Degrees(220))) * 1300) 
y(3) = (cy1 + (Cos(Direction + Degrees(220))) * 1300'Thrusters 
x(4) = (cx1 + (Sin(Direction + Degrees(210))) * 2320) 
y(4) = (cy1 + (Cos(Direction + Degrees(210))) * 2320) 
x(5) = (cx1 + (Sin(Direction + Degrees(150))) * 2320) 
y(5) = (cy1 + (Cos(Direction + Degrees(150))) * 2320) 
 
x(6) = (cx1 + (Sin(Direction + Degrees(200))) * 2330) 
y(6) = (cy1 + (Cos(Direction + Degrees(200))) * 2330) 
x(7) = (cx1 + (Sin(Direction + Degrees(160))) * 2330) 
y(7) = (cy1 + (Cos(Direction + Degrees(160))) * 2330) 
 
x(8) = (cx1 + (Sin(Direction + Degrees(190))) * 2340) 
y(8) = (cy1 + (Cos(Direction + Degrees(190))) * 2340) 
x(9) = (cx1 + (Sin(Direction + Degrees(170))) * 2340) 
y(9) = (cy1 + (Cos(Direction + Degrees(170))) * 2340) 
 
x(4) = (cx1 + (Sin(Direction + Degrees(210))) * 2320) 
y(4) = (cy1 + (Cos(Direction + Degrees(210))) * 2320) 
x(5) = (cx1 + (Sin(Direction + Degrees(150))) * 2320) 
y(5) = (cy1 + (Cos(Direction + Degrees(150))) * 2320) 
 
x(6) = (cx1 + (Sin(Direction + Degrees(200))) * 2330) 
y(6) = (cy1 + (Cos(Direction + Degrees(200))) * 2330) 
x(7) = (cx1 + (Sin(Direction + Degrees(160))) * 2330) 
y(7) = (cy1 + (Cos(Direction + Degrees(160))) * 2330) 
 
x(8) = (cx1 + (Sin(Direction + Degrees(190))) * 2340) 
y(8) = (cy1 + (Cos(Direction + Degrees(190))) * 2340) 
x(9) = (cx1 + (Sin(Direction + Degrees(170))) * 2340) 
y(9) = (cy1 + (Cos(Direction + Degrees(170))) * 2340) 
 
x(10) = (cx1 + (Sin(Direction + Degrees(179))) * 2350) 
y(10) = (cy1 + (Cos(Direction + Degrees(179))) * 2350) 
x(11) = (cx1 + (Sin(Direction + Degrees(181))) * 2350) 
y(11) = (cy1 + (Cos(Direction + Degrees(181))) * 2350) 
x(12) = x(2) 
y(12) = y(2) 
x(13) = (cx1 + (Sin(Direction + Degrees(40))) * 2230) 
y(13) = (cy1 + (Cos(Direction + Degrees(40))) * 2230) 
x(14) = (cx1 + (Sin(Direction + Degrees(120))) * 2160) 
y(14) = (cy1 + (Cos(Direction + Degrees(120))) * 2160) 
x(15) = x(3) 
y(15) = y(3) 
x(16) = (cx1 + (Sin(Direction + Degrees(320))) * 2230) 
y(16) = (cy1 + (Cos(Direction + Degrees(320))) * 2230) 
x(17) = (cx1 + (Sin(Direction + Degrees(240))) * 2160) 
y(17) = (cy1 + (Cos(Direction + Degrees(240))) * 2160) 
 
'Sheilds 
 
If Shields = False Then ufo6.Circle (cx, cy), 200 
If Shields = False Then ufo6.Circle (cx1, cy1), 300 
ClearShip 
ufo6.Line (x(1), y(1))-(x(5), y(5)) 
ufo6.Line (x(5), y(5))-(x(14), y(14)) 
ufo6.Line (x(14), y(14))-(x(17), y(17)) 
ufo6.Line (x(1), y(1))-(x(5), y(5)) 
ufo6.Line (x(5), y(5))-(x(14), y(14)) 
ufo6.Line (x(14), y(14))-(x(17), y(17)) 
ufo6.Line (x(12), y(12))-(x(13), y(13)) 
ufo6.Line (x(13), y(13))-(x(14), y(14)) 
ufo6.Line (x(15), y(15))-(x(16), y(16)) 
ufo6.Line (x(16), y(16))-(x(17), y(17)) 
 
If 180 - UnDegrees(Direction) > 50 Then 
    BaseStart = Direction + Degrees(50Else 
    BaseStart = Direction + Degrees(50) - Degrees(180End If 
 
If 180 - UnDegrees(Direction) > 130 Then 
    BaseEnd = Direction + Degrees(130Else 
    BaseEnd = Direction + Degrees(130) - Degrees(180End If 
 
ufo6.Circle (cx, cy), 200 ', , BaseStart, BaseEnd 
 
ufo6.Line (x(1), y(1))-(x(5), y(5)) 
ufo6.Line (x(5), y(5))-(x(14), y(14)) 
ufo6.Line (x(14), y(14))-(x(17), y(17)) 
ufo6.Line (x(12), y(12))-(x(13), y(13)) 
ufo6.Line (x(13), y(13))-(x(14), y(14)) 
ufo6.Line (x(15), y(15))-(x(16), y(16)) 
ufo6.Line (x(16), y(16))-(x(17), y(17)) 
 
If Forward = True Then 
ufo6.Line (x(1), y(1))-(x(5), y(5)) 
ufo6.Line (x(5), y(5))-(x(14), y(14)) 
ufo6.Line (x(14), y(14))-(x(17), y(17)) 
    ufo6.Line (x(4), y(4))-(x(5), y(5)) 
    ufo6.Line (x(6), y(6))-(x(7), y(7)) 
    ufo6.Line (x(8), y(8))-(x(9), y(9)) 
    ufo6.Line (x(10), y(10))-(x(11), y(11)) 
 
End If 
 
'OldCX = cx 
'OldCY = cy 
'ClearShip1 
'ClearShip 
 
End Sub 
Sub ClearShip1() 
Picture1.ForeColor = RGB(000) 
 
Picture1.Line (x(1), y(1))-(x(14), y(14)) 
Picture1.Line (x(17), y(17))-(x(1), y(1)) 
Picture1.Line (x(4), y(4))-(x(5), y(5)) 
Picture1.Line (x(6), y(6))-(x(7), y(7)) 
Picture1.Line (x(8), y(8))-(x(9), y(9)) 
Picture1.Line (x(10), y(10))-(x(11), y(11)) 
Picture1.Line (x(12), y(12))-(x(13), y(13)) 
Picture1.Line (x(13), y(13))-(x(14), y(14)) 
Picture1.Line (x(15), y(15))-(x(16), y(16)) 
Picture1.Line (x(16), y(16))-(x(17), y(17)) 
'Picture1.Circle (OldCX, OldCY), 3000, , BaseStart, BaseEnd 
Picture1.Circle (OldCX, OldCY), 300 '4000 
End Sub 
 
''Private Sub Form_Load() 
'Startup = True 
'Pie = 3.14159265358979 
'Radians = (2 * Pie) / 360 
'Direction = Degrees(180) 
'Speed = 1 
'ReDim X(20) 
'ReDim Y(20) 
'ReallyFiring = True 
'End Sub 
Private Sub Form_Resize() 
Dim x2pos(200), xxpos(801), x1pos(801), ypos(200', Xx(0.1), Yy(0.1) 
 
'Form_Resize1.Show 
Dim Xx As Integer 
Dim Yy As Double 
'Xx = 1 
 
Picture1.Width = Form1.Width 
Picture1.Height = Form1.Height 
cx = Picture1.Width / 2 
cy = Picture1.Height 
cx1 = Picture1.Width / 4000 
cy1 = Picture1.Height / 4000 
DrawShip 
Picture1.Circle (cx, cy), 3 
Do Until 1 = 2 
If GetActiveWindow <> Form1.hWnd Then 
RefreshWin = False 
End If 
If RefreshWin = False Then 
   If GetActiveWindow = Form1.hWnd Then 
        RefreshWin = False 
        DoEvents 
        Picture1.Refresh 
        Picture1.SetFocus 
      DoEvents 
    End If 
End If 
'Form1.Cls 
cx = cx + da 
'cx = cx - db 
CheckWrap 
ClearShip 
DrawShip 
'DrawShip1 
Picture1.Circle (cx, cy), 3 
cx1 = cx1 + da 
cy1 = cy1 - db 
Form1.Cls 
CheckWrap 
DrawShip 
'ClearShip1 
If TurnLeft = True Then 
Picture1.Circle (cx, cy), 3 
'ClearShip1 
ClearShip 
Direction = Direction ' + Degrees(5) 
End If 
If TurnRight = True Then 
'ClearShip1 
 
'ClearShip 
Direction = Direction ' - Degrees(5) 
End If 
 
If Direction = Degrees(0Then Direction = Degrees(0If Direction < Degrees(0Then Direction = Degrees(0) 
 
If TurnLeft = True Then 
da = da - Speed 
db = db + Speed 
ClearShip 
End If 
 
If Forward = True Then 
da = da + Speed '((Sin(Direction)) + Speed) 
db = db - Speed '((Cos(Direction)) - Speed) 
ClearShip 
End If 
If Firing1 = True And ReallyFiring = True And Shields = False Then 
Dim TempBullet As Integer 
'First Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(13) 
Projectile(TempBullet).BulletY = y(13) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
DrawShip 
If Projectile(TempBullet).BulletDirection = Direction Then 
ClearShip 
'Sleep (100) 
End 
End If 
 
'Second Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(16) 
Projectile(TempBullet).BulletY = y(16) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
 
 
 
 
ReallyFiring = True 
Firing1 = True 
End If 
'Form_Resize1 
 
If BulletsLoose > 0 Then UpdateBullets 
DoEvents 
Sleep (10Loop 
End Sub 
Sub Form_Resize1() 
Picture1.Width = Form1.Width 
Picture1.Height = Form1.Height 
cx = Picture1.Width / 2 
cy = Picture1.Height 
cx1 = Picture1.Width / 4 
cy1 = Picture1.Height / 4 
DrawShip 
Do Until 1 = 2 
If GetActiveWindow <> Form1.hWnd Then 
RefreshWin = True 
End If 
If RefreshWin = True Then 
    If GetActiveWindow = Form1.hWnd Then 
        RefreshWin = False 
        DoEvents 
        Picture1.Refresh 
        Picture1.SetFocus 
        DoEvents 
    End If 
End If 
cx = cx + da 
cx = cx - db 
CheckWrap 
ClearShip 
DrawShip 
cx1 = cx1 + da 
cy1 = cy1 + db 
'DrawShip1 
If TurnLeft = True Then 
Direction = Direction + Degrees(180End If 
If TurnRight = True Then 
Direction = Direction - Degrees(180End If 
 
If Direction = Degrees(0Then Direction = Degrees(0If Direction < Degrees(0Then Direction = Degrees(0) 
 
If TurnLeft = True Then 
da = da - Speed 
db = db + Speed 
ClearShip1 
End If 
 
If Forward = True Then 
da = da + Speed '((Sin(Direction)) + Speed) 
db = db - Speed '((Cos(Direction)) - Speed) 
ClearShip1 
End If 
If Firing1 = True And ReallyFiring = True And Shields = False Then 
Dim TempBullet As Integer 
'First Bullet 
Direction = Direction + Degrees(90) 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(13) 
Projectile(TempBullet).BulletY = y(13) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
'Second Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(16) 
Projectile(TempBullet).BulletY = y(16) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
 
ReallyFiring = False 
End If 
If BulletsLoose > 0 Then UpdateBullets 
DoEvents 
Sleep (10Loop 
End Sub 
 
 
Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer'Dim Xx As Double 
'Dim Yy As Double 
 
'If KeyCode = vbKeyLeft Then 
 
Dim l As Double 
Dim Yy As Double 
Dim Xx As Double 
 
If KeyCode = vbKeyLeft Then 
  ' bomb.Left = X 
 ' bomb.Top = 250 ' player.Top + 250 
   'bomb.Visible = True 
   Dim MyValue As Integer 
Randomize   ' Initialize random-number generator. 
MyValue = CInt(Int((16 * Rnd()) + 1)) ' Generate random value between 1 and 6. 
 
  If MyValue = 6 Then 
 
bomb.Visible = True 
  'outcome = outcome + 1 
  Label2.Caption = Label2.Caption + 1 
  ElseIf bomb.Visible = False Then 
  Label2.Caption = Label2.Caption + 0 
  End If 
  If Label2.Caption = 1000 Then 
    
End If 
If RefreshWin = False Then 
   If GetActiveWindow = Form1.hWnd Then 
        RefreshWin = False 
        DoEvents 
        Picture1.Refresh 
        Picture1.Refresh 
        Picture1.Refresh 
        Picture1.SetFocus 
      DoEvents 
    End If 
End If 
ClearShip 
DrawShip 
Form1explode_Load 
'Degrees (46.6) '(Number * Radians) 
 
'l = l + 0.1 
'Next l 
   ' a = "K:\VB CD\multimedia_games\AstroRocks\AstroRocks\Audio\Fire1.wav" 
   ' Form1.Show 
   ' Result = sndPlaySound(a, SND_NODEFAULT) 
  '      a = "K:\VB CD\multimedia_games\AstroRocks\AstroRocks\Audio\Hit.wav" 
    'Form1.Show 
   ' Result = sndPlaySound(a, SND_NODEFAULT) 
    'a = "K:\VB CD\multimedia_games\TestDrive\caridle.wav" 
     '   Result = sndPlaySound(a, SND_NODEFAULT) 
    ' Degrees (i) 
TurnLeft = True 
'Form1.Cls 
Timer1.Interval = 5 
Shields = True 
DrawShip1 
ElseIf KeyCode = vbKeyRight Then 
 
 
Timer1.Interval = 3 
   ' a = "C:\Fire1.wav" 
    'Form1.Show 
  '  Result = sndPlaySound(a, SND_NODEFAULT) 
     '   a = "K:\VB CD\multimedia_games\AstroRocks\AstroRocks\Audio\Hit.wav" 
    'Form1.Show 
   ' Result = sndPlaySound(a, SND_NODEFAULT) 
    '   a = "K:\VB CD\multimedia_games\TestDrive\caridle.wav" 
     '   Result = sndPlaySound(a, SND_NODEFAULT) 
    ' Degrees (46) 
TurnRight = True 
'Form1.Cls 
Shields = True 
DrawShip1 
ElseIf KeyCode = vbKeyUp Then 
cy = cy + 10 
Timer1.Interval = 2 
Shields = True 
DrawShip1 
'n = 3 
Forward = True 
'Picture1.Circle (cx, cy), 3 
'Degrees (46.9) 
  ' a = "C:\A\Fire1.wav" 
    'Form1.Show 
   ' Result = sndPlaySound(a, SND_NODEFAULT) 
  Timer1.Interval = 10 
TurnRight = True 
'Forward = True 
'Form1.Cls 
Shields = True 
DrawShip1 
ElseIf KeyCode = vbKeyA Then 
If cy = 12000 Then 
cy = cy / 2 
 
End If 
Timer1.Interval = 4 
    a = "C:\A\laser.wav" 
    'Form1.Show 
    Result = sndPlaySound(a, SND_NODEFAULT) 
'Forward = True 
'Form1.Cls 
Shields = True 
DrawShip1 
ElseIf KeyCode = vbKeySpace Then 
 
DrawShip1 
''  If bomb.Visible = True Then 
''  outcome = outcome + 1 
''  If outcome >= 3 Then 
''  frmExplode.Show 
''  End If 
'Dim MyValue As Integer 
'Randomize   ' Initialize random-number generator. 
'MyValue = CInt(Int((6 * Rnd()) + 1)) ' Generate random value between 1 and 6. 
 
 ' If MyValue = 3 Then 
 
If bomb.Visible = True Then 
  outcome = outcome + 1 
  Label2.Caption = Label2.Caption + 1 
  ElseIf bomb.Visible = False Then 
  Label2.Caption = Label2.Caption + 0 
  End If 
  If Label2.Caption = 1000 Then 
   
   
   
 ' If outcome >= 3 Then 
  frmExplode.Show 
  End If 
 ' End If 
   
'ReallyFiring = True 
'Firing = True 
'Form1.Cls 
'FindFreeBullet 
ElseIf KeyCode = vbKeyDown Then 
cy = cy - 10 
Timer1.Interval = 2 
Shields = True 
DrawShip1 
ElseIf KeyCode = vbKeyEscape Then 
Dim RetVal 
RetVal = Shell("K:\VB CD\multimedia_games\EngineeringComputerWorks\Mouse.EXE"4) 
 
 
End 
End If 
End Sub 
 
 
Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As IntegerIf KeyCode = vbKeyLeft Then 
TurnLeft = False 
Form1.Cls 
DrawShip1 
bomb.Visible = False 
ElseIf KeyCode = vbKeyRight Then 
TurnRight = False 
Form1.Cls 
DrawShip1 
bomb.Visible = False 
ElseIf KeyCode = vbKeyUp Then 
If cy = 12000 Then 
cy = cy / 2 
 
End If 
Forward = False 
Form1.Cls 
DrawShip1 
bomb.Visible = False 
ElseIf KeyCode = vbKeySpace Then 
DrawShip1 
bomb.Visible = False 
'ReallyFiring = True 
'Firing = False 
'Form1.Cls 
'FindFreeBullet 
ElseIf KeyCode = vbKeyDown Then 
Shields = False 
bomb.Visible = False 
End If 
End Sub 
 
Sub CheckWrap() 
If cy > Picture1.Height Then 
cy = 0 
End If 
If cy < 0 Then 
cy = Picture1.Height 
End If 
If cx > Picture1.Width Then 
cx = 0 
End If 
If cx < 0 Then 
cx = Picture1.Width 
End If 
End Sub 
Function Degrees(Number As DoubleAs Double 
'Timer3.Enabled = True 
'Timer3.Enabled = True 
'Degrees (46) 
'If KeyCode = vbKeyRight Then 
'Dim l As Double 
 
'For l = 45.1 To 45.9 
 
 '(Number * Radians) 
 Timer1.Enabled = True 
If Timer1.Interval = 10 Then 
 
Degrees = (45.8ElseIf Timer1.Interval = 5 Then 
Degrees = (45.5ElseIf Timer1.Interval = 3 Then 
Degrees = (45.1ElseIf Timer1.Interval = 4 Then 
Degrees = (45.2ElseIf Timer1.Interval = 2 Then 
Degrees = (45.7End If 
'End If 
'l = l + 0.1 
'Next l 
'End If 
End Function 
Function UnDegrees(Number As DoubleAs Double 
UnDegrees = (45'(Number / Radians) 
End Function 
Private Sub quit() 
ep = MsgBox("Do you really want to quit?", vbYesNo, "You are a quiter aren't you?"If ep = vbYes Then 
End 
Else 
'Form1b.Show 
'End Sub 
End If 
End Sub 
Sub UpdateBullets() 
Dim i As Integer 
'quit 
'sky.Enabled 
'sky.Show 
'Form1b.Show 
'Form1.Cls 
For i = 1 To UBound(Projectile) 
If Projectile(i).Active = True Then 
If Projectile(i).BulletX > Picture1.Width Or Projectile(i).BulletX < 0 Or Projectile(i).BulletY > Picture1.Height Or Projectile(i).BulletY < 0 And Projectile(i).Active = True Then 
Picture1.ForeColor = RGB(000) 
Picture1.Line (Projectile(i).BulletX, Projectile(i).BulletY)-(Projectile(i).BulletX + 5, Projectile(i).BulletY + 5), , BF 
Projectile(i).Active = False 
BulletsLoose = BulletsLoose - 1 
Debug.Print BulletsLoose 
End If 
Picture1.ForeColor = RGB(000) 
Picture1.Line (Projectile(i).BulletX, Projectile(i).BulletY)-(Projectile(i).BulletX + 5, Projectile(i).BulletY + 5), , BF 
Projectile(i).BulletX = Projectile(i).BulletX + ((Sin(Projectile(i).BulletDirection)) * 200) 
Projectile(i).BulletY = Projectile(i).BulletY + ((Cos(Projectile(i).BulletDirection)) * 200) 
Picture1.ForeColor = RGB(255255255) 
Picture1.Line (Projectile(i).BulletX, Projectile(i).BulletY)-(Projectile(i).BulletX + 5, Projectile(i).BulletY + 5), , BF 
End If 
Next i 
End Sub 
Function FindFreeBullet() As Integer 
For i = 1 To UBound(Projectile) 
If Projectile(i).Active = False Then 
FindFreeBullet = i 
Exit Function 
End If 
Next i 
End Function 
Public Sub Activate() 
Rem creates star layout numbers 
Randomize 
For i = 1 To 100 
  XS(i) = Int(sky.ScaleWidth * Rnd) 
  YS(i) = Int(sky.ScaleHeight * Rnd) 
  pace(i) = 50 
Next i 
End Sub 
 
Private Sub Timer1_Timer() 
 
 
i = 46 
KeyCode = vbKeyRight 
DrawShip1 
Firing1 = False 
ReallyFiring = False 
Shields = False 
 
 
If Firing1 = False And ReallyFiring = False And Shields = False Then 
Dim TempBullet As Integer 
'First Bullet 
Direction = Direction + Degrees(90) 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
'Label1.Caption = Label1.Caption + 1 
Projectile(TempBullet).BulletX = x(13) 
Projectile(TempBullet).BulletY = y(13) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
'Second Bullet 
TempBullet = FindFreeBullet 
BulletsLoose = BulletsLoose + 1 
Projectile(TempBullet).BulletX = x(16) 
Projectile(TempBullet).BulletY = y(16) 
Projectile(TempBullet).Active = True 
Projectile(TempBullet).BulletDirection = Direction 
 
'x(5) = (cx + (Sin(Direction + Degrees(150))) * 320) 
'Picture1.Line (x(1), y(1))-(x(5), y(5)) 
 
'If ufo6.Left > ufo6.Left And ufo6.Left < (ufo6.Left + ufo6.Width) And ufo6.Top > ufo6.Top And ufo6.Top < (ufo6.Top + ufo6.Height) And (ufo6.Top = Direction) Then      'picks up if bullet hits target 
  '  If ufo6.CurrentX = x(16) And ufo6.CurrentY = y(16) Then 
  'Label2.Caption = Picture1.CurrentX 
   ' Label3.Caption = Picture1.CurrentY 
    'Label4.Caption = X(13) 
    'Label5.Caption = Y(13) 
     
If Picture1.CurrentX = (Picture1.CurrentX) And Picture1.CurrentY = (Picture1.CurrentY) And Projectile(TempBullet).BulletX = x(13And Projectile(TempBullet).BulletY = y(13Then   'Picture1.Circle < (Picture1.Circle + Picture1.Width) Then 
 
 
   
    Picture1.Visible = True 
     
    Label1.Caption = Label1.Caption - 1 
    If Label1.Caption = 0 Then 
    Dim RetVal 
RetVal = Shell("K:\VB CD\multimedia_games\EngineeringComputerWorks\Mouse.EXE"1) 
    End 
    End If 
   DrawShip1 
   ClearShip1 
   End If 
'End If 
 
ReallyFiring = True 
End If 
 
 
  If bomb.Visible = True Then 
  'outcome = outcome + 1 
  Label2.Caption = Label2.Caption + 1 
  ElseIf bomb.Visible = False Then 
  Label2.Caption = Label2.Caption + 0 
  End If 
  If Label2.Caption = 1000 Then 
   
   
   
 ' If outcome >= 3 Then 
  frmExplode.Show 
  End If 
If BulletsLoose > 0 Then UpdateBullets 
DoEvents 
Sleep (10'End If 
 
End Sub 
 
Private Sub Timer2_Timer() 
For z = 1 To speeddown 
   If ufoline = 1 Then 
       ufoline = ufoline + 1 
      ' For t = 1 To 5 
       '  If ufo1(t).Top >= sky.Height Then 
        '    ufo1(t).Top = (sky.Top - ufo1(0).Height) 
        ' End If 
        ' ufo1(t).Top = ufo1(t).Top + ymove 
       'Next t 
   Else 
        If ufoline = 2 Then 
           ufoline = ufoline + 1 
            'For t = 6 To 10 
                'If ufo1(t).Top >= sky.Height Then 
                 '  ufo1(t).Top = (sky.Top - ufo1(0).Height) 
                'End If 
                'ufo1(t).Top = ufo1(t).Top + ymove 
            'Next t 
         
         Else 
             If ufoline = 3 Then 
                   ufoline = 1 
                    'For t = 11 To 15 
                     '   If ufo1(t).Top >= sky.Height Then 
                      '     ufo1(t).Top = (sky.Top - ufo1(0).Height) 
                       ' End If 
                        'ufo1(t).Top = ufo1(t).Top + ymove 
                    'Next t 
             End If 
        End If 
      
  End If 
   Rem moves blue ufos left and right on screen 
   
  If ufo5.Left <= sky.Left - ufo5.Width Then 
       ufo5.Visible = False 
       ufo5.Left = (sky.Left + sky.Width) 
       xflag = 1 
       ufo6.Visible = True 
       ufo6.Left = sky.Left - ufo6.Width 
       
End If 
 
       If ufo6.Left >= sky.Width Then 
             ufo6.Visible = False 
             ufo6.Left = ufo6.Left - ufo6.Width 
             xflag = 0 
             ufo5.Visible = True 
       End If 
 
       If xflag = 0 Then 
             ufo5.Left = ufo5.Left - xmove 
             Else 
             ufo6.Left = ufo6.Left + xmove 
       End If 
   Rem move player bomb 
  bomb.Top = bomb.Top - 50 
 Rem: test has bomb hit blue ship ufo5 
If bomb.Visible = True Then 
    If bomb.Left >= ufo5.Left And bomb.Left <= ufo5.Left + ufo5.Width And bomb.Top >= ufo5.Top And bomb.Top <= ufo5.Top + ufo5.Height Then 
             explosion.Left = ufo5.Left 
             explosion.Top = ufo5.Top 
             explosion.Visible = True 
             ufo5.Visible = False 
             bomb.Visible = False 
             playscore = playscore + 1 
    End If 
 Rem: test has bomb hit blue ship ufo6 
    If bomb.Left >= ufo6.Left And bomb.Left <= ufo6.Left + ufo6.Width And bomb.Top >= ufo6.Top And bomb.Top <= ufo6.Top + ufo6.Height Then 
             explosion.Left = ufo6.Left 
             explosion.Top = ufo6.Top 
             explosion.Visible = True 
             ufo6.Visible = False 
             bomb.Visible = False 
             playscore = playscore + 1 
    End If 
 Rem test has bomb hit a red ufo 
   ' For i = 1 To 15 
    ' If bomb.Left >= ufo1(i).Left And bomb.Left <= ufo1(i).Left + ufo1(i).Width And bomb.Top >= ufo1(i).Top And bomb.Top <= ufo1(i).Top + ufo1(i).Height Then 
                    
              'ufo1(i).Visible = True 
              If Firing1 = True And ReallyFiring = True And Shields = False Then 
 
                  ' explosion.Left = ufo1(i).Left 
                 '  explosion.Top = ufo1(i).Top 
                   explosion.Visible = True 
                 '  ufo1(i).Visible = False 
                   bomb.Visible = False 
                   playscore = playscore + 1 
                  
              End If 
   '  End If 
   'Next i 
End If 
 Rem test if a red ufo has hit player ship 
'For i = 1 To 15 
    ' If player.Left >= ufo1(i).Left And player.Left <= ufo1(i).Left + ufo1(i).Width And player.Top >= ufo1(i).Top And player.Top <= ufo1(i).Top + ufo1(i).Height Then 
      If Firing1 = True And ReallyFiring = True And Shields = False Then 
              
          '    If ufo1(i).Visible = True And player.Visible = True Then 
              '     explosion.Left = ufo1(i).Left 
              '     explosion.Top = ufo1(i).Top 
                   explosion.Visible = True 
                '   ufo1(i).Visible = False 
                   computerscore = computerscore + 1 
             ' End If 
    End If 
' Next i 
       
  ' If ufo5.Left >= player.Left And ufo5.Left <= player.Left + player.Width And ufo5.Visible = True Then 
  '    launch = 1 
   '   ufobomb.Left = ufo5.Left + (ufo5.Width \ 2) 
  ' End If 
    
  ' If ufo6.Left >= player.Left And ufo6.Left <= player.Left + player.Width And ufo6.Visible = True Then 
  '    launch = 1 
  '    ufobomb.Left = ufo6.Left + (ufo6.Width \ 2) 
 '  End If 
    
   'If launch = 1 Then 
   ' ufobomb.Visible = True 
   ' ufobomb.Top = ufobomb.Top + 60 
   'End If 
    
  Rem check for game ending conditions end game if true 
''  'outcome = outcome + 1 
''  Label2.Caption = Label2.Caption + 1 
 '' If Label2.Caption = 1000 Then 
   
   
   
 ' If outcome >= 3 Then 
''  frmExplode.Show 
''  End If 
    If bomb.Visible = True Then 
  'outcome = outcome + 1 
  Label2.Caption = Label2.Caption + 1 
  ElseIf bomb.Visible = False Then 
  Label2.Caption = Label2.Caption + 0 
  End If 
  If Label2.Caption = 1000 Then 
   
   
   
 ' If outcome >= 3 Then 
  frmExplode.Show 
  End If 
 ' End If 
   
   
     If computerscore >= 3 Then 
        outcome = 2 
       ' player.Visible = False 
        'Form1.Show 
       ' Call endgame 
     End If 
     If playscore >= 10 Then 
        outcome = 1 
         
       ' Form1.Show 
      ' Call endgame 
        
     End If 
   '  Form1.Show 
 Next z 
  
' If ufobomb.Left >= player.Left And ufobomb.Left <= player.Left + player.Width And ufobomb.Top >= player.Top Then 
 '         outcome = 2 
' If player.Visible = False Then 
 '         ufobomb.Visible = False 
  '        Call endgame 
 'End If 
 Rem if ufobomb missed ship put it back at mother ship height on screen 
 'If ufobomb.Top + ufobomb.Height >= sky.Height Then 
  '  ufobomb.Top = ufo5.Top 
   ' launch = 0 
    'ufobomb.Visible = False 
 'End If 
End Sub 
'End Sub 
 
Public Sub Timer3_Timer() 
Rem creates moveing star field 
'Timer1.Enabled = False 
'Degrees (45) 
i = 45 
 DrawWidth = 10 
For i = 1 To 100 
If Point(XS(i), YS(i)) = RGB(3413934Or Point(XS(i), YS(i)) = &HFFFFFF Or Point(XS(i), YS(i)) = RGB(1783434Or Point(XS(i), YS(i)) = RGB(1608245Or Point(XS(i), YS(i)) = RGB(25500Or Point(XS(i), YS(i)) = RGB(02550Or Point(XS(i), YS(i)) = RGB(00255Then GoTo jumper2 
sky.PSet (XS(i), YS(i)), BackColor 
jumper2: 
YS(i) = YS(i) + pace(i) 
If YS(i) >= sky.Height Then YS(i) = 0: XS(i) = Int(sky.Width * Rnd) 
      sky.PSet (XS(i), YS(i)), RGB(255250250Next i 
'explosion.Visible = False 
End Sub 
 
 
Private Sub cmdClear_Click() 
    Picture1.Cls 
End Sub 
 
Private Sub cmdExit_Click() 
    Unload Me 
End Sub 
 
Private Sub Form1explode_Load() 
Form1.Cls 
End Sub 
 
Private Sub Form1explode_Resize1() 
    ' Keep everything looking good. 
    Dim h As Single 
    On Error Resume Next 
     
    h = ScaleHeight - cmdClear.Height 
     
    Picture1.Move 00, ScaleWidth, h 
    cmdClear.Move 0, h 
    cmdExit.Move 0 + cmdClear.Width, h 
End Sub 
 
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 
   ' If Not tmrMove.Enabled Then 
     
        ' Create a new trail... 
         
        ' Choose a color from a list. 
      ' ' Picture1.ForeColor = Choose(Int(Rnd * 5) + 1, vbRed, vbWhite, vbCyan, vbGreen, vbYellow) 
      ' ' Picture1.FillColor = Me.ForeColor 
         
      ' ' Set trail = New CTrail 
        ' Choose random direction from 255 to 344 
      ''  trail.Init X, Y, Radians(Int(Rnd * 90) + 225), Int(Rnd * 30) + 20, Picture1.hDC 
         
       ' tmrMove.Enabled = True ' Timer will handle drawing. 
   ' End If 
End Sub 
 
 
 
' Simple function to convert degrees to radians. 
Private Function Radians(sngDegrees As SingleAs Single 
    Radians = sngDegrees * pi / 180 
End Function 
 
Sub B() 
'Dim RetVal 
'RetVal = Shell("K:\VB CD\multimedia_games\EngineeringComputerWorks\Mouse.EXE", 4) 
 
Timer2.Interval = 100 
Do While RetVal > 0 
 
Timer2.Interval = Timer2.Interval - 1 
If Timer2.Interval = 0 Then 
GoTo a: 
End If 
Loop 
 
Timer2.Interval = 2 
'a: Form1.Form_Load 
a: Picture1.Visible = True 
'ElseIf KeyCode = vbKeyEscape Then 
'End 
'Else 
'Timer2.Interval = Timer2.Interval - 1 
 
'End If 
 
 
End Sub 

Source Code Files

More Information

For more information on UFOs_X, please contact chanjunthoong@theiet.org and chan_junt_hoong@ieee.org. Visit http://engineeeringcomputerworks.com for more details on UFOs_X and http://engineeringandcomputerworks.com for details on products and purchase.