Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

404 connectés actuellement

29376173 visiteurs
depuis l'ouverture

5540 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Tashiroworld

Eclipso

Le Temple de Valor

Le Comptoir Du clickeur

Hellsoft

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [ruby] Suppresion aléatoire Ruby 2.3.3


kabu - posté le 29/01/2018 à 17:44:58 (57 messages postés)

❤ 0

Domaine concerné: script
Logiciel utilisé: ruby
Bonjour, je suis en train de coder un jeu, et dans une étape de mon jeu, je voudrais supprimer une valeur d'un tableau uniquement si celle-ci est unique, je veut utiliser un rand() pour que la suppression soit aléatoire, mais je ne sait pas comment faire. J'utilise la version 2.3.3 de ruby.
J'ai tenter ceci mais rien n'y fait:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
 
@rd = rand(@main_des_joueurs[@joueur].size)
while(@main_des_joueurs[@joueur].count(@rd) > 1)
    @rd = rand(@main_des_joueurs[@joueur].size)
end
@defause[@joueur] << @main_des_joueurs[@joueur].at(@rd)
@main_des_joueurs[@joueur].delete_at(@rd)
 


@main_des_joueurs[] est un tableau comme ceci dans initialize : @main_des_joueurs = [[],[],[],[]] , plus tard chaque tableaux internes seront remplie de 13 valeurs
Merci de votre aide


François Berhn - posté le 29/01/2018 à 19:21:01 (5402 messages postés)

❤ 0

Tonton Hellper

Tu peux utiliser delete_at(i) pour supprimer une valeur d'un array à un index i.

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


kabu - posté le 29/01/2018 à 19:27:16 (57 messages postés)

❤ 0

Merci, mais je connais déjà cette méthode ^^', regarde bien je l’utilise dans ma dernière ligne


Tassle - posté le 30/01/2018 à 19:29:22 (5234 messages postés)

❤ 0

Disciple de Pythagolf

Bah faut que tu expliques où ça bloque, parce que "rien n'y fait" c'est pas très précis ^^
Quelle est la différence entre l'effet du code que tu nous montres et l'effet que tu voudrais obtenir ?

~~


kabu - posté le 31/01/2018 à 17:49:33 (57 messages postés)

❤ 0

Salut, je vais mieux m'expliquer, j'ai un tableau @main_des_joueurs, plus tard ce tableau est remplie de valeurs aléatoires, admettons que j'obtient ceci:

Portion de code : Tout sélectionner

1
@main_des_joueurs[0][14, 14, 5, 6, 3, 7, 8]


Ensuite j'ai coder une fonction defausse, la voici:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
#pour la defausse de pions
  def defausse
    if @joueur == 0 
        @defause[0] << @main_des_joueurs[0].at(@sel)
        @main_des_joueurs[0].delete_at(@sel)
    else
        @defause[@joueur] << @main_des_joueurs[@joueur].at(rand(@main_des_joueurs[@joueur].size))
        @main_des_joueurs[@joueur].delete_at(rand(@main_des_joueurs[@joueur].size))
    end
    @turn += 1
    combine
  end


Concrètement je voudrait empêcher la defause si mon tableau contient plusieurs fois la même valeur
(par exemple dans mon tableau je possède 2 fois la valeur 14) et relancer le random pour defauser un pion aléatoirement tant que cette valeur aléatoire est présente 2 fois, en gros si j'ai 2 fois 14, sa boucle tant que cette valeur est présente plus d'une fois.
Je ne sais pas comment faire ceci, merci de votre aide


fleurman - posté le 31/01/2018 à 19:44:01 (50 messages postés)

❤ 0

Ciao,

Au lieu de faire:

Portion de code : Tout sélectionner

1
2
3
 
rand(@main_des_joueurs[@joueur].size)
 



Il faut que tu séléctionne l'une des entrées de ton array:

Portion de code : Tout sélectionner

1
2
3
4
 
val = @main_des_joueurs[@joueur].sample
#sample choisi une valeur aléatoire
 



Ensuite tu peux vérifier si cette valeur est présente plus d'une fois et refaire .sample sinon, comme dans ton premier post.

Finalement, utilise

Portion de code : Tout sélectionner

1
2
3
4
 
@main_des_joueurs[@joueur].delete(val)
#val étant la valeur obtenue plus tôt
 




