Serpent

Soyez le premier à donner votre avis sur cette source.

Vue 5 545 fois - Téléchargée 233 fois

Description

Bon c'est le célèbre jeu du serpent ! Mais j'ai un problème ... tout fonctionne mis à part une chose : je n'arrive pas à définir la longueur du serpent :-( Donc si vous pouvea m'aider ça serait sympathique :-)
Donc en fait, je veux qu'à chque fois que le serpent mange une pomme, le serpent grandi d'une unité. Comment je peux faire ? Je vais passer par le formum aussi, parce que c'est la règle de VBFrance, mais en ayant la source cela peut-ête plus facile :-) Voilà merci d'avance.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
bon , accroches toi bien :

dans un nouveau projet, ajoutes : un timer et un module

colles ca dans le module :
Option Explicit

Public Type Coords
X As Single
Y As Single
End Type

Public Enum enum_Orientation
SO_HAUT = vbKeyUp
SO_BAS = vbKeyDown
SO_GAUCHE = vbKeyLeft
SO_DROITE = vbKeyRight
End Enum

Public Const KeyArrows = "&(%'" 'contient les caracteres de codes ascii les touches flechées

Public Type Serpent_Type
Pts(Taille_Max) As Coords
Longueur As Integer
Orientation As enum_Orientation
Vitesse As Single
End Type

'**********************************
'Parametrage

Public Const Taille_Min = 4
Public Const Taille_Max = 255
Public Const Debut_X = 25 'en cases
Public Const Debut_Y = 25 'en cases egalement

Public Const Plateau_W = 50 'nombre de cases
Public Const Plateau_H = 50 ' idem

Public Const Echelle 10 ' 10 pixels 1 case

Public Const Debut_Orientation = SO_DROITE
'**********************************

Public Serpent As Serpent_Type

'******************************************************************************************************

'et ca dans la form

Option Explicit

Dim Pomme As Coords

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'si on appuie sur une des touches de directions
If 0 <> InStr(1, KeyArrows, Chr$(KeyCode), vbTextCompare) Then
Serpent.Orientation = KeyCode 'onchange la direction du serpent
End If
End Sub

Private Sub Form_Load()
Me.KeyPreview = True
Me.AutoRedraw = True

Me.Width = Screen.TwipsPerPixelX * Echelle * Plateau_W
Me.Height = Screen.TwipsPerPixelY * Echelle * Plateau_H

Me.ScaleMode = vbPixels

Me.FillStyle = 0 'fond opaque

'on initialise le serpent
Serpent.Longueur = Taille_Min
Serpent.Orientation = Debut_Orientation

creerPomme
Timer1.Interval = 100

Dim a As Integer
For a = 0 To (Serpent.Longueur) + 1
With Serpent.Pts(a)
.X = Debut_X
.Y = Debut_Y
End With
Next a
End Sub

Sub creerPomme()
Randomize Timer 'place aléatoirement la pomme
Pomme.X = Int(1 + Plateau_W * Rnd)
Pomme.Y = Int(1 + Plateau_H * Rnd)
End Sub

Private Sub Timer1_Timer()
Dim a As Integer
Cls
Me.FillColor = &H8000&
For a = (Serpent.Longueur) + 1 To 0 Step -1
With Serpent.Pts(a)
If a <> (Serpent.Longueur) + 1 Then 'permet de ne pas afficher le bout de la queue du serpent
Me.Circle (.X * Echelle, .Y * Echelle), Echelle 2, &H8000&
End If
If a > 0 Then 'on ne decale pas la tete
.X = Serpent.Pts(a - 1).X 'decalage de tous les segments
.Y = Serpent.Pts(a - 1).Y
End If
End With
Next a

Me.FillColor = &H800000
Me.Circle (Pomme.X * Echelle, Pomme.Y * Echelle), Echelle 2, &H800000

With Serpent.Pts(0)
Select Case Serpent.Orientation 'on decale la tete
Case SO_DROITE: .X = .X + (Echelle * 0.1)
Case SO_GAUCHE: .X = .X - (Echelle * 0.1)
Case SO_BAS: .Y = .Y + (Echelle * 0.1)
Case SO_HAUT: .Y = .Y - (Echelle * 0.1)
End Select
If Int(.X) Pomme.X And Int(.Y) Pomme.Y Then 'si on mange la pomme......
creerPomme 'on en crée un autre
Serpent.Longueur = Serpent.Longueur + 1 'et on agrandit le serpent
End If
End With
End Sub


'***************************************************************************************************************

voila, c'est JUSTE UNE BASE !!!!!

je ne gère pas la collision, plusieurs pommes...... mais ca pose les base pour te permettre de t'amuser a programmer ca...
Messages postés
131
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012

merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
on va essayer de faire ca !
Messages postés
131
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012

hum.... SamuelCadieux et Renfield, je pense que vous avez tout deux trouvé une solution, mais je ne vois pas comment faire ... ça serait possible que vous fassiez l'exemple dans ma sources ou alors, un petit exemple indépendant pour que je vois comment ça marche ?
Pour la catégorie API Renfield, je ne voulais pas la mettre dedans ... je n'ai tout simplement pas changer l'option car je n'ai pas fait attention :-)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
oula !!

1 - je ne vois pas pourquoi tu as mis ca dans la catégorie 'API' !!


2 - utilises plutôt des constantes :
Case vbKeyUp 'Haut
If Deplacements <> 2 Then
If Deplacements = 0 Then

3 - Optimise ton test :

If a 0 Or a 25 Or a = 50 Or a = 75 Or ..... a = 275 Or a = 300 Or a = 325 Then
équivaut a...
if a mod 25 = 0 Then

4 - Ta structure est super étrange, et pour le coupe de la taille variable ...

essaye deja de faire un petit serpent, de 4 ou 5 cases, et qui se deplace !!
la, on ne fait que remplir la zone de bouts de serpents....

fait un truc du genre

private type Coords
X as single
Y as single
end type

dim Serpent() as Coords 'tableau dynamique, sans dimension !


dans le code , tu initialise ton serpent :

redim Serpent(4)

serpent(0).X = 20
serpent(0).Y = 20
............


quand tu dois te deplacer, tu decales en fait les cases :

for a= uBound( Serpent) to 1 step -1
Serpent ( a) = Serpent ( a-1)

et enfin, pour agrandir le serpent, la seule chose nécessaire, est d'agrandir le tableau :

redim preserve Serpent ( ubound ( serpent))


pour info, Ubound sert a renvoyer la taille d'un tableau, ici donc celle du serpent.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.