SamuelCadieux
Messages postés31Date d'inscriptiondimanche 8 septembre 2002StatutMembreDernière intervention20 juin 2003
-
24 mai 2003 à 00:49
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
24 mai 2003 à 17:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
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
'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
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
je ne gère pas la collision, plusieurs pommes...... mais ca pose les base pour te permettre de t'amuser a programmer ca...
rclsilver02
Messages postés130Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention10 février 2012 24 mai 2003 à 11:38
merci
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 mai 2003 à 11:37
on va essayer de faire ca !
rclsilver02
Messages postés130Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention10 février 2012 24 mai 2003 à 09:55
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 :-)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 mai 2003 à 05:34
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.
SamuelCadieux
Messages postés31Date d'inscriptiondimanche 8 septembre 2002StatutMembreDernière intervention20 juin 2003 24 mai 2003 à 00:49
pas mal mais.... tu devrai mettre une structure ds tes if...endif ça serai plus facile a lire.
Bien je te propose mon ami appeler variable ki dis sa grandeur par exemple
dim v_point as integer
et a chaque fois quil mange un point rouge:
v_point = v_point + 1
pour faire arreter les points car comme jai pu voir, ils sont a linfini.Tu pourrais faire une boucle while qui dis lorsque la longueur du serpent = a v_point etc...
24 mai 2003 à 17:25
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...
24 mai 2003 à 11:38
24 mai 2003 à 11:37
24 mai 2003 à 09:55
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 :-)
24 mai 2003 à 05:34
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.
24 mai 2003 à 00:49
Bien je te propose mon ami appeler variable ki dis sa grandeur par exemple
dim v_point as integer
et a chaque fois quil mange un point rouge:
v_point = v_point + 1
pour faire arreter les points car comme jai pu voir, ils sont a linfini.Tu pourrais faire une boucle while qui dis lorsque la longueur du serpent = a v_point etc...