Microsoft Small Basic

Program Listing: XFH167
GraphicsWindow.BackgroundColor="Black"
GraphicsWindow.Height = 600
GraphicsWindow.Width = 800
GraphicsWindow.Show()

GraphicsWindow.KeyDown = ReadKey


'Information frame on left
GraphicsWindow.BrushColor = "Gainsboro"
GraphicsWindow.FillRectangle(0,0,200,600)
'text in Info Frame
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(48,1,"Adventurer's Name")
GraphicsWindow.DrawText(48,80,"Map Coordinates:")
GraphicsWindow.DrawText(5,220,"Forward = Up Arrow")
GraphicsWindow.DrawText(5,240,"Back = Down Arrow")
GraphicsWindow.DrawText(5,260,"Strafe left = Left Arrow")
GraphicsWindow.DrawText(5,280,"Strafe right = Right Arrow")
GraphicsWindow.DrawText(5,320,"Turn left/right = A / D")
GraphicsWindow.DrawText(5,340,"End program = Esc")

'draw box around Maze-View window on the right
GraphicsWindow.PenColor = "White"
GraphicsWindow.PenWidth = 4
GraphicsWindow.DrawRectangle(200,0,600,600)



'Setup object's coordinates
z1 = 100
z2 = 100
z3 = 100
z4 = 100
x1 = -10
y1 = 10
x2 = 10
y2 = -10


CameraAngle = 0
cameraX = 0
cameraY = 0
cameraZ1 = 0
cameraZ2 = 0


Main:

'erase walls from Maze-View window
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.PenWidth = 2
GraphicsWindow.FillRectangle(200,0,600,800)
GraphicsWindow.PenColor = "White"
'draw box around Maze-View window on the right
GraphicsWindow.PenColor = "White"
GraphicsWindow.PenWidth = 4
GraphicsWindow.DrawRectangle(200,0,600,600)

'GraphicsWindow.BrushColor = "White"
'GraphicsWindow.DrawText(0,15*(z-700),z)

'X
left_X = (600 * x1 / (z1 + cameraZ1) + 600 / 2) - cameraX
right_X = (600 * x2 / (z2 + cameraZ2) + 600 / 2) - cameraX

'end Y
topLeft_Y = (600 * y1 / (z1 + cameraZ1) + 600 / 2) - cameraY
topRight_Y = (600 * y1 / (z2 + cameraZ2) + 600 / 2) - cameraY
bottomRight_Y = (600 * y2 / (z2 + cameraZ1) + 600 / 2) - cameraY
bottomLeft_Y = (600 * y2 / (z1 + cameraZ1) + 600 / 2) - cameraY

'camera angle
x1tmp = left_X * Math.Cos(CameraAngle) - z1 * Math.Sin(CameraAngle)
left_X = x1tmp
z1tmp = z1 * Math.Cos(CameraAngle) - x1 * Math.Sin(CameraAngle)
z1 = z1tmp

x2tmp = right_X * Math.Cos(CameraAngle) - z2 * Math.Sin(CameraAngle)
right_X = x2tmp
z2tmp = z2 * Math.Cos(CameraAngle) - x2 * Math.Sin(CameraAngle)
z2 = z2tmp

GraphicsWindow.PenWidth = 2
GraphicsWindow.DrawLine(left_X + 200, topLeft_Y, right_X + 200, topRight_Y)


GraphicsWindow.DrawLine(right_X + 200, topRight_Y, right_X + 200, bottomRight_Y)

GraphicsWindow.DrawLine(right_X + 200, bottomRight_Y, left_X + 200, bottomLeft_Y)
GraphicsWindow.DrawLine(left_X + 200, bottomLeft_Y, left_X + 200, topLeft_Y)

TextWindow.WriteLine("")
TextWindow.Write("Z1: ")
TextWindow.WriteLine(z1)
TextWindow.Write("Z2: ")
TextWindow.WriteLine(z2)
TextWindow.Write("Camera Z1: ")
TextWindow.WriteLine(cameraZ1)
TextWindow.Write("Camera Z2: ")
TextWindow.WriteLine(cameraZ1)
TextWindow.Write("B1 L1 X1: ")
TextWindow.WriteLine(left_X)
TextWindow.Write("B1 L1 X2: ")
TextWindow.WriteLine(right_X)
TextWindow.Write("B1 L1 Y1: ")
TextWindow.WriteLine(topLeft_Y)
TextWindow.Write("B1 L1 Y2: ")
TextWindow.WriteLine(topRight_Y)
TextWindow.Write("Camera X - ")
TextWindow.WriteLine(cameraX)
TextWindow.Write("Camera Y - ")
TextWindow.WriteLine(cameraY)
TextWindow.Write("Camera Angle - ")
TextWindow.WriteLine(CameraAngle)
TextWindow.WriteLine(key)
TextWindow.WriteLine("**********")



keyisupdated = "False"
key = ""
While (keyisupdated = "False")
EndWhile

If key = "Up" Then 'move forward
cameraZ1 = cameraZ1 - 10
cameraZ2 = cameraZ2 - 10
'If cameraZ1 > 0 Then
' cameraZ1 = 0
'EndIf
'If cameraZ2 > 0 Then
' cameraZ2 = 0
'EndIf

ElseIf key = "Down" Then 'move backward
cameraZ1 = cameraZ1 + 10
cameraZ2 = cameraZ2 + 10
ElseIf key = "Left" Then 'strafe left
cameraX = cameraX - 5
ElseIf key = "Right" Then 'strafe right
cameraX = cameraX + 5
ElseIf key = "A" Then 'turn left
CameraAngle = CameraAngle + .005
ElseIf key = "D" Then 'turn right
CameraAngle = CameraAngle - .005
EndIf

If key = "Escape" Then
Program.End()
EndIf

Goto Main

Sub ReadKey
key = GraphicsWindow.LastKey
keyisupdated = "True"
EndSub