2016-08-14 7 views
-2

私はvb.netで基本的なスネークゲームを作っており、ヘビがそれ自身に戻ることを阻止しようとしています。私は初心者ですが、コードがこれにどのようなものかはっきりしていませんか?Vb.netはスネークを後ろに回してグリッドに従います

また、ヘビがグリッドをたどるようにコードを変更するにはどうすればよいのですか?ヘビがパワーアップを収集する瞬間に、電源投入時にインラインにしたいときにパワーアップボックスの半分を通過することがある。ここで

はコードです:

Public Class Form3 

#Region "Snake Declarations" 
    Dim snake(1000) As PictureBox 
    Dim length_of_snake As Integer = -1 
    Dim left_right_mover As Integer = 0 
    Dim up_down_mover As Integer = 0 
    Dim lastKey As Integer 

    Dim r As New Random 
    Private Sub create_head() 

     length_of_snake += 1 

     snake(length_of_snake) = New PictureBox 
     With snake(length_of_snake) 
      .Height = 10 
      .Width = 10 
      .BackColor = Color.Blue 
      .Top = (Gridfield.Top + Gridfield.Bottom)/2 
      .Left = (Gridfield.Left + Gridfield.Right)/2 
     End With 
     Me.Controls.Add(snake(length_of_snake)) 
     snake(length_of_snake).BringToFront() 

     lengthensnake() 
     lengthensnake() 

    End Sub 

    Private Sub lengthensnake() 
     length_of_snake += 1 
     snake(length_of_snake) = New PictureBox 
     With snake(length_of_snake) 
      .Height = 10 
      .Width = 10 
      .BackColor = Color.Blue 
      .Top = snake(length_of_snake - 1).Top 
      .Left = snake(length_of_snake - 1).Left + 10 
     End With 
     Me.Controls.Add(snake(length_of_snake)) 
     snake(length_of_snake).BringToFront() 
    End Sub 
    Private Sub Form3_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 
     Tm_snakemover.Start() 
     Select Case e.KeyChar 
      Case "a" 
       left_right_mover = -10 
       up_down_mover = 0 
      Case "d" 
       left_right_mover = 10 
       up_down_mover = 0 
      Case "w" 
       up_down_mover = -10 
       left_right_mover = 0 
      Case "s" 
       up_down_mover = 10 
       left_right_mover = 0 
     End Select 
    End Sub 
    Private Sub Tm_snakemover_Tick(sender As System.Object, e As System.EventArgs) Handles Tm_snakemover.Tick 

     For i = length_of_snake To 1 Step -1 
      snake(i).Top = snake(i - 1).Top 
      snake(i).Left = snake(i - 1).Left 
     Next 

     snake(0).Top += up_down_mover 
     snake(0).Left += left_right_mover 

     wall_collision() 
     powerup_collision() 
     selfcollision() 
    End Sub 
#End Region 

#Region "Collisions" 
    Private Sub wall_collision() 
     If snake(0).Left < Gridfield.Left Then 
      Tm_snakemover.Stop() 
      MsgBox("You have lost!") 
     End If 

     If snake(0).Right > Gridfield.Right Then 
      Tm_snakemover.Stop() 
      MsgBox("You have lost!") 
     End If 

     If snake(0).Bottom > Gridfield.Bottom Then 
      Tm_snakemover.Stop() 
      MsgBox("You have lost!") 
     End If 

     If snake(0).Top < Gridfield.Top Then 
      Tm_snakemover.Stop() 
      MsgBox("You have lost!") 
     End If 


    End Sub 

    'This sub checks the collision between the player and the powerup 
    Private Sub powerup_collision() 
     If snake(0).Bounds.IntersectsWith(powerup.Bounds) Then 
      lengthensnake() 
      powerup.Top = r.Next(Gridfield.Top, Gridfield.Bottom - 10) 
      powerup.Left = r.Next(Gridfield.Left, Gridfield.Right - 10) 
     End If 
    End Sub 

    'This sub checks to see if the snake will collide with itself 
    Private Sub selfcollision() 
     For i = 1 To length_of_snake 
      If snake(0).Bounds.IntersectsWith(snake(i).Bounds) Then 
       Tm_snakemover.Stop() 
       MsgBox("Haha, You have lost because you ran into yourself!") 
      End If 
     Next 
    End Sub 

#End Region 

#Region "powerup" 
    Dim powerup As PictureBox 
    Private Sub create_powerup() 
     powerup = New PictureBox 
     With powerup 
      .Width = 10 
      .Height = 10 
      .BackColor = Color.Red 
      .Top = r.Next(Gridfield.Top, Gridfield.Bottom - 10) 
      .Left = r.Next(Gridfield.Left, Gridfield.Right - 10) 
     End With 
     Me.Controls.Add(powerup) 
     powerup.BringToFront() 
    End Sub 
#End Region 


    Private Sub Form3_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
     create_head() 
     create_powerup() 
     ' Tm_snakemover.Start() 
    End Sub 


End Class 

答えて

0

あなたはこの

Select Case e.KeyChar 
      Case "a" 
       If(left_right_mover <> 10) then 
        left_right_mover = -10 
        up_down_mover = 0 
       End If 
      Case "d" 
       If(left_right_mover <> -10) then 
        left_right_mover = 10 
        up_down_mover = 0 
       End If 
      Case "w" 
       If(up_down_mover <> 10) then 
        up_down_mover = -10 
        left_right_mover = 0 
       End If 
      Case "s" 
       If(up_down_mover <> -10) then 
        up_down_mover = 10 
        left_right_mover = 0 
       End If 
     End Select 
を試すことができます
関連する問題