2010-08-04 6 views
0

Je suis en train de faire un jeu "Snake" en VB2010. J'utilise des boîtes d'images pour créer le serpent. Le serpent se déplace bien et il ramasse les pommes bien. Mais quand je tourne le serpent vers la gauche ou vers le haut, il n'affiche que les 5 premiers segments du serpent. Lorsque le serpent se déplace vers la droite ou vers le bas, il affiche le serpent entier. Je suis complètement perplexe sur ce qui se passe.Vb2010 - jeu de serpent numéro

Voici mon code pour déplacer le serpent.

'Moving the Body Of the Snake 
      For i As Integer = (Length - 1) To 1 Step (-1) 
       Snake(i).X = Snake(i - 1).X 
       Snake(i).Y = Snake(i - 1).Y 
       SnakeBody(i).Location = New Point(Snake(i).X, Snake(i).Y) 
       Snake(i).Facing = Snake(i - 1).Facing 
      Next i 

      'Moves the Head of the Snake 
      'Moves Left 
      If Snake(0).Facing = 1 Then 
       Snake(0).X = Snake(0).X - 20 
       SnakeBody(0).Location = New Point(Snake(0).X, Snake(0).Y) 

       ' Moves Up 
      ElseIf Snake(0).Facing = 2 Then 
       Snake(0).Y = Snake(0).Y - 20 
       SnakeBody(0).Location = New Point(Snake(0).X, Snake(0).Y) 

       ' Moves Right 
      ElseIf Snake(0).Facing = 3 Then 
       Snake(0).X = Snake(0).X + 20 
       SnakeBody(0).Location = New Point(Snake(0).X, Snake(0).Y) 

       ' Moves Down 
      ElseIf Snake(0).Facing = 4 Then 
       Snake(0).Y = Snake(0).Y + 20 
       SnakeBody(0).Location = New Point(Snake(0).X, Snake(0).Y) 
      End If 
       Length += 1 

Voici également le code qui ajoute un segment au serpent lorsqu'il entre en contact avec la pomme.

'Checks to see if the head of the snake finds the food 


If Snake(0).X = Food.Left And Snake(0).Y = Food.Top Then 
     LoadSnakeBody() 

     'Placing the new body on its place 
     If Snake(Length - 1).Facing = 1 Then  'Looking left 
      Snake(Length).X = Snake(Length - 1).X - SnakeBody(0).Width 
      Snake(Length).Y = Snake(Length - 1).Y 
      SnakeBody(Length).Location = New Point(Snake(Length).X, Snake(Length).Y) 
      SnakeBody(Length).Visible = True 

     ElseIf Snake(Length - 1).Facing = 2 Then 'Looking up 
      Snake(Length).X = Snake(Length - 1).X 
      Snake(Length).Y = Snake(Length - 1).Y + SnakeBody(0).Height 
      SnakeBody(Length).Location = New Point(Snake(Length).X, Snake(Length).Y) 
      SnakeBody(Length).Visible = True 

     ElseIf Snake(Length - 1).Facing = 3 Then 'Looking right 
      Snake(Length).X = Snake(Length - 1).X - SnakeBody(0).Width 
      Snake(Length).Y = Snake(Length - 1).Y 
      SnakeBody(Length).Location = New Point(Snake(Length).X, Snake(Length).Y) 
      SnakeBody(Length).Visible = True 

     ElseIf Snake(Length - 1).Facing = 4 Then 'Looking down 
      Snake(Length).X = Snake(Length - 1).X 
      Snake(Length).Y = Snake(Length - 1).Y - SnakeBody(0).Height 
      SnakeBody(Length).Location = New Point(Snake(Length).X, Snake(Length).Y) 
      SnakeBody(Length).Visible = True 
     End If 

     PlaceFood() 
    End If 

Si quelqu'un pouvait me dire ce qui ne va pas, j'apprécierais beaucoup!

Merci

+0

Avez-vous de la chance pour résoudre votre problème? – awshepard

Répondre

1

hasarder une supposition (plus de code peut aider, aussi, expert IANA VB) - est-ce une sorte de problème aux limites où Snake(0).X et Snake(0).Y ne peut pas aller en dessous de 0 ou quelque chose?

Autre suggestion: vérifiez les signes de votre code d'ajout de segment de corps de gauche. Je pense que cela pourrait être un problème:

Snake(Length).X = Snake(Length - 1).X - SnakeBody(0).Width 

Si le segment est tourné vers la gauche, et nous essayons d'ajouter un morceau à la fin, nous devons passer à droite, à savoir PLUS SnakeBody(0).Width.

Snake(Length).X = Snake(Length - 1).X + SnakeBody(0).Width 

Espérons que cela aide. J'ai fait un jeu de serpent quand j'étais à l'école, donc je ressens votre peine à obtenir toutes les directions et les ajouts de segments de corps qui fonctionnent correctement.