Source: http://ruby-doc.org/core-2.3.3/Array.html


kabu - posté le 31/01/2018 à 20:00:08 (57 messages postés)

❤ 0

Merci beaucoup ^^, dernière petite chose(je crois), quand une valeur d'un tableau est supprimer, cette valeur va dans un tableau du nom de defause, comment je pourrais faire pour détecter si cette valeur(imaginons 4) ce trouve proche d'une valeur que j'ai dans un tableau(donc si j'ai 2 et 3 ou 5 et 6 ou 3 et 5) et que si oui bah... happy^^'
Merci beaucoup pour votre aide, je suis en train de faire un jeu mah-jong pour info^^


fleurman - posté le 31/01/2018 à 21:03:26 (50 messages postés)

❤ 0

Voila ce que je te propose:

Portion de code : Tout sélectionner

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
29
30
31
32
33
34
35
36
37
38
 
def addToDefausse(index,val)
 
  # ajoute la nouvelle valeur
  @defausse[index].push(val)
  
  # retourne false si la table a moins de 3 valeurs
  return false unless @defausse[index].size > 2
 
  # fait une copie dans une variable temporaire
  tmp = @defausse[index]
 
  # arrange les éléments de la table par ordre croissant
  tmp.sort!
  # élimine les doublons
  tmp.uniq!
 
  # trouve l'index de val
  id = tmp.index(val)
 
  # test pour id-1,id,id+1
  if id > 0 && id < tmp.size-1
    return true if (tmp[id-1]+tmp[id]+tmp[id+1])-(tmp[id-1]*3) == 3
  end
  
  # test pour id,id+1,id+2
  if id < tmp.size-3
    return true if (tmp[id]+tmp[id+1]+tmp[id+2])-(tmp[id]*3) == 3
  end
  
  # test pour id-2,id-1,id
  if id > 1
    return true if (tmp[id-2]+tmp[id-1]+tmp[id])-(tmp[id-2]*3) == 3
  end
  
  return false
end
 



Cette fonction ajoute une valeur à @defausse et renvoie true/false si cette valeur est au centre d'une suite consécutive parmi les valeurs de @defausse.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
 
@defausse = [0,2,3,5,6,7]
 
print addToDefausse(6)   # true
print addToDefausse(1)   # true
print addToDefausse(4)   # true
print addToDefausse(8)   # true
print addToDefausse(15) # false
 



Le Mah-Jong c'est sympa. :sourire2


kabu - posté le 31/01/2018 à 21:27:55 (57 messages postés)

❤ 0

Merci beaucoup, mais j'avoue que je ne sais pas utiliser ta fonction, et je comprend pas trop le return (parce que je sais pas m'en servir^^')
Je vais te montrer le code complet(si y a moyen de l’améliorer je suis preneur)

Portion de code : Tout sélectionner

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
require 'gosu'
 
class Mahjong < Gosu::Window
  def initialize
        @widht  = 640
        @weight = 480
    super @widht, @weight
    self.caption = 'Mahjong'
        @back = Gosu::Image.new("Pictures/back.png", :tileable => true)
        @capital_tuile = [*1..8] + [*9..42] * 4
    @main_des_joueurs = [[],[],[],[]]
        @sel = 0
    @curseur = Gosu::Image.new("Pictures/curseur.png", :tileable => true)
    @curseurx = 190 + 20 * @sel
    @curseury = 410
    @action = 0
    @defause = [[],[],[],[]]
    @com     = [[],[],[],[]]
    @turn = 0
    @joueur = 0
    start
  end
 
