Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
143 connectés actuellement
30739561 visiteurs depuis l'ouverture
3147 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
| | Domaine concerné: script Logiciel utilisé: VXAce Salut a tous ^^ , j'ai un petit problème
Quand j'essaye de faire une array , ce code marche
1
2
| $game_variables[99][0]=
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
mais pas celui ci
1
2
| $game_variables[99][0]=
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
La seule différence entre les 2 est que le 1er se fait sur une seule ligne dans la commande en event "script" et que l'autre se fait sur 2 ligne
Je pense que cela vient du retour à la ligne auto dans l'éditeur de script en event , et ça m'énerve , je n'arrive pas à le contourner efficacement (le message d'erreur est que le code est invalide , qu'on à "," et qu'on s'attend à avoir "]"
C'est surement pas grand chose comme soucis mais si quelqu'un à une technique efficace je suis preneur ^^
|
hassen -
posté le 20/11/2016 à 12:15:05 (580 messages postés)
| Alien | Désolé (nulos en scriptos) a part que qu'il ya un zero de plus en bas, je ne vois absolument pas le probléme, tu devrais essayer l'entraide des scripts
|
School Urban Legends |
| | d'accord je vais essayer de voir mais en fait il y a un caractère en plus quand tu met ça dans l'editeur de script en event c'est le retour à la ligne et j'ai l'impression que c'est ce qui fait tout foirer car il se met automatiquement
EDIT : j'ai trouvé un correctif a coup d'espace bien placé (rpgm n'aime pas quand y'a une virgule en fin de ligne mais au début ça va) , mais comme la solution est pas très propre et que je comprend pas pourquoi ça fait sa , je ne vais pas mettre ce post comme solutioné
|
François Berhn -
posté le 20/11/2016 à 15:40:07 (5402 messages postés)
| Tonton Hellper | Hello,
Sais-tu que pour créer un array de n cases contenant uniquement l'élément x on peut faire :
ou
?
|
La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux |
| | Non je ne savais pas , merci beaucoup ^^ , ça pourrai m'etre utile (après là c'était juste une démo de mon problème en fait , l'array que j'utilise est pré remplie). Comment peut t on utiliser cette fonction à 2 dimension par exemple ?
j'avais une autre question sur les array si ça ne te dérange pas , imaginons 2 array en 2 dimension , j'aimerai les additionner ensemble mais de sorte que l'une des array soit " décalé" , par exemple inclure une petite array de 2*2 en bas à droite d'une grosse array de 5*5
|
François Berhn -
posté le 20/11/2016 à 18:05:22 (5402 messages postés)
| Tonton Hellper | Pour créer un array à deux dimensions de x lignes et y colonnes remplis uniquement de 0 tu peux faire ceci :
1
| Array.new(x){Array.new(y){0}} |
Je vais réfléchir pour la seconde question
|
La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux |
| | C'est fort gentil à toi ^^ , la seconde question pourrai tellement m'aider que tu aurai direct droit à une place dans les crédits de mon projet de démo technique si je le fini haha ^^
J'ai vu que quand j'essaye d'additionner 2 array voila ce que j'ai :
[[0,0,0],[0,0,0],[0,0,0]] + [[2,2],[2,2]] = [[0,0,0],[0,0,0],[0,0,0],[2,2],[2,2]]
humm , ça pose problème , elle ne semblent pas vouloir se combiner .
|
François Berhn -
posté le 21/11/2016 à 11:57:22 (5402 messages postés)
| Tonton Hellper | En fait l'opérateur + sur les array ne les fusionne pas mais les concatène ^^
(Et pour avoir jeté un oeil à la doc ruby je ne crois pas qu'il y a nativement de quoi faire ce que tu cherche)
|
La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux |
Cantarelle -
posté le 21/11/2016 à 19:58:16 (1530 messages postés)
| Makeuse tarée et Agent du FBI... | Et pourquoi ne pas utiliser collect ?
1
2
3
4
5
6
| tab = ["a", "b", "c", "c"]
#tab = {a, b, c, d}
tab = tab.collect {x | x + "!"}
#tab = {a!, b!, c!, d!}
|
Je suis presque sûre que ça marche...
1
2
3
4
5
6
| tab = [1, 4, 2]
#tab = {1, 4, 2}
tab = tab.collect {x | x + 3}
#tab = {4, 7, 5}
|
http://ruby-doc.org/core-1.9.3/Array.html
Par contre, il faut faire gaffe aux tableaux à plusieurs dimensions. Perso, je m'en sers uniquement dans l'utilisation d'une matrice.
De plus...
[2,2] est complément différent de [0, 0, 0] (trois éléments au lieu de deux) et je ne suis pas sûre si Ruby va bien aimer (Matlab le gère à peu près (en même temps, c'est son taff de bosser sur les matrices). D'autres langages non).
Il vaudrait mieux, dans le cas où tu ne veux pas changer le dernier élément, faire [2, 2, 0]...
|
Makeuse à la crosse de street-hockey. Livestream. |
François Berhn -
posté le 22/11/2016 à 10:02:11 (5402 messages postés)
| Tonton Hellper | Yep collect (ou map) ne fait pas tout mais me semble indispensable pour le faire, comme le fait de s'assurer que les deux tableaux aient la même forme ^^
Du coup je viens de coder deux fonctions pour la fusion de deux tableaux à deux dimensions que voici :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| def makeGrid(x, y, value=nil)
if block_given?
Array.new(x){Array.new(y){yield}}
else
Array.new(x){Array.new(y){value}}
end
end
def fitGrid(first, second, x=0, y=0, default=0)
len = first[0].length - second[0].length - x
hei = first.length - second.length - y
decalG = makeGrid(y, first[0].length, default)
decalD = makeGrid(hei, first[0].length, default)
milieu = second.map{|i| Array.new(x){default} + i + Array.new(len){default}}
third = decalG + milieu + decalD
if block_given?
first.each_with_index.map do |columns, indexY|
columns.each_with_index.map do |cell, indexX|
yield(cell, third[indexY][indexX])
end
end
else
first.each_with_index.map do |columns, indexY|
columns.each_with_index.map do |cell, indexX|
cell + third[indexY][indexX]
end
end
end
end |
La première fonction c'est juste un raccourci pour crée un tableau à deux dimensions
Pour la seconde voici quelques infos :
first et second sont les deux tableaux à fusionner (first ne doit pas être plus petit que second)
x et y servent de décalage, au cas où on ne voudrait pas faire correspondre les coins haut gauche de first et second. Il faut mettre des valeurs positives ou neutres
default est une valeur utilisée pour mettre second au format de first pour remplir les cases rajoutées
Enfin il est possible de rajouter un bloc pour choisir le mode de fusion qu'on souhaite faire (union, intersection différence...)
Par exemple avec ces deux valeurs :
1
2
| a = makeGrid(5, 5, 3)
b = makeGrid(3, 3, 2) |
L'appel de la fonction comme ceci :
Affichera :
1
2
3
4
5
| [5, 5, 5, 3, 3]
[5, 5, 5, 3, 3]
[5, 5, 5, 3, 3]
[3, 3, 3, 3, 3]
[3, 3, 3, 3, 3] |
C'est à dire qu'on a ajouté aux valeurs du premier tableau les valeurs correspondantes du second.
Et l'appel de la fonction comme ceci :
1
| fitGrid(a, b, 1, 1, nil){|x, y| y == nil ? x : y} |
Affichera :
1
2
3
4
5
| [3, 3, 3, 3, 3]
[3, 2, 2, 2, 3]
[3, 2, 2, 2, 3]
[3, 2, 2, 2, 3]
[3, 3, 3, 3, 3] |
C'est à dire qu'on a écrasé les valeurs du premier tableau par les valeurs correspondantes du second.
Après comme dit plus haut il faut en effet faire attention avec les arrays multidimensionnels, qui s'il manque une case quelque part pourraient rapidement être source de bugs pas forcément facile à repérer.
Et puis comme mon code est un peu crade il a encore des bugs non gérés mais j'ai un peu la flemme de fix ça pour le moment ===>[]
|
La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux |
Index du forum > Entraide > [RESOLU] [VXAce] problème de définition d'une array
|
|
|