Transféré de l'ancien fofo. Spark.
Après plusieurs demande de tutoriel pour le déplacement en combat, j'ai décidé de faire un tutoriel avec une méthode simple que j'ai inventé.
Voici une map normal:
Cliquez pour révéler
Cliquez pour masquer
Voici une map que j'ai modifié afin de pouvoir vous expliquer comment réaliser le déplacement:
Cliquez pour révéler
Cliquez pour masquer
Étape 1 : Débuter le code
On commence le code.
Cliquez pour révéler
Cliquez pour masquer
Func Combat()
Recherche()
EndFunc
Func Recherche()
EndFunc
Étape 2 : Trouver la position du monstre
Vous devez trouver dans quel carré (voir la map modifié) le monstre se trouve. Puis qu'il y a 9 carrés, vous devez faire 9 PixelSearch.
Attention: Les coordonnées sur l'image sont pour une fenêtre de 500x500. Pour utiliser ces coordonnées utiliser ce code:
Cliquez pour révéler
Cliquez pour masquer
WinMove("Nom_du_joueur","",0,0,500,500,10)
Ce qui donne:
Cliquez pour révéler
Cliquez pour masquer
Global $Carre
$Carre=0
Func Combat()
Recherche()
EndFunc
Func Recherche()
$Monster = PixelSearch(0,0,166,166,0x0000FF) ;carré 1
If not @error then
$Carre=1
Deplacement()
Else
$Monster = PixelSearch(166,0,332,166,0x0000FF) ;carré 2
If not @error then
$Carre=2
Deplacement()
Else
$Monster = PixelSearch(332,0,500,166,0x0000FF) ;carré 3
If not @error then
$Carre=3
Deplacement()
Else
$Monster = PixelSearch(0,166,166,332,0x0000FF) ;carré 4
If not @error then
$Carre=4
Deplacement()
Else
$Monster = PixelSearch(166,166,332,332,0x0000FF) ;carré 5
If not @error then
$Carre=5
Deplacement()
Else
$Monster = PixelSearch(332,166,500,332,0x0000FF) ;carré 6
If not @error then
$Carre=6
Deplacement()
Else
$Monster = PixelSearch(0,332,166,500,0x0000FF) ;carré 7
If not @error then
$Carre=7
Deplacement()
Else
$Monster = PixelSearch(166,332,332,500,0x0000FF) ;carré 8
If not @error then
$Carre=8
Deplacement()
Else
$Monster = PixelSearch(332,332,500,500,0x0000FF) ;carré 9
If not @error then
$Carre=9
Deplacement()
Else
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Msgbox(0,"Information","Erreur.")
EndFunc
Étape 3 : Calculer la distance entre le joueur et le monstre
Avant tout, trouvez les coordonnées de votre personnage avec un PixelSearch.
Cliquez pour révéler
Cliquez pour masquer
$Player = PixelSearch(0,0,500,500,0xFF0000)
Ensuite, vous devez trouver la distance entre 2 points. (http://fr.wikipedia.org/wiki/Distance_e ... %C3%A9sien)
Cliquez pour révéler
Cliquez pour masquer
Loading Image
Une fois transformer en AutoIt on obtien:
Cliquez pour révéler
Cliquez pour masquer
$Total_X= $Monster[0]-$Player[0]
$Terminer_X= $Total_X*$Total_X
;---
$Total_Y= $Monster[1]-$Player[1]
$Terminer_Y= $Total_Y*$Total_Y
;---
$Final= $Terminer_X+$Terminer_Y
;---
$Distance = Sqrt($Final)
La distance entre le monstre et le joueur peut être utiliser pour savoir quand attaquer.
Exemple:
Cliquez pour révéler
Cliquez pour masquer
$1_PO= X ;taille en pixel d'une case
$PO = 5 ;le nombre de case de votre sort
$Total_PO=$1_PO*$PO
If $Distance < $Total_PO then ;si la distance est plus petite que la portée
Attaquer()
EndIf
If $Distance < $1_PO ;si la distance est plus petite que 1 de portée
Corps_a_Corps()
EndIf
Étape 4 : Le déplacement
Regarder dans le code de l'étape 2. Nous donnons un chiffre à la variable $Carre dépendant ou le monstre a été trouvé. Le nombre attribué à la variable $Carre a été choisien fonction de l'image modifié (voir au début du tutoriel).
Sur l'image modifié:
Cliquez pour révéler
Cliquez pour masquer
Carré haut gauche = 1
Carré haut milieu = 2
Carré haut droit = 3
-
Carré milieu gauche = 4
Carré milieu milieu = 5
Carré milieu droit = 6
-
Carré droit gauche = 7
Carré droit gauche = 8
Carré droit gauche = 9
Maitenant, commencons le code pour le déplacement.
Cliquez pour révéler
Cliquez pour masquer
$Taille= X ;taille en pixel d'une case
Func Deplacement()
If $Carre=1 then
$X=-2
$Y=-1
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=2 then
$X=0
$Y=-3
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=3 then
$X=2
$Y=1
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=4 then
$X=-3
$Y=0
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=5 then ;A VOIR
$X=0
$Y=0
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=6 then
$X=3
$Y=0
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=7 then
$X=-2
$Y=1
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=8 then
$X=0
$Y=3
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
If $Carre=9 then
$X=2
$Y=1
$Distance_X=$Taille*$X
$Distance_Y=$Taille*$Y
$Player = PixelSearch(0,0,500,500,0xFF0000)
MouseMove($Player[0]-$Distance_X, $Player[1]-$Distance_Y)
MouseClick("left")
EndIf
EndFunc
Étape 5 : Détecter son tour
Il suffit de faire une boucle afin de savoir quand est notre tour.
Cliquez pour révéler
Cliquez pour masquer
Et de rechercher le pixel qui nous montre quand c'est à nous de jouer.
Cliquez pour révéler
Cliquez pour masquer
Do
Sleep(10)
$Color = Pixelgetcolor(x, y, 6) ;Remplacer x et y par les coordonnées qui se trouve autour de votre portrait.
Until $Color="0x_ _ _ _ _ _" ;mettre la couleur de la coordonnée (x,y)
Vous n'avez qu'à placer ce code dans une fonction et de le mettre avant l'attaque ou le déplacement.
Cliquez pour révéler
Cliquez pour masquer
Func Attente()
Do
Sleep(10)
$Color = Pixelgetcolor(x, y, 6) ;Remplacer x et y par les coordonnées qui se trouve autour de votre portrait.
Until $Color="0x_ _ _ _ _ _" ;mettre la couleur de la coordonnée (x,y)
Recherche()
EndFunc
Étape 6 : Fermer le combat
Pour savoir si le combat est terminer, vous avez plusieurs choix.
- Rechercher la couleur autour du monstre ou du joueur
- Inclure une recherche de pixels pendant la boucle d'attente
- Regardez si votre tour n'arrive jamais...
- Etc..
Étape 7 : Changer de map
[AutoIt v3] Les changements de maps
_____________________________
J'accepte tout les commentaires :)