#mise a jour du jeu  
  def update
     @sel = 0 if @sel >= @main_des_joueurs[0].size
     @sel = @main_des_joueurs[0].size - 1 if @sel < 0
         @sel -= 1 if Gosu.button_down? Gosu::KB_LEFT 
         @sel += 1 if Gosu.button_down? Gosu::KB_RIGHT 
         @curseurx = 190 + 20 * @sel
         if  Gosu.button_down? Gosu::KB_UP
      @action += 1
      @action = 0 if @action>4
    end
    if  Gosu.button_down? Gosu::KB_DOWN
      @action -= 1
      @action = 4 if @action<0
    end
        core if Gosu.button_down? Gosu::KB_C
  end
  
 #dessin du jeu
  def draw
        @back.draw(0,0,0)
        @curseur.draw(@curseurx, @curseury, 0)
        @actionne = Gosu::Image.new("Pictures/action/#{@action}.png", :tileable => true)
        @actionne.draw(0,0,0)
        affichage(@main_des_joueurs[0], 211.5, 15.5, 0, 0)
        affichage(@defause[0], 211.5, 13, 0, 0)
        affichage(@com[0], 211.5, 11.5, 0, 0)
        affichage(@main_des_joueurs[1], 31.25, 90, -90, 1)
        affichage(@defause[1], 29.75, 90, -90, 1)
        affichage(@com[1], 28.25, 90, -90, 1)
        affichage(@main_des_joueurs[2], 211.5, 0.5, 180, 0)
        affichage(@defause[2], 211.5, 1.5, 180, 0)
        affichage(@com[2], 211.5, 2.5, 180, 0)
        affichage(@main_des_joueurs[3], 1, 90, 90, 1)
        affichage(@defause[3], 2.5, 90, 90, 1)
        affichage(@com[3], 4, 90, 90, 1)
  end
  
  def affichage(tableau, x, y, angle, mode)
     if tableau != nil
           @tuiles = Array.new(tableau.size) do |index|
                      sprite = Gosu::Image.new("Pictures/#{tableau[index]}.png", :tileable => true)
                      sprite.draw_rot(x + 20 * index, 30 * y, 0, angle) if mode == 0
                     sprite.draw_rot(x * 20, y + 23.5 * index, 0, angle) if mode != 0
           end
     end
  end
  
#depard du jeu
  def start
        4.times do |i|
      pioche(13, i)
      fleur(i)
    end
  end
  
#Donne les pions à chaques joueurs    
  def pioche(nb, joueur)
    nb.times do
      index = rand(@capital_tuile.size)
      @main_des_joueurs[joueur].push(@capital_tuile[index])
      @capital_tuile.delete_at(index)
      end
    end
    
#Vérifie la présence de pions particuliers, enlève les pions et compense en piochant    
  def fleur(joueur)
      9.times do |i|
        if @main_des_joueurs[joueur].member?(i)
           @defause[joueur] << i
           @main_des_joueurs[joueur].delete(i)
           while @main_des_joueurs[joueur].length < 13
             pioche(1, joueur)
           end
        end
      end
    end
        
#pour la defausse de pions
  def defausse
    if @joueur == 0 
        @defause[0] << @main_des_joueurs[0].at(@sel)
        @main_des_joueurs[0].delete_at(@sel)
    else
                @a = 5
                while(@main_des_joueurs[@joueur].count(@a) > 1)
                        @a = rand(@main_des_joueurs[@joueur].size)
                end
                @defause[@joueur] << @main_des_joueurs[@joueur].at(@a)
                @main_des_joueurs[@joueur].delete_at(@a)
    end
    @turn += 1
    combine
  end
  
#coeur du jeu
  def core
    @j0 = [0 , 4 , 8  , 12 , 16 , 20 , 24 , 28 , 32 , 36 , 40, 44, 48]
    @j1 = [1 , 5 , 9  , 13 , 17 , 21 , 25 , 29 , 33 , 37 , 41, 45, 49]
    @j2 = [2 , 6 , 10 , 14 , 18 , 22 , 26 , 30 , 34 , 38 , 42, 46, 50]
    @j3 = [3 , 7 , 11 , 15 , 19 , 23 , 27 , 31 , 35 , 39 , 43, 47, 51]
    @j0.size.times do |i|
      if @j0[i] == @turn #J0
        @joueur = 0
      elsif @j1[i] == @turn#J1
        @joueur = 1
      elsif @j2[i] == @turn#J2
        @joueur = 2
      elsif @j3[i] == @turn#J3
        @joueur = 3
      end
    @joueur = 3 if @joueur < 0
    @joueur = 0 if @joueur > 3
  end
  
  case @action
    when 0 #defause
      defausse
    when 1 #selectionner
      @tmp = @main_des_joueurs[0][@sel]
      @main_des_joueurs[0].delete_at(@sel)
      @action = 3
    when 2 #quitter le jeu
      exit
    when 3 #poser le pion
      @main_des_joueurs[0].insert(@sel, @tmp)
      @action = 1
    when 4 #reset
      window = Mahjong.new.show
    end
    
  end
  
