In Driver, I was considering creating a pseudo-random number between 0
and 4, then using case:
case 0
AssistantViceTentacleAndOmbudsman
case 1
Dragon
case 2
DwarvenAngel
case 3
IntrepidDecomposedCyclist
case 4
TeethDeer
so that the array of Creatures is filled with a variety of monsters
which inherit from Creature. However, there’s gotta be another way.
Perhaps ask Creature what its sub-classes are? Then randomly select
from that list/array of monsters?
puts “\nquantity of creatures:”
numOfCreatures = gets.chomp.to_i
someCreatures = ArrayOfCreatures.new
0.upto(numOfCreatures) do |i|
someCreatures[i]=Dragon.new #what about other
types (children/sub-classes) of creature?
print “\n”
print “someCreatures[”
print i
print “]:\n”
print someCreatures[i].toString
end
In Driver, I was considering creating a pseudo-random number between 0
and 4, then using case:
case 0
AssistantViceTentacleAndOmbudsman
case 1
Dragon
case 2
DwarvenAngel
case 3
IntrepidDecomposedCyclist
case 4
TeethDeer
so that the array of Creatures is filled with a variety of monsters
which inherit from Creature. However, there’s gotta be another way.
Perhaps ask Creature what its sub-classes are? Then randomly select
from that list/array of monsters?
puts “\nquantity of creatures:”
numOfCreatures = gets.chomp.to_i
someCreatures = ArrayOfCreatures.new
0.upto(numOfCreatures) do |i|
someCreatures[i]=Dragon.new #what about other
types (children/sub-classes) of creature?
print “\n”
print “someCreatures[”
print i
print “]:\n”
print someCreatures[i].toString
end
C:\code>
thanks,
Thufir
There are two ways to get a list of subclasses. One is to use
ObjectSpace#each_object, which is kind of messy, and the other is to use
the Creature.inherited hook, to build up the array.
Alternatively, and to add more flexibilty, you could add a creature
weights hash. Eg something like:
class Creature
WEIGHTS = {}
end
class Dragon < Creature
WEIGHTS[self] = 0.5
end
class SomeScaryGuy < Creature
WEIGHTS[self] = 0.25
end
(Doesn’t matter if they don’t add to one)
Or make the weights be dependent on some difficulty setting…
In Driver, I was considering creating a pseudo-random number between 0
and 4, then using case:
case 0
AssistantViceTentacleAndOmbudsman
case 1
Dragon
case 2
DwarvenAngel
case 3
IntrepidDecomposedCyclist
case 4
TeethDeer
so that the array of Creatures is filled with a variety of monsters
which inherit from Creature. However, there’s gotta be another way.
Perhaps ask Creature what its sub-classes are? Then randomly select
from that list/array of monsters?
puts “\nquantity of creatures:”
numOfCreatures = gets.chomp.to_i
someCreatures = ArrayOfCreatures.new
0.upto(numOfCreatures) do |i|
someCreatures[i]=Dragon.new #what about other
types (children/sub-classes) of creature?
print “\n”
print “someCreatures[”
print i
print “]:\n”
print someCreatures[i].toString
end
C:\code>
thanks,
Thufir
There are two ways to get a list of subclasses. One is to use
ObjectSpace#each_object, which is kind of messy, and the other is to use
the Creature.inherited hook, to build up the array.
An example of the Class.inherited method:
class Creature
def Creature.inherited(new_subClass_that_was_defined)
puts new_subClass_that_was_defined
end
end
class Monster1 < Creature
end
class Monster2 < Creature
end
class Monster3 < Creature
end
–output:–
Monster1
Monster2
Monster3
You can save those sub Classes in an array:
class Creature
def Creature.inherited(new_subClass_that_was_defined)
puts new_subClass_that_was_defined
if not defined?(@@subs)
@@subs = []
end
@@subs << new_subClass_that_was_defined
end
def Creature.subs #can access @@subs using: Creature.subs
@@subs
end
end
def Creature.subs #can access @@subs using: Creature.subs
@@subs
end
end
[…]
Ah, thank you for fleshing it out, but is it ok that @@subs isn’t
declared?
I seem to have created multiple threads on this topic, oops. Thank
you everyone for the input, many good ideas and an almost overwhelming
amount of information to absorb
-Thufir
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.