Hi,

ich hab den Code nicht ausprobiert. Gut möglich das da was noch nicht funktioniert.

Zitat Zitat
In das Array kommen alle Bilder rein die ich anzeigen möchte oder?
Jap

Zitat Zitat
Muss ich das für jede Karte machen? Bis jetzt kam es mir so vor, als würde das der Code für alle schon regeln, glaube aber hier etwas arg falsch verstanden zu haben.
Nein, das macht es automatisch für alle Karten. Die map Funktion bildet einen Array (oder eine beliebige andere Collection) auf einen neuen Array ab, in dem es eine Funktion auf jedes Element des Arrays ausführt.
Beispiel: Du hast eine Liste von Zahlen [1,2,3,4,5] und wendest darauf ein map mit der Quadrat-Funktion an. Dann bekommst du eine Liste [1,4,9,16,25] zurück. Vom Code her würde das folgendermaßen aussehen:
Code:
zahlen = [1,2,3,4,5]
# entweder
quadratzahlen = zahlen.map {|x| x**2 }
# oder
quadratzahlen = zahlen.map do |x| 
  x**2 
end

# das ist exakt dasselbe wie
quadratzahlen = []
for zahl in zahlen do
  quadratzahlen << zahl**2
end
Ob du geschweifte Klammern oder do...end benutzt ist egal. Was da zwischen den |...| steht sind die Parameter der Funktion, die du map übergibst.

In dem Beispielcode
Code:
# for each card in the game
@card_sprites = $game_system.memory.get_cards.map do |x, y, image|
  # create a new sprite
  sprite = Sprite.new
  # set its graphic and coordinates
  sprite.bitmap = Cache.picture(image)
  sprite.x, sprite.y = x, y
  # and "return" the sprite into the array
  sprite
end
sagst du: Lege einen Array an: für jede Karte, die $game_system.memory.get_cards zurückliefert, erzeuge einen Sprite, setze dessen x und y Koordinaten auf die Koordinaten der Karte, sowie seine Grafik auf die Grafik der Karte. Füge diesen Sprite dann in den Array ein. Setze am Ende die Variable @card_sprites auf diesen Array.

Der Code ist gleichbedeutend zu
Code:
@card_sprites = []
for x, y, image in $game_system.memory.get_cards do
  # create a new sprite
  sprite = Sprite.new
  # set its graphic and coordinates
  sprite.bitmap = Cache.picture(image)
  sprite.x, sprite.y = x, y
  # and "return" the sprite into the array
  @card_sprites << sprite
end

map gehört zu den Iteratorfunktionen (in anderen Sprachen auch Funktoren genannt). Das sind Methoden, die eine Funktion (also ein Stück ausführbaren Code) als Parameter bekommen.

In meinen Codebeispielen sind noch zwei weitere Iteratorfunktionen: each führt eine Funktion für jedes Element des Arrays aus (ohne dabei aber einen neuen Array zu erzeugen).

each ist identisch mit der For-Schleife.
Code:
zahlen = [1,2,3,4,5]
zahlen.each do |zahl|
  print zahl
end
# ist gleichbedeutend zu
for zahl in zahlen do
  print zahl
end
n.times führt eine Funktion n Mal aus. Sie entspricht einer Zählerschleife in anderen Sprachen.
Code:
5.times do
  print "Hallo Welt"
end
# ist gleichbedeutend mit
for i in 1..5 do
  print "Hallo Welt"
end

# times darf auch die Index-Variable als Parameter bekommen
5.times do |i|
  puts "dies ist die #{i}te Wiederholung
end
# ist gleichbedeutend mit
for i in 0..4 do
  puts "dies ist die #{i}te Wiederholung
end
Das Tutorial ist sehr veraltet und bezieht sich noch auf Ruby 1.8 (und den RPGMaker XP), aber evtl. hilft dir die dortige Erklärung zum Verständnis von Iteratorfunktionen: http://www.rpg-studio.org/scientia/R...2_-_OOP_Teil_2