home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD9669962000.psc / SnakeEngineNoSnd.bas < prev    next >
Encoding:
BASIC Source File  |  2000-08-24  |  10.7 KB  |  344 lines

  1. Attribute VB_Name = "SnakeEngine"
  2. Public Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
  3.  
  4. Public Const ArenaRow = 80              'Arena Rows
  5. Public Const ArenaCol = 60              'Arena Collumns
  6. Public Const MaxSnakeLength = 1000      'Maximum Length for Snake
  7. Public Const Arena_None = 0
  8. Public Const Arena_Wall = 1
  9. Public Const Arena_Snake1 = 2
  10. Public Const Arena_Snake2 = 3
  11. Public Const Arena_Number = 4
  12.  
  13. Public Const Color_None = 9
  14. Public Const Color_Wall = 4
  15. Public Const Color_Snake1 = 14
  16. Public Const Color_Snake2 = 13
  17. Public Const Color_Number = 15
  18.  
  19. Public StartInterval As Integer
  20. Public GameSpeed As Integer
  21. Public PlayerNum As Integer
  22. Public BoxHeight As Integer
  23. Public BoxWidth As Integer
  24. Public CurLevel As Integer
  25. Public CurNumber As Integer
  26. Public InitialLive As Integer
  27. Public InitialLevel As Integer
  28. Public ScoreBeforeLive As Integer
  29. Public NumberOnScreen As Boolean
  30. 'Public CurMidiNo As Integer
  31. 'Public DeadWav As String
  32. 'Public PointWav As String
  33. 'Public LevelWav As String
  34.  
  35. Type SnakeChar                          'TYPE for Snake, including Position, Direction and etc
  36.     HeadX As Integer
  37.     HeadY As Integer
  38.     DirX As Integer
  39.     DirY As Integer
  40.     CurLength As Integer
  41.     Length As Integer
  42.     Alive As Boolean
  43.     Lives As Integer
  44.     Score As Long
  45.     BodyX(1 To MaxSnakeLength) As Integer
  46.     BodyY(1 To MaxSnakeLength) As Integer
  47.     PlayerColor As Integer
  48.     PlayerName As String
  49. End Type
  50.  
  51. Public Snake(1 To 2) As SnakeChar
  52. Public Arena(1 To 80, 1 To 60) As Integer
  53.  
  54. Sub InitGame()
  55. 'Objective: Set Lives, Scores, and other variables
  56. For i = 1 To SnakeEngine.PlayerNum
  57.     Snake(i).Lives = InitialLive
  58.     Snake(i).Score = 0
  59.     Snake(i).Alive = True
  60. Next i
  61. SnakeFrm.StartScreen.Visible = False
  62. SnakeFrm.Timer2.Interval = 0
  63. SnakeFrm.Pause_Game.Enabled = True
  64. MsgClose
  65. InitArena
  66. SetLevel InitialLevel
  67. End Sub
  68.  
  69. Sub SetArena(Row, Col, Mode)
  70. 'Objective: Initiate & Draw a mode on the Arena Box
  71. 'Input    : * Row
  72. '           * Col
  73. '           * Mode - 0) None
  74. '                    1) Wall
  75. '                    2) Snake 1 Body
  76. '                    3) Snake 2 Body
  77. 'Output   : None
  78.  
  79. Arena(Row, Col) = Mode
  80.  
  81. '--Drawing Method--
  82. Select Case Mode
  83.     Case Arena_Wall: AssignedColor = Color_Wall
  84.     Case Arena_Snake1: AssignedColor = Color_Snake1
  85.     Case Arena_Snake2: AssignedColor = Color_Snake2
  86.     Case Arena_Number: AssignedColor = Color_Number
  87.     Case Else: AssignedColor = Color_None
  88. End Select
  89. If AssignedColor = Color_Number Then
  90.     SnakeFrm.Number.Caption = CurNumber
  91.     SnakeFrm.Number.Top = (Col - 1) * BoxHeight - 50
  92.     SnakeFrm.Number.Left = (Row - 1) * BoxWidth + 10
  93. Else
  94.     If SnakeFrm.WireFrame.Checked Then
  95.         SnakeFrm.PlayScreen.Line ((Row - 1) * BoxWidth, (Col - 1) * BoxHeight)-(Row * BoxWidth - 15, Col * BoxHeight - 15), QBColor(AssignedColor), B
  96.     Else
  97.         SnakeFrm.PlayScreen.Line ((Row - 1) * BoxWidth, (Col - 1) * BoxHeight)-(Row * BoxWidth - 15, Col * BoxHeight - 15), QBColor(AssignedColor), BF
  98.     End If
  99. End If
  100. '--End Drawing Method--
  101. Exit Sub
  102. End Sub
  103.  
  104. Sub InitArena()
  105. 'Objective: * To initiate arena background and borders
  106. '           * Initiate any other variable
  107. 'Input    : None
  108. 'Output   : None
  109.  
  110. SnakeFrm.WireFrame.Enabled = False
  111. '--Draw Background--
  112. For Col = 1 To ArenaCol
  113.     For Row = 1 To ArenaRow
  114.         SetArena Row, Col, Arena_None
  115.     Next Row
  116. Next Col
  117. '==Draw Background==
  118.  
  119. '--Draw Border--
  120. For Col = 1 To ArenaCol
  121.     SetArena 1, Col, 1
  122.     SetArena ArenaRow, Col, Arena_Wall
  123. Next Col
  124.  
  125. For Row = 1 To ArenaRow
  126.     SetArena Row, 1, 1
  127.     SetArena Row, ArenaCol, Arena_Wall
  128. Next Row
  129. '==Draw Border==
  130. For i = 1 To PlayerNum
  131.     For SnakeLen = 1 To Snake(1).CurLength
  132.         Snake(i).BodyX(SnakeLen) = 0
  133.         Snake(i).BodyY(SnakeLen) = 0
  134.     Next SnakeLen
  135. Next i
  136. NumberOnScreen = False
  137. End Sub
  138.  
  139. Sub SetLevel(Level)
  140.     CurLevel = Level
  141.     Snake(1).Length = 2     'Initialize Snake for level start
  142.     Snake(1).CurLength = 1
  143.     If Snake(1).Lives < 0 Then Snake(1).Alive = False Else Snake(1).Alive = True
  144.     Snake(2).Length = 2
  145.     Snake(2).CurLength = 1
  146.     If Snake(2).Lives < 0 Then Snake(2).Alive = False Else Snake(2).Alive = True
  147.     If Snake(1).Alive Then
  148.         SnakeFrm.StatusBar.Panels.Item(1).Text = Str$(SnakeEngine.Snake(1).Lives) + " Lives"
  149.     Else
  150.         SnakeFrm.StatusBar.Panels.Item(1).Text = ""
  151.     End If
  152.     If Snake(2).Alive Then
  153.         SnakeFrm.StatusBar.Panels.Item(2).Text = Str$(SnakeEngine.Snake(2).Lives) + " Lives"
  154.     Else
  155.         SnakeFrm.StatusBar.Panels.Item(2).Text = ""
  156.     End If
  157.     If Not (Snake(1).Alive And Snake(2).Alive) Then GameOver: Exit Sub
  158.     Snake(1).DirX = 0: Snake(2).DirX = 0: Snake(1).DirY = 0: Snake(2).DirY = 0
  159.     
  160.     Pause
  161.     MsgDraw "Level " + LTrim$(Str$(Level)), "Press F3 to Continue", "Press F2 to start a new game"
  162.     
  163.     Select Case Level
  164.     Case 1
  165.         Snake(1).HeadX = 30: Snake(2).HeadX = 50
  166.         Snake(1).HeadY = 30: Snake(2).HeadY = 30
  167.         Snake(1).DirX = -1: Snake(2).DirX = 1
  168.     Case 2
  169.         For i = 20 To 60
  170.             SetArena i, 30, Arena_Wall
  171.         Next i
  172.         Snake(1).HeadX = 30: Snake(2).HeadX = 50
  173.         Snake(1).HeadY = 40: Snake(2).HeadY = 20
  174.         Snake(1).DirX = -1: Snake(2).DirX = 1
  175.     Case 3
  176.         For i = 10 To 50
  177.             SetArena 20, i, Arena_Wall
  178.             SetArena 60, i, Arena_Wall
  179.         Next i
  180.         Snake(1).HeadX = 25: Snake(2).HeadX = 55
  181.         Snake(1).HeadY = 30: Snake(2).HeadY = 30
  182.         Snake(1).DirY = -1: Snake(2).DirY = 1
  183.     Case 4
  184.         For i = 1 To 30
  185.             SetArena 20, i, Arena_Wall
  186.             SetArena 60, 60 - i, Arena_Wall
  187.         Next i
  188.         For i = 1 To 40
  189.             SetArena i, 40, Arena_Wall
  190.             SetArena 80 - i, 20, Arena_Wall
  191.         Next i
  192.         Snake(1).HeadY = 10: Snake(2).HeadY = 50
  193.         Snake(1).HeadX = 60: Snake(2).HeadX = 20
  194.         Snake(1).DirX = -1: Snake(2).DirX = 1
  195.    
  196.     Case 5
  197.         For i = 13 To 47
  198.             SetArena 20, i, Arena_Wall
  199.             SetArena 60, i, Arena_Wall
  200.         Next i
  201.         For i = 23 To 57
  202.             SetArena i, 10, Arena_Wall
  203.             SetArena i, 50, Arena_Wall
  204.         Next i
  205.         Snake(1).HeadY = 25: Snake(2).HeadY = 25
  206.         Snake(1).HeadX = 50: Snake(2).HeadX = 30
  207.         Snake(1).DirY = -1: Snake(2).DirY = 1
  208.  
  209.     Case 6
  210.         For i = 2 To 59
  211.             If i < 22 Or i > 38 Then
  212.                 SetArena 10, i, Arena_Wall
  213.                 SetArena 20, i, Arena_Wall
  214.                 SetArena 30, i, Arena_Wall
  215.                 SetArena 40, i, Arena_Wall
  216.                 SetArena 50, i, Arena_Wall
  217.                 SetArena 60, i, Arena_Wall
  218.                 SetArena 70, i, Arena_Wall
  219.             End If
  220.         Next i
  221.         Snake(1).HeadY = 10: Snake(2).HeadY = 50
  222.         Snake(1).HeadX = 65: Snake(2).HeadX = 15
  223.         Snake(1).DirY = 1: Snake(2).DirY = -1
  224.    
  225.     Case 7
  226.         For i = 3 To 47
  227.             SetArena i + 2, i + 5, Arena_Wall
  228.             SetArena i + 30, i + 5, Arena_Wall
  229.         Next i
  230.         Snake(1).HeadY = 40: Snake(2).HeadY = 20
  231.         Snake(1).HeadX = 75: Snake(2).HeadX = 5
  232.         Snake(1).DirY = -1: Snake(2).DirY = 1
  233.       
  234.     Case 8
  235.         For i = 2 To 58 Step 2
  236.             SetArena 40, i, Arena_Wall
  237.         Next i
  238.         Snake(1).HeadY = 10: Snake(2).HeadY = 50
  239.         Snake(1).HeadX = 65: Snake(2).HeadX = 15
  240.         Snake(1).DirY = 1: Snake(2).DirY = -1
  241.  
  242.     Case 9
  243.         For i = 1 To 45
  244.             SetArena 10, i, Arena_Wall
  245.             SetArena 20, 60 - i, Arena_Wall
  246.             SetArena 30, i, Arena_Wall
  247.             SetArena 40, 60 - i, Arena_Wall
  248.             SetArena 50, i, Arena_Wall
  249.             SetArena 60, 60 - i, Arena_Wall
  250.             SetArena 70, i, Arena_Wall
  251.         Next i
  252.         Snake(1).HeadY = 7: Snake(2).HeadY = 53
  253.         Snake(1).HeadX = 65: Snake(2).HeadX = 15
  254.         Snake(1).DirY = 1: Snake(2).DirY = -1
  255.  
  256.     Case Else
  257.         For i = 2 To 59 Step 2
  258.             SetArena 10, i, Arena_Wall
  259.             SetArena 20, i + 1, Arena_Wall
  260.             SetArena 30, i, Arena_Wall
  261.             SetArena 40, i + 1, Arena_Wall
  262.             SetArena 50, i, Arena_Wall
  263.             SetArena 60, i + 1, Arena_Wall
  264.             SetArena 70, i, Arena_Wall
  265.         Next i
  266.         Snake(1).HeadY = 7: Snake(2).HeadY = 53
  267.         Snake(1).HeadX = 65: Snake(2).HeadX = 15
  268.         Snake(1).DirY = 1: Snake(2).DirY = -1
  269.  
  270.     End Select
  271.     
  272.     If Snake(1).Alive Then SnakeAddBody Snake(1), Snake(1).HeadX, Snake(1).HeadY, Arena_Snake1
  273.     If PlayerNum > 1 And Snake(2).Alive Then SnakeAddBody Snake(2), Snake(2).HeadX, Snake(2).HeadY, Arena_Snake2
  274. End Sub
  275. Sub SnakeAddBody(Snakes As SnakeChar, Row, Col, ColorMode)
  276.     For i = Snakes.CurLength To 1 Step -1
  277.         Snakes.BodyX(i + 1) = Snakes.BodyX(i)
  278.         Snakes.BodyY(i + 1) = Snakes.BodyY(i)
  279.     Next i
  280.     Snakes.BodyX(1) = Row
  281.     Snakes.BodyY(1) = Col
  282.     Snakes.HeadX = Row
  283.     Snakes.HeadY = Col
  284.     SetArena Row, Col, ColorMode
  285.     
  286.     If Snakes.CurLength < Snakes.Length Then
  287.         Snakes.CurLength = Snakes.CurLength + 1
  288.         Exit Sub
  289.     End If
  290.     
  291.     If Snakes.CurLength = Snakes.Length Then
  292.         If Snakes.BodyX(Snakes.CurLength + 1) <> 0 And Snakes.BodyY(Snakes.CurLength + 1) <> 0 Then
  293.             SetArena Snakes.BodyX(Snakes.CurLength + 1), Snakes.BodyY(Snakes.CurLength + 1), Arena_None
  294.             Snakes.BodyX(Snakes.CurLength + 1) = 0
  295.             Snakes.BodyY(Snakes.CurLength + 1) = 0
  296.         End If
  297.     End If
  298. End Sub
  299.  
  300. Sub SnakeDead(PlayerNum)
  301. SnakeFrm.Timer1.Interval = 0
  302. Snake(PlayerNum).Alive = False
  303. Snake(PlayerNum).Lives = Snake(PlayerNum).Lives - 1
  304. RestartLevel
  305. End Sub
  306. Sub FinishLevel()
  307. If Snake(1).Alive Then Snake(1).Score = Snake(1).Score + (CurLevel * 100)
  308. If Snake(2).Alive Then Snake(2).Score = Snake(2).Score + (CurLevel * 100)
  309. InitArena
  310. SetLevel CurLevel + 1
  311. CurNumber = 0
  312. End Sub
  313. Sub RestartLevel()
  314. InitArena
  315. SetLevel CurLevel
  316. CurNumber = 0
  317. End Sub
  318. Sub Pause()
  319. If SnakeFrm.Pause_Game.Checked Then
  320.     SnakeFrm.Pause_Game.Checked = False
  321.     MsgClose
  322.     SnakeFrm.Timer1.Interval = GameSpeed
  323. Else
  324.     SnakeFrm.Timer1.Interval = 0
  325.     SnakeFrm.Pause_Game.Checked = True
  326. End If
  327. End Sub
  328. Sub GameOver()
  329.     SnakeFrm.Timer1.Interval = 0
  330.     Pause
  331.     MsgDraw "Game Over", "Press F3 to Continue", "Press F2 to Start a new game"
  332.     SnakeFrm.Pause_Game.Enabled = False
  333.     SnakeFrm.WireFrame.Enabled = True
  334. End Sub
  335. Sub MsgDraw(Message$, F3Message$, F2Message$)
  336. SnakeFrm.PauseScreen.Visible = True
  337. SnakeFrm.PauseCaption = Message$
  338. SnakeFrm.PressF2Label.Caption = F2Message$
  339. SnakeFrm.PressF3Label.Caption = F3Message$
  340. End Sub
  341. Sub MsgClose()
  342. SnakeFrm.PauseScreen.Visible = False
  343. End Sub
  344.