Je dispose d'une image de 677 x 425.
Je positionne dans le coin de l'image un carré de 22 x 22.
Je récupère chaque pixel de l'image contenue dans le carré à l'aide de la pipette.
Je fais alors correspondre chaque pixel à un tile que j'affiche.
Mais j'ai un problème avec la pipette :
L'image est en noir et blanc : les valeurs des couleurs obtenues sont donc 255 255 255 ou 0 0 0.
Hors, de temps en temps, je me retrouve avec comme valeur : 255 127 127
Ceci, de façon complètement aléatoire.
J'ai un second problème :
J'essaye de coder un système de scrolling pour pouvoir déplacer le rectangle et ainsi afficher les tiles correspondants.
Mon code fonctionne mais plus j'utilise le clavier, plus mon programme ralenti.
Voici un extrait de mon code :
[php]
Sauvegarde_automatique :
Rôles :
§ pipette::pipette
§ couleur est un texte
§ numéro_tile est un nombre
§ c :: conduit
§ ligne <
- c.retourchariot()
§ i est un nombre
§ j est un nombre
Actions :
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling
"pos_x_fenêtre_scrolling : " + pos_x_fenêtre_scrolling !
"pos_y_fenêtre_scrolling : " + pos_y_fenêtre_scrolling !
Si scrolling_en_cours == faux alors lis
projette carte_monde & fenêtre_scrolling
ferme
évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")
("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis
("ici i et j correspondent à la position de chaque pixel, en fonction de la position de la fenêtre de scrolling")
couleur = pipette.retournecouleur(i, j)
Si couleur == "255 255 255" alors lis
numéro_tile = 6
évoque c.écrire(""+ numéro_tile)
ferme
Sinon Si couleur == "0 0 0" alors lis
numéro_tile = 4
évoque c.écrire(""+ numéro_tile)
ferme
Sinon lis
numéro_tile = 0
évoque c.écrire(""+ numéro_tile)
ferme
ferme
évoque c.écrire(ligne)
ferme
évoque c.fermer()
Va vers Lecture_automatique
Lecture_automatique :
Rôles :
§ x_case est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (largeur de fond - x de carte_monde) - ((largeur de fenêtre_scrolling - 2) * largeur_case_quadrillage_tileset))/2) + largeur de bordure_gauche
§ y_case est un nombre <
- (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
§ c :: conduit
§ sauvegarde_tile est un texte
§ numéro_tile est un nombre
§ i est un nombre
§ j est un nombre
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")
("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis
sauvegarde_tile vaut c.nlire(1)
Tu convertis sauvegarde_tile en numéro_tile
(" x_case et y_case correspondent aux positions de chaque case du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Parcours Générer_quadrillage_automatique avec numéro_tile, x_case, y_case
Observe Générer_quadrillage_automatique
y_case = y_case + hauteur_case_quadrillage_tileset
ferme
x_case = x_case + largeur_case_quadrillage_tileset
y_case = (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
("on avance le curseur de 2 caractères pour éviter de lire le retour à la ligne")
sauvegarde_tile vaut c.nlire(2)
("sauvegarde_tile !")
ferme
évoque c.fermer()
Va vers Attente_clavier2
Générer_quadrillage_automatique :
Rôles :
*numéro_tile est un nombre
*x_tile est un nombre
*y_tile est un nombre
§ copie_tile est un mongraphique
§ x_tile_init est un nombre
§ y_tile_init est un nombre
index_4 est un nombre
Actions :
ajoute copie_tile dans copie_casier_tiles
image de (copie_casier_tiles{index_4}) = image de (casier_tiles{numéro_tile})
dx@(copie_casier_tiles{index_4}) vaut dx de (casier_tiles{numéro_tile})
dy@(copie_casier_tiles{index_4}) vaut dy de (casier_tiles{numéro_tile})
largeur@(copie_casier_tiles{index_4}) vaut largeur_case_quadrillage_tileset
hauteur@(copie_casier_tiles{index_4}) vaut hauteur_case_quadrillage_tileset
x_tile_init = x de (casier_tiles{numéro_tile}) + 2
y_tile_init = y de (casier_tiles{numéro_tile}) + 2
pos_x_init de (copie_casier_tiles{index_4}) = x_tile_init
pos_y_init de (copie_casier_tiles{index_4}) = y_tile_init
x de (copie_casier_tiles{index_4}) = x_tile
y de (copie_casier_tiles{index_4}) = y_tile
position de (copie_casier_tiles{index_4}) = position de (casier_tiles{numéro_tile})
pos_case de (copie_casier_tiles{index_4}) = index_4
pos_case_init de (copie_casier_tiles{index_4}) = -5
index_case de (copie_casier_tiles{index_4}) = index_4
Projette copie_casier_tiles{index_4}
incrémente index_4
Reviens
Attente_clavier2 :
Rôles :
clavier :: clavier
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours Scrolling avec clavier.touches()
ferme
Scrolling :
Rôles :
*liste :: casier de nombre
§ x_carte_monde est un nombre <
- x de carte_monde
§ y_carte_monde est un nombre <
- y de carte_monde
Actions :
Si liste est non vide alors lis
Pour chaque liste, lis
Si joker == "Droite" alors déplace fenêtre_scrolling vers la droite de 1
Si joker == "Gauche" alors déplace fenêtre_scrolling vers la gauche de 1
Si joker == "Haut" alors déplace fenêtre_scrolling vers le haut de 1
Si joker == "Bas" alors déplace fenêtre_scrolling vers le bas de 1
joker !
("on fixe des limites")
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling
Si pos_x_fenêtre_scrolling <
(x_carte_monde - 1) alors x de fenêtre_scrolling = x_carte_monde - 1
Si pos_x_fenêtre_scrolling >
((x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling) alors x de fenêtre_scrolling = (x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling
Si pos_y_fenêtre_scrolling <
(y_carte_monde - 1) alors y de fenêtre_scrolling = y_carte_monde - 1
Si pos_y_fenêtre_scrolling >
((y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling) alors y de fenêtre_scrolling = (y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling
scrolling_en_cours = vrai
Va vers Sauvegarde_automatique
ferme
ferme
Reviens
[/php]
Je positionne dans le coin de l'image un carré de 22 x 22.
Je récupère chaque pixel de l'image contenue dans le carré à l'aide de la pipette.
Je fais alors correspondre chaque pixel à un tile que j'affiche.
Mais j'ai un problème avec la pipette :
L'image est en noir et blanc : les valeurs des couleurs obtenues sont donc 255 255 255 ou 0 0 0.
Hors, de temps en temps, je me retrouve avec comme valeur : 255 127 127
Ceci, de façon complètement aléatoire.
J'ai un second problème :
J'essaye de coder un système de scrolling pour pouvoir déplacer le rectangle et ainsi afficher les tiles correspondants.
Mon code fonctionne mais plus j'utilise le clavier, plus mon programme ralenti.
Voici un extrait de mon code :
[php]
Sauvegarde_automatique :
Rôles :
§ pipette::pipette
§ couleur est un texte
§ numéro_tile est un nombre
§ c :: conduit
§ ligne <
- c.retourchariot()
§ i est un nombre
§ j est un nombre
Actions :
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling
"pos_x_fenêtre_scrolling : " + pos_x_fenêtre_scrolling !
"pos_y_fenêtre_scrolling : " + pos_y_fenêtre_scrolling !
Si scrolling_en_cours == faux alors lis
projette carte_monde & fenêtre_scrolling
ferme
évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")
("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis
("ici i et j correspondent à la position de chaque pixel, en fonction de la position de la fenêtre de scrolling")
couleur = pipette.retournecouleur(i, j)
Si couleur == "255 255 255" alors lis
numéro_tile = 6
évoque c.écrire(""+ numéro_tile)
ferme
Sinon Si couleur == "0 0 0" alors lis
numéro_tile = 4
évoque c.écrire(""+ numéro_tile)
ferme
Sinon lis
numéro_tile = 0
évoque c.écrire(""+ numéro_tile)
ferme
ferme
évoque c.écrire(ligne)
ferme
évoque c.fermer()
Va vers Lecture_automatique
Lecture_automatique :
Rôles :
§ x_case est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (largeur de fond - x de carte_monde) - ((largeur de fenêtre_scrolling - 2) * largeur_case_quadrillage_tileset))/2) + largeur de bordure_gauche
§ y_case est un nombre <
- (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
§ c :: conduit
§ sauvegarde_tile est un texte
§ numéro_tile est un nombre
§ i est un nombre
§ j est un nombre
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")
("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis
sauvegarde_tile vaut c.nlire(1)
Tu convertis sauvegarde_tile en numéro_tile
(" x_case et y_case correspondent aux positions de chaque case du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Parcours Générer_quadrillage_automatique avec numéro_tile, x_case, y_case
Observe Générer_quadrillage_automatique
y_case = y_case + hauteur_case_quadrillage_tileset
ferme
x_case = x_case + largeur_case_quadrillage_tileset
y_case = (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
("on avance le curseur de 2 caractères pour éviter de lire le retour à la ligne")
sauvegarde_tile vaut c.nlire(2)
("sauvegarde_tile !")
ferme
évoque c.fermer()
Va vers Attente_clavier2
Générer_quadrillage_automatique :
Rôles :
*numéro_tile est un nombre
*x_tile est un nombre
*y_tile est un nombre
§ copie_tile est un mongraphique
§ x_tile_init est un nombre
§ y_tile_init est un nombre
index_4 est un nombre
Actions :
ajoute copie_tile dans copie_casier_tiles
image de (copie_casier_tiles{index_4}) = image de (casier_tiles{numéro_tile})
dx@(copie_casier_tiles{index_4}) vaut dx de (casier_tiles{numéro_tile})
dy@(copie_casier_tiles{index_4}) vaut dy de (casier_tiles{numéro_tile})
largeur@(copie_casier_tiles{index_4}) vaut largeur_case_quadrillage_tileset
hauteur@(copie_casier_tiles{index_4}) vaut hauteur_case_quadrillage_tileset
x_tile_init = x de (casier_tiles{numéro_tile}) + 2
y_tile_init = y de (casier_tiles{numéro_tile}) + 2
pos_x_init de (copie_casier_tiles{index_4}) = x_tile_init
pos_y_init de (copie_casier_tiles{index_4}) = y_tile_init
x de (copie_casier_tiles{index_4}) = x_tile
y de (copie_casier_tiles{index_4}) = y_tile
position de (copie_casier_tiles{index_4}) = position de (casier_tiles{numéro_tile})
pos_case de (copie_casier_tiles{index_4}) = index_4
pos_case_init de (copie_casier_tiles{index_4}) = -5
index_case de (copie_casier_tiles{index_4}) = index_4
Projette copie_casier_tiles{index_4}
incrémente index_4
Reviens
Attente_clavier2 :
Rôles :
clavier :: clavier
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours Scrolling avec clavier.touches()
ferme
Scrolling :
Rôles :
*liste :: casier de nombre
§ x_carte_monde est un nombre <
- x de carte_monde
§ y_carte_monde est un nombre <
- y de carte_monde
Actions :
Si liste est non vide alors lis
Pour chaque liste, lis
Si joker == "Droite" alors déplace fenêtre_scrolling vers la droite de 1
Si joker == "Gauche" alors déplace fenêtre_scrolling vers la gauche de 1
Si joker == "Haut" alors déplace fenêtre_scrolling vers le haut de 1
Si joker == "Bas" alors déplace fenêtre_scrolling vers le bas de 1
joker !
("on fixe des limites")
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling
Si pos_x_fenêtre_scrolling <
(x_carte_monde - 1) alors x de fenêtre_scrolling = x_carte_monde - 1
Si pos_x_fenêtre_scrolling >
((x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling) alors x de fenêtre_scrolling = (x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling
Si pos_y_fenêtre_scrolling <
(y_carte_monde - 1) alors y de fenêtre_scrolling = y_carte_monde - 1
Si pos_y_fenêtre_scrolling >
((y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling) alors y de fenêtre_scrolling = (y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling
scrolling_en_cours = vrai
Va vers Sauvegarde_automatique
ferme
ferme
Reviens
[/php]