JEU DE DOMINO AVEC INTELLIGENCE ARTIFICIELLE (2 NIVEAU)
cs_SDan
Messages postés288Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention13 juin 2008
-
20 juil. 2006 à 09:11
rami3b
Messages postés17Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention 8 décembre 2008
-
7 août 2006 à 00:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
rami3b
Messages postés17Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention 8 décembre 2008 7 août 2006 à 00:28
mon commentaire est a propos du jeu:belle réalisation
cs_yahaa
Messages postés15Date d'inscriptionvendredi 17 septembre 2004StatutMembreDernière intervention11 mai 2007 25 juil. 2006 à 17:35
Le jeu est bien fait, l'IA marche bien.
Cependant la structure du programme est très très lourde.
Pour l'accelerer, les modifications à faire sont très importante.
En fait, cadriller la zone de jeu avec des ImageBox est la cause principale. Il faudrait utiliser les propriétés de la PictureBox 'domino_board'.
- Tu détectes les déplacements de la souris avec MouseMove et tu calcule sur quelle case est la souris. Tu utilise domino_board.Line pour définir le carré.
- Lorsque l'utilisateur place sa pièce, tu utilise domino_board.PaintPicture
Pense à mettre la propriété AutoRedraw de domino_board à True
Il y a aussi plus simple :
- à la place de :
For k 1 To tile.Count - 1: tile(k).BorderStyle 0: Next
If tile(Index).Picture 0 Then tile(Index).BorderStyle 1
tu met :
if Index <> IndSel then
tile(IndSel).BorderStyle = 0
If tile(Index).Picture 0 Then tile(Index).BorderStyle 1
IndSel = Index
End If
( Il faut déclarer IndSel en global )
cs_SDan
Messages postés288Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention13 juin 2008 20 juil. 2006 à 10:52
Je crois que la solution la plus simple pour moi car je suis débutant est de me procurer un module .dll car je l'ai vu pour pouvoir utiliser VB6 avec ma version
Merci à tous pour votre aide et à bientôt.
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 20 juil. 2006 à 10:11
Salut SDan, aparament le round n'existe pas en VB5 donc il faudrait que tu le créé. Tu peux faire par exemple:
'La fonction round retourne le nombre arrondi
public fonction Round(Nombre as integer) as integer
'Si le dernier chiffre est 4 ou inférieur on arrondi à la valeur inférieur
if right(nombre, 1) <= 4 then
'Prend la premiere partie du nombre, sans le dernier chiffre et met 0
round = left(nombre, len(nombre)-1) & 0
'Sinon on arrondi a la valeur supérieur
else
'Idem qu'en haut mais on incrémente l'avant dernier chiffre de un
round = left(nombre, len(nombre)-2) & mid(nombre, len(nombre) - 2, 1) & 0
end if
Bon voila je sais pas si c'est très claire, sa va buger(quand on incrémente de 1 il faut prévoire quand c'est 9 etc...) et je ne sais pas si il y a les fonction left, right, mid et len en VB5, dans ce cas faudrait faire du VB6 sa marchera surement ;)
Teste la fonction si tu veux et dis si sa marche!
@+
DragonDo
Messages postés93Date d'inscriptionlundi 8 avril 2002StatutMembreDernière intervention22 juillet 2006 20 juil. 2006 à 09:50
cs_SDan
Messages postés288Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention13 juin 2008 20 juil. 2006 à 09:11
Salut,
Je viens de télécharger ton jeu que je trouve intéressant mais en le testant, j'ai un petit problème, j'utilise la version 5.0 de VB et dans la procédure suivante :
Function Create_Map(Board As PictureBox, MX, MY)
Board.Width = Round(((MX * 480) / 480)) * 480
Board.Height = Round(((MY * 480) / 480)) * 480
X = Round((Board.Width / 480))
Y = Round((Board.Height / 480))
For i = 1 To X * Y
Load tile(i)
Board_Tile(i) = 0
If i <= X Then
tile(i).Left = (i * 480) - 480
tile(i).Top = 0
Else
tile(i).Left = tile(i - X).Left
tile(i).Top = tile(i - X).Top + 480
End If
tile(i).Visible = True
Next
Reset_Board
End Function
Dans la procédur suivante, le round me pose problème, Board.Width = Round(((MX * 480) / 480)) * 480 car il me dit dans la boîte de dialogue la phrase suivante :
Erreur de compilation
Procedure Sub ou Function non définie
Que dois-je faire ou par quoi puis-je remplacer le round?
7 août 2006 à 00:28
25 juil. 2006 à 17:35
Cependant la structure du programme est très très lourde.
Pour l'accelerer, les modifications à faire sont très importante.
En fait, cadriller la zone de jeu avec des ImageBox est la cause principale. Il faudrait utiliser les propriétés de la PictureBox 'domino_board'.
- Tu détectes les déplacements de la souris avec MouseMove et tu calcule sur quelle case est la souris. Tu utilise domino_board.Line pour définir le carré.
- Lorsque l'utilisateur place sa pièce, tu utilise domino_board.PaintPicture
Pense à mettre la propriété AutoRedraw de domino_board à True
Il y a aussi plus simple :
- à la place de :
For k 1 To tile.Count - 1: tile(k).BorderStyle 0: Next
If tile(Index).Picture 0 Then tile(Index).BorderStyle 1
tu met :
if Index <> IndSel then
tile(IndSel).BorderStyle = 0
If tile(Index).Picture 0 Then tile(Index).BorderStyle 1
IndSel = Index
End If
( Il faut déclarer IndSel en global )
20 juil. 2006 à 10:52
Merci à tous pour votre aide et à bientôt.
20 juil. 2006 à 10:11
'La fonction round retourne le nombre arrondi
public fonction Round(Nombre as integer) as integer
'Si le dernier chiffre est 4 ou inférieur on arrondi à la valeur inférieur
if right(nombre, 1) <= 4 then
'Prend la premiere partie du nombre, sans le dernier chiffre et met 0
round = left(nombre, len(nombre)-1) & 0
'Sinon on arrondi a la valeur supérieur
else
'Idem qu'en haut mais on incrémente l'avant dernier chiffre de un
round = left(nombre, len(nombre)-2) & mid(nombre, len(nombre) - 2, 1) & 0
end if
Bon voila je sais pas si c'est très claire, sa va buger(quand on incrémente de 1 il faut prévoire quand c'est 9 etc...) et je ne sais pas si il y a les fonction left, right, mid et len en VB5, dans ce cas faudrait faire du VB6 sa marchera surement ;)
Teste la fonction si tu veux et dis si sa marche!
@+
20 juil. 2006 à 09:50
La fonction Round n'existe pas en VB5. Tu peux la coder en utilisant la source de Julien39 à l'adresse: http://www.vbfrance.com/codes/ENCADREMENTS-APPROXIMATIONS_35216.aspx. (remplace le nom roundapp par round).
Regarde également à l'adresse : http://www.vbfrance.com/forum.v2.aspx?ID=671735&post=ok c'est intéressant.
Bon cod
20 juil. 2006 à 09:11
Je viens de télécharger ton jeu que je trouve intéressant mais en le testant, j'ai un petit problème, j'utilise la version 5.0 de VB et dans la procédure suivante :
Function Create_Map(Board As PictureBox, MX, MY)
Board.Width = Round(((MX * 480) / 480)) * 480
Board.Height = Round(((MY * 480) / 480)) * 480
X = Round((Board.Width / 480))
Y = Round((Board.Height / 480))
For i = 1 To X * Y
Load tile(i)
Board_Tile(i) = 0
If i <= X Then
tile(i).Left = (i * 480) - 480
tile(i).Top = 0
Else
tile(i).Left = tile(i - X).Left
tile(i).Top = tile(i - X).Top + 480
End If
tile(i).Visible = True
Next
Reset_Board
End Function
Dans la procédur suivante, le round me pose problème, Board.Width = Round(((MX * 480) / 480)) * 480 car il me dit dans la boîte de dialogue la phrase suivante :
Erreur de compilation
Procedure Sub ou Function non définie
Que dois-je faire ou par quoi puis-je remplacer le round?
Merci d'avance.