#gere les combinaisons du jeu
  def combine
        4.times do |i|
        #gere la paire
                 if @main_des_joueurs[i].count(@defause[@joueur].last) == 1 && @main_des_joueurs[0].count(@defause[0].last) == 0
                                @com[i] << @defause[@joueur].last
                                @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
        #gere le pung
                elsif @main_des_joueurs[i].count(@defause[@joueur].last) == 2 && @main_des_joueurs[0].count(@defause[0].last) == 0
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
        #gere le kong
                elsif @main_des_joueurs[i].count(@defause[@joueur].last) == 3 && @main_des_joueurs[0].count(@defause[0].last) == 0
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
                        pioche(1, i)
        #gere le show (en cour)
                
                
                 end
        end
  end
        
end
window = Mahjong.new.show


Je code en ruby 2.3.3 et je me sert de la lib 'gosu'.
Merci du gros coup de pouce, je créditerais


fleurman - posté le 31/01/2018 à 21:48:45 (50 messages postés)

❤ 0

J'ai mis à jour ma proposition pour prendre en charge les trois suites possibles.

Pour l'utiliser, au lieu d'ajouter la nouvelle valeur à @defausse comme ça:

Portion de code : Tout sélectionner

1
2
3
 
@defausse[0] << val
 



tu fais:

Portion de code : Tout sélectionner

1
2
3
 
suite = addToDefausse(0,val)
 



'suite' sera true si la nouvelle valeur est dans une suite, sinon false.

le mot-clé return permet de mettre fin à un bloc (comme une fonction) en renvoiant optionellement une valeur.

Selon moi, tant que ça fonctionne comme on veut, il n'y a pas besoin d'amélioration. :lol

Tient nous au courant de ton projet.

Au plaisir !


kabu - posté le 31/01/2018 à 22:54:16 (57 messages postés)

❤ 0

Merci, mais j'ai un petit souci, j'ai adopter ta fonction comme ceci:

Portion de code : Tout sélectionner

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
require 'gosu'
 
class Mahjong < Gosu::Window
  def initialize
        @widht  = 640
        @weight = 480
    super @widht, @weight
    self.caption = 'Mahjong'
        @back = Gosu::Image.new("Pictures/back.png", :tileable => true)
        @capital_tuile = [*1..8] + [*9..42] * 4
    @main_des_joueurs = [[],[],[],[]]
        @sel = 0
    @curseur = Gosu::Image.new("Pictures/curseur.png", :tileable => true)
    @curseurx = 190 + 20 * @sel
    @curseury = 410
    @action = 0
    @defause = [[],[],[],[]]
    @com     = [[],[],[],[]]
    @turn = 0
    @joueur = 0
    start
  end
 
#mise a jour du jeu  
  def update
     @sel = 0 if @sel >= @main_des_joueurs[0].size
     @sel = @main_des_joueurs[0].size - 1 if @sel < 0
         @sel -= 1 if Gosu.button_down? Gosu::KB_LEFT 
         @sel += 1 if Gosu.button_down? Gosu::KB_RIGHT 
         @curseurx = 190 + 20 * @sel
         if  Gosu.button_down? Gosu::KB_UP
      @action += 1
      @action = 0 if @action>4
    end
    if  Gosu.button_down? Gosu::KB_DOWN
      @action -= 1
      @action = 4 if @action<0
    end
        core if Gosu.button_down? Gosu::KB_C
  end
  
 #dessin du jeu
  def draw
        @back.draw(0,0,0)
        @curseur.draw(@curseurx, @curseury, 0)
        @actionne = Gosu::Image.new("Pictures/action/#{@action}.png", :tileable => true)
        @actionne.draw(0,0,0)
        affichage(@main_des_joueurs[0], 211.5, 15.5, 0, 0)
        affichage(@defause[0], 211.5, 13, 0, 0)
        affichage(@com[0], 211.5, 11.5, 0, 0)
        affichage(@main_des_joueurs[1], 31.25, 90, -90, 1)
        affichage(@defause[1], 29.75, 90, -90, 1)
        affichage(@com[1], 28.25, 90, -90, 1)
        affichage(@main_des_joueurs[2], 211.5, 0.5, 180, 0)
        affichage(@defause[2], 211.5, 1.5, 180, 0)
        affichage(@com[2], 211.5, 2.5, 180, 0)
        affichage(@main_des_joueurs[3], 1, 90, 90, 1)
        affichage(@defause[3], 2.5, 90, 90, 1)
        affichage(@com[3], 4, 90, 90, 1)
  end
  
  def affichage(tableau, x, y, angle, mode)
  if tableau != nil
        @tuiles = Array.new(tableau.size) do |index|
                   sprite = Gosu::Image.new("Pictures/#{tableau[index]}.png", :tileable => true)
                   sprite.draw_rot(x + 20 * index, 30 * y, 0, angle) if mode == 0
                   sprite.draw_rot(x * 20, y + 23.5 * index, 0, angle) if mode != 0
                end
 end
        end
  
