Since you were a very young rabbit in little cotton pants, Dwemthy's Array has breathed on your neck and you're tired of it. You draw your glistening Hero's Sword from its sheath and cut a low-circling falcon in half as a confidence building exercise. Your eyes flick about in a cool and freaky way.
You're ready... It's time to stare this construct in the face.
$$$ DWEMTHY_S ARRAY ^!^ A RUBY MINI_DUNGEON ^!^ CODE TO KILL BY $$$
The sixth chapter of Why's (Poignant) Guide to Ruby is on its way. This chapter covers metaclasses and method_missing with the help of Dwemthy's demonic list. The code for the little RPG is now available. A full explanation is forthcoming in chapter six.
Jacob Fugal wrote: > Is it just me or is the DwemthysArray symbol never defined on that
>page? I defeated the ScubaArgentine and am eager to fight the Dragon!
Well done, hero. You have discovered a weakness in Dwemthy's Array!! This has been a crucial part of your training. You have learned to spot omissions in the mechanisms of life!! ANd you have charged up to the great god of the sky and thrust your javelin in the sky and bellowed great screams, chiding the powers of speed and atmosphere, that you will not accept this, that your honor and nobility is owed far greater than this!!
Well done, I say. Raise a chalice of valor!! Let the mead flow thickly through our devoursome fingers and ankle beards!!
In article <50756767050323100730f7f...@mail.gmail.com>, Jacob Fugal <lukf...@gmail.com> wrote:
>On Thu, 24 Mar 2005 02:11:29 +0900, why the lucky stiff ><ruby-t...@whytheluckystiff.net> wrote: >> You're ready... It's time to stare this construct in the face.
>> $$$ DWEMTHY_S ARRAY ^!^ A RUBY MINI_DUNGEON ^!^ CODE TO KILL BY $$$
>Is it just me or is the DwemthysArray symbol never defined on that >page? I defeated the ScubaArgentine and am eager to fight the Dragon!
No one knows how those hideous creatures got in DwemthysArray and no one knows where DwemthysArray comes from either.
...yeah, I ran into the same problem.
How about:
dwar = [IndustrialRaverMonkey.new, DwarvenAngel.new, AssistantViceTentacleAndOmbudsman.new, TeethDeer.new, IntrepidDecomposedCyclist.new, Dragon.new]
dwar.each {|creature| r ^ creature
}
...but I get:
[Rabbit is too dead to fight!] [Rabbit is too dead to fight!] [Rabbit is too dead to fight!] [Rabbit is too dead to fight!] [Rabbit is too dead to fight!] [Rabbit is too dead to fight!]
No doubt _why has put some magic in DwemthysArray that we're missing.
> No doubt _why has put some magic in DwemthysArray that we're missing.
He has that cool method_missing stuff where the method you are trying to use against his array is sent to the first item in the array. If the life trait runs out of the entry he shifts it out and brings on the next one. It is a nice little idiom -- I like it.
Of course the only way I could beat the array was with a little smoke and mirrors:
Oh btw, if you keep at it the DwemthysArray gets a little nasty sending messages to Nil and nil does not seem to appreciate the extra attention. So a minor change like below seems to help.
Thanks as always for the enjoyable read, yours is one of the more interesting ways to introduce people to Ruby.
Patrick
*** dwemthy-orig.rb Wed Mar 23 14:33:52 2005 --- dwemthy.rb Wed Mar 23 15:20:07 2005 *************** *** 64,76 **** alias _inspect inspect def inspect; "#<#{ self.class }#{ _inspect }>"; end def method_missing( meth, *args ) answer = first.send( meth, *args ) ! if first.life <= 0 ! shift ! if empty? ! puts "[Whoa. You decimated Dwemthy's Array!]" ! else ! puts "[Get ready. #{ first.class } has emerged.]" end end answer || 0 --- 64,80 ---- alias _inspect inspect def inspect; "#<#{ self.class }#{ _inspect }>"; end def method_missing( meth, *args ) + if empty? + puts "[Quit flogging my dead monsters!]" + else answer = first.send( meth, *args ) ! if first.life <= 0 ! shift ! if empty? ! puts "[Whoa. You decimated Dwemthy's Array!]" ! else ! puts "[Get ready. #{ first.class } has emerged.]" ! end end end answer || 0
> Since you were a very young rabbit in little cotton pants, Dwemthy's > Array has breathed on your neck and you're tired of it. You draw your > glistening Hero's Sword from its sheath and cut a low-circling falcon in > half as a confidence building exercise. Your eyes flick about in a cool > and freaky way.
I think you missed he was using the lettuce on himself (rabbit on rabbit action for those of you into that sort of thing). So he was boosting his life before he started on any of the guys in the array.
On Fri, 25 Mar 2005 04:28:44 +0900, Shalev NessAiver
> I think you missed he was using the lettuce on himself (rabbit on > rabbit action for those of you into that sort of thing). So he was > boosting his life before he started on any of the guys in the array.
> On Fri, 25 Mar 2005 04:28:44 +0900, Shalev NessAiver > <sha...@simplyphysics.com> wrote: >> Except that that doesn't always work. You'll still die some of the >> time.
>> It may be better to switch over to more damaging weapons somewhere >> down >> the line. >> (After you've gotten a bunch of life from the early guys).
>> -Shalev
>> On Mar 24, 2005, at 8:58 AM, Brian McCallister wrote:
>>> r = Rabbit.new >>> 1000000.times { r % r }
>>> is maybe a bit less of a hack ;-)
>>> technically
>>> maybe
>>> -Brian
>>> On Mar 23, 2005, at 8:52 PM, Shalev NessAiver wrote:
>>>> On Mar 23, 2005, at 7:32 PM, why the lucky stiff wrote:
>>>>> ALls I can say is: you sure skipped a lot of lettuce-eating.
>>>>> _why
>>>> Yeah, I figured that part out. The only way is to frngllheeg aahhh >>>> help- askdfjj.
>>>> [ Sorry about that folks, Shalev was called away on an emergency. >>>> Go back to your normal lives people. ]
I have a couple of things to share with the crazy Ruby meta-dungeon-programmeering community.
First, I found this cheat code on the internet: class Rabbit # you can defeat enemies easily with the # secret cheater's laser gun def =~( enemy ) fight( enemy, 2691 ) end end
It reminds me of the little laser soldiers in Age of Empires.
It allows the Rabbit to laser things to death like this:
> r=~ Dragon.new
[You hit with 2181 points of damage!] [Dragon has died.] #<Dragon:0x2ac8dc8 @life=-841, @weapon=939, @charisma=1020, @strength=451>
And sometimes like this, which isn't as good for the Rabbit:
> r =~ Dragon.new
[You hit with 368 points of damage!] #<Dragon:0x2abf288 @life=972, @weapon=939, @charisma=1020, @strength=451> [Your enemy hit with 699 points of damage!] [Rabbit has died.]
Secondly, I put together this strategy that any Rabbit can use to defeat DwemthysArray 1.0, without using lasers or anything dodgy like that. # requires Patrick Hurley's [Quit flogging my dead monsters!] patch # to DwemthysArray to work properly class Rabbit def battle( enemy ) stats = Hash.new(0) while enemy.life > 0 || self.life <= 0 weapon = if self.life <= 0 then :% elsif enemy.life % 10 >= 5 then :/ elsif bombs and rand < (0.1) then :* else :^ end send weapon, enemy stats[weapon] += 1 end total = 0 stats.each_pair do |weapon, uses| puts "[#{ self.class } used #{weapon} #{uses} times]" total += uses end puts "[#{ self.class } attacked a total of #{total} times in that battle.]" end end
Output:
> r.battle DwemthysArray.new
... [Rabbit is too dead to fight!] [Healthy lettuce gives you 42 life points!!] [You hit with 1 points of damage!] [Dragon has died.] [Whoa. You decimated Dwemthy's Array!] #<DwemthysArray[]> [Quit flogging my dead monsters!] [Quit flogging my dead monsters!] [Rabbit used / 79 times] [Rabbit used % 101007 times] [Rabbit used * 3 times] [Rabbit used ^ 89 times] [Rabbit attacked a total of 101178 times in that battle.] => nil irb(main):012:0> r => #<Rabbit:0x2ab9b88 @life=4, @weapon=4, @bombs=2, @charisma=44, @strength=2>
And finally, I would also propose the following patch, to stop the Rabbit's ability to eat when he or she is dead, but it makes the game too difficult: --- rabbit.rb +++ rabbit.rb @@ -18,6 +18,10 @@ # lettuce will build your strength and extra ruffage # will fly in the face of your opponent!! def %( enemy ) + if life <= 0 + puts "[You are beyond the help of the healthy lettuce.]" + return + end lettuce = rand( charisma ) puts "[Healthy lettuce gives you #{ lettuce } life points!!]" @life += lettuce