Urgent : débugage demandé !!!

bubbble Messages postés 12 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 mars 2004 - 15 mars 2004 à 13:56
bubbble Messages postés 12 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 mars 2004 - 16 mars 2004 à 01:36
Bonjour,
voilà voilà ça fait plus de deux semaines que je bosse dur sur ce projet sans savoir pkoi il ne marche po ! Mon algorithme est peut etre faux ms je ne vois po où ! en tout cas mon robot s'arrete avt d'avoir trouver la sortie ou rentre ds une boucle infinie ! Au secours si jamais vous pouvez me debugger tt ça ça serai sympa !

Merci !!!

voilà mon code :
Public Sub card()
NX = RobotX
NY = RobotY - 1
SX = RobotX
SY = RobotY + 1
OX = RobotX - 1
OY = RobotY
EX = RobotX + 1
EY = RobotY
End Sub
Public Sub droitaumur()
'On oblige le robot à rencontrer un mur.
While Form1.Picture1.Point(OX, OY) <> RGB(255, 255, 255)
Debug.Print "droit au mur"
RobotX = RobotX - 1
Form1.Robot.Left = RobotX
Form1.Picture1.Line (EntreeX, EntreeY)-(RobotX, RobotY), RGB(255, 0, 0)
Module1.card
Wend
Debug.Print Form1.Picture1.Point(OX, OY)
'Initialisation de l'avant du robot.
Devant = 4
End Sub
Public Sub bouger()

Select Case Devant

Case 1 'L'avant du robot est le nord.
Debug.Print "cas 1"
'Si mur à droite.
If Form1.Picture1.Point(EX, EY) = RGB(255, 255, 255) Then
'Si pas de mur devant.
If Form1.Picture1.Point(NX, NY) = RGB(0, 0, 0) Then
'Le robot avance.
RobotX = NX
RobotY = NY
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
'S'il y a un mur devant.
ElseIf Form1.Picture1.Point(NX, NY) = RGB(255, 255, 255) Then
'Le robot tourne sur lui-meme à gauche.
Devant = 3
End If
'S'il n'y a pas de mur à droite.
ElseIf Form1.Picture1.Point(EX, EY) = RGB(0, 0, 0) Then
'Le robot tourne sur lui-meme à droite.
Devant = 4
RobotX = RobotX + 1
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
End If

Case 2 'L'avant du robot est dirigé vers le sud.
Debug.Print "cas 2"
'Si mur à droite.
If Form1.Picture1.Point(OX, OY) = RGB(255, 255, 255) Then
'Si pas de mur devant.
If Form1.Picture1.Point(SX, SY) = RGB(0, 0, 0) Then
'Le robot avance.
RobotX = SX
RobotY = SY
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
'S'il y a un mur devant.
ElseIf Form1.Picture1.Point(SX, SY) = RGB(255, 255, 255) Then
'Le robot tourne sur lui-meme à gauche.
Devant = 4
End If
'S'il n'y a pas de mur à droite.
ElseIf Form1.Picture1.Point(OX, OY) = RGB(0, 0, 0) Then
'Le robot tourne sur lui-meme à droite.
Devant = 3
RobotX = RobotX - 1
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
End If

Case 3 'L'avant du robot est dirigé vers l'ouest.
Debug.Print "cas 3"
'Si mur à droite.
If Form1.Picture1.Point(NX, NY) = RGB(255, 255, 255) Then
'Si pas de mur devant.
If Form1.Picture1.Point(OX, OY) = RGB(0, 0, 0) Then
'Le robot avance.
RobotX = OX
RobotY = OY
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
'S'il y a un mur devant.
ElseIf Form1.Picture1.Point(OX, OY) = RGB(255, 255, 255) Then
'Le robot tourne sur lui-meme à gauche.
Devant = 2
End If
'S'il n'y a pas de mur à droite.
ElseIf Form1.Picture1.Point(NX, NY) = RGB(0, 0, 0) Then
'Le robot tourne sur lui-meme à droite.
Devant = 1
RobotY = RobotY - 1
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
End If

Case 4 'L'avant du robot est dirigé vers l'est.
Debug.Print "cas 4"
'Si mur à droite.
If Form1.Picture1.Point(SX, SY) = RGB(255, 255, 255) Then
'Si pas de mur devant.
If Form1.Picture1.Point(EX, EY) = RGB(0, 0, 0) Then
'Le robot avance.
RobotX = EX
RobotY = EY
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
'S'il y a un mur devant.
Else
'Le robot tourne sur lui-meme à gauche.
Devant = 1
End If
'S'il n'y a pas de mur à droite.
ElseIf Form1.Picture1.Point(SX, SY) = RGB(0, 0, 0) Then
'Le robot tourne sur lui-meme à droite.
Devant = 2
RobotY = RobotY + 1
Form1.Robot.Left = RobotX
Form1.Robot.Top = RobotY
Form1.Picture1.Line -(RobotX, RobotY), RGB(255, 0, 0)
End If

End Select
End Sub

Public Sub chemin()
'Le robot bouge jusqu'à trouver la sortie.
While RobotX <> SortieX And RobotY <> SortieY
Debug.Print "boucle while"
Module1.card
Module1.bouger
Wend
Debug.Print "ds chemin"
'Le robot a atteint la sortie : c'est fini !!! If RobotX SortieX And RobotY SortieY Then
MsgBox "Félicitations : vous avez gagné !!!", vbInformation
End If
End Sub

2 réponses

SupraDolph Messages postés 196 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 1 septembre 2008 1
15 mars 2004 à 16:54
On manque cruellement de donées pour t'aider le mieu aurai été que tu poste ton projet en entier car dans l'état actuel on ne peut pas compilé le code et voir où se trouve ton/tes erreur(s).

Sinon ton problème vient peut être de la boucle while dans "chemin". moi j'essairai de mettre des parenthèse :
While (RobotX <> SortieX And RobotY <> SortieY)

car je n'ai encore jamai essayé de mettre 2 condition pour la boucle while. (condition 1 and condition2)

Sinon bonne chance pour ton projet (il ne faut jamais désespèré, l'erreur la plus bête n'ai pas forcément la plus évidente à voir, fait une exécution pas à pas de ton prog en inspectan les variables.)

Amicalement
SupraDolph.
0
bubbble Messages postés 12 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 mars 2004
16 mars 2004 à 01:36
merci ! ça a un peu arrangé mon affaire ms c po encore ça : c sur mon robot ne rentre po systématiquement ds une boucle infinie comme avt ...juste dans 80 % des cas !...bon fo vraiment que je revois (encore ! :-( ) tout ça !
merci en tout cas pour ton soutien :-)

bonne continuation !
0
Rejoignez-nous