#depard du jeu
  def start
        4.times do |i|
      pioche(13, i)
      fleur(i)
    end
  end
  
#Donne les pions à chaques joueurs    
  def pioche(nb, joueur)
    nb.times do
      index = rand(@capital_tuile.size)
      @main_des_joueurs[joueur].push(@capital_tuile[index])
      @capital_tuile.delete_at(index)
      end
    end
    
#Vérifie la présence de pions particuliers, enlève les pions et compense en piochant    
  def fleur(joueur)
      9.times do |i|
        if @main_des_joueurs[joueur].member?(i)
           @defause[joueur] << i
           @main_des_joueurs[joueur].delete(i)
           while @main_des_joueurs[joueur].length < 13
             pioche(1, joueur)
           end
        end
      end
    end
        
#pour la defausse de pions
  def defausse
    if @joueur == 0 
        suite = addToDefausse(0,@sel)
        @main_des_joueurs[0].delete_at(@sel)
    else
                @a = 5
                while(@main_des_joueurs[@joueur].count(@a) > 1)
                        @a = rand(@main_des_joueurs[@joueur].size)
                end
                suite = addToDefausse(@joueur, @a)
                @main_des_joueurs[@joueur].delete_at(@a)
    end
    @turn += 1
        combine
  end
  
#coeur du jeu
  def core
    @j0 = [0 , 4 , 8  , 12 , 16 , 20 , 24 , 28 , 32 , 36 , 40, 44, 48]
    @j1 = [1 , 5 , 9  , 13 , 17 , 21 , 25 , 29 , 33 , 37 , 41, 45, 49]
    @j2 = [2 , 6 , 10 , 14 , 18 , 22 , 26 , 30 , 34 , 38 , 42, 46, 50]
    @j3 = [3 , 7 , 11 , 15 , 19 , 23 , 27 , 31 , 35 , 39 , 43, 47, 51]
    @j0.size.times do |i|
      if @j0[i] == @turn #J0
        @joueur = 0
      elsif @j1[i] == @turn#J1
        @joueur = 1
      elsif @j2[i] == @turn#J2
        @joueur = 2
      elsif @j3[i] == @turn#J3
        @joueur = 3
      end
    @joueur = 3 if @joueur < 0
    @joueur = 0 if @joueur > 3
  end
  
  case @action
    when 0 #defause
      defausse
    when 1 #selectionner
      @tmp = @main_des_joueurs[0][@sel]
      @main_des_joueurs[0].delete_at(@sel)
      @action = 3
    when 2 #quitter le jeu
      exit
    when 3 #poser le pion
      @main_des_joueurs[0].insert(@sel, @tmp)
      @action = 1
    when 4 #reset
      window = Mahjong.new.show
    end
    
  end
  
#gere les show (by Fleurman)
        def addToDefausse(index,val)
          # ajoute la nouvelle valeur
          @defausse[index].push(val) 
          # retourne false si la table a moins de 3 valeurs
          return false unless @defausse[index].size > 2
          # fait une copie dans une variable temporaire
          tmp = @defausse[index]
          # arrange les éléments de la table par ordre croissant
          tmp.sort!
          # élimine les doublons
          tmp.uniq! 
          # trouve l'index de val
          id = tmp.index(val)
          # test pour id-1,id,id+1
          if id > 0 && id < tmp.size-1
                return true if (tmp[id-1]+tmp[id]+tmp[id+1])-(tmp[id-1]*3) == 3
          end
          # test pour id,id+1,id+2
          if id < tmp.size-3
                return true if (tmp[id]+tmp[id+1]+tmp[id+2])-(tmp[id]*3) == 3
          end
          # test pour id-2,id-1,id
          if id > 1
                return true if (tmp[id-2]+tmp[id-1]+tmp[id])-(tmp[id-2]*3) == 3
          end
          return false
        end
  
#gere les combinaisons du jeu
  def combine
        4.times do |i|
        #gere la paire
                 if @main_des_joueurs[i].count(@defause[@joueur].last) == 1 && @main_des_joueurs[0].count(@defause[0].last) == 0
                                @com[i] << @defause[@joueur].last
                                @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
        #gere le pung
                elsif @main_des_joueurs[i].count(@defause[@joueur].last) == 2 && @main_des_joueurs[0].count(@defause[0].last) == 0
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
        #gere le kong
                elsif @main_des_joueurs[i].count(@defause[@joueur].last) == 3 && @main_des_joueurs[0].count(@defause[0].last) == 0
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        @com[i] << @defause[@joueur].last
                        while(@main_des_joueurs[i].member?(@defause[@joueur].last))
                                @main_des_joueurs[i].delete(@defause[@joueur].last)
                        end
                        @defause[@joueur].pop
                        pioche(1, i)
        #gere le show (en cour)
                
                
                 end
        end
  end
        
end
window = Mahjong.new.show


mais j'ai un code erreur:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
C:/Users/Magic/Desktop/mah-jong/game.rb:160:in `addToDefausse': undefined method `[]' for nil:NilClass (NoMethodError)
        from C:/Users/Magic/Desktop/mah-jong/game.rb:105:in `defausse'
        from C:/Users/Magic/Desktop/mah-jong/game.rb:141:in `core'
        from C:/Users/Magic/Desktop/mah-jong/game.rb:39:in `update'
        from C:/Ruby23/lib/ruby/gems/2.3.0/gems/gosu-0.13.2-x86-mingw32/lib/gosu/patches.rb:56:in `tick'
        from C:/Ruby23/lib/ruby/gems/2.3.0/gems/gosu-0.13.2-x86-mingw32/lib/gosu/patches.rb:56:in `tick'
        from C:/Users/Magic/Desktop/mah-jong/game.rb:225:in `<main>'


Je sais pas comment resoudre ce souci, et une fois que cette fonction sera correct, comment ajouter la valeur rejeter (par exmple 4 si jai 2 et 3 etc...) dans un tableau ?
1000 merci du coup de main


fleurman - posté le 01/02/2018 à 09:06:27 (50 messages postés)

❤ 0

C'est parce que ta variable est '@defause' mais j'ai écris '@defausse' :hihi
Il faut uniformiser le tout...

Je ne comprends pas bien ta dernière question.
Aucune valeur n'est rejetée.
Quand tu appelle la fonction addToDefausse(id,val), la valeur val est premièrement ajoutée à
@défausse[id], puis une valeur est retournée. Cette valeur sera true si la nouvelle valeur est membre d'une suite de trois chiffres consécutifs, sinon false.

Ainsi tu peux faire:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
 
suite = addToDefausse(@joueur, @a)
if suite
  #faire quelque chose quand la nouvelle valeur est membre d'une suite
else
  #faire quelque chose quand la nouvelle valeur n'est pas membre d'une suite
end
 




kabu - posté le 01/02/2018 à 23:15:26 (57 messages postés)

❤ 0

Merci de ton aide, j'ai corriger le petit souci, mais maintenant pour terminer a 100% cette fonction, il faudrait trouver un moyen de faire en sorte que l'IA qui ce trouve à gauche(et uniquement elle) est la possibilité de prendre le pion defauser(par le joueur à sa droite), sa s’appelle un show, l'IA prend le pion en vérifiant qu'il appartiens bien à une suite de valeur qu'elle possède dans son tableau(sa main en gros) et met les 3 valeurs qui ce suivent dans un tableau @com[@joueur] et supprime les 2 valeurs qu'elle avait en main, donc en gros si je defause le 2 et que l'IA possède le 1 et 3 etc.. alors elle prend mon 2, l'injecte dans son tableau @com[@joueur], injecte dans ce même tableau son 1 et 3 puis les supprime de sa main)
https://zupimages.net/up/18/05/1vbv.png

Index du forum > Entraide > [RESOLU] [ruby] Suppresion aléatoire Ruby 2.3.3

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers