Ruby-warrior : Teaching AI concepts with Ruby

  • Thread starter Aldric Giacomoni
  • Start date
A

Aldric Giacomoni

I think this project doesn't get enough attention :)
http://github.com/ryanb/ruby-warrior

I've tried it and it's really cool and entertaining. The code is also
pretty cool to look at, and it's got tests and everything.
What is your opinion of it? How far can you go before you have to
actually think? :)
 
B

Benoit Daloze

[Note: parts of this message were removed to make it a legal post.]

Just began and already addicted :D

my lazy fingers found instance_exec very useful ;)
 
R

Ryan Davis

I think this project doesn't get enough attention :)
http://github.com/ryanb/ruby-warrior
=20
I've tried it and it's really cool and entertaining. The code is also
pretty cool to look at, and it's got tests and everything.
What is your opinion of it? How far can you go before you have to
actually think? :)

That looks really really cool. I'll have to play with that this weekend. =
Thanks!
 
T

thunk

You are OFF-TOPIC. I can't say this more plainly: **** OFF.


you really don't want to send a swarm of angry Ru'ids after you...

just look at the swarm power of butterflies:

 
P

Philip Rhoades

People,


Bill Kelly wrote:


Oh, definately, this is probably the best way to teach programing.


I tried cloning the latest git but adding

warrior.rest!

to player.rb and running gave:

Welcome to Ruby Warrior
[1] p - beginner - level 1 - score 0
[2] New Profile
Choose profile by typing the number: 1
Starting Level 1
- turn 1 -
--------
|@ >|
--------
/rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method
`rest!' for #<RubyWarrior::Turn:0x7f5f0ced1a58 @action=nil, @senses={}>
(NoMethodError)
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/units/warrior.rb:12:in
`play_turn'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/units/base.rb:72:in
`prepare_turn'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`each'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:46:in
`times'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:46:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:72:in
`play_current_level'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:63:in
`play_normal_mode'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:23:in
`start'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/runner.rb:17:in
`run'
from /usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/rubywarrior:5


What have I missed?

Thanks,

Phil.
--
Philip Rhoades

GPO Box 3411
Sydney NSW 2001
Australia
E-mail: (e-mail address removed)
 
R

Ryan Davis

People,
=20
=20

=20
=20
I tried cloning the latest git but adding
=20
warrior.rest!
=20
to player.rb and running gave:
=20 ...
./rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method =
`rest!' for #<RubyWarrior::Turn:0x7f5f0ced1a58 @action=3Dnil, =
@senses=3D{}> (NoMethodError)
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/units/war=
rior.rb:12:in `play_turn'
...
What have I missed?

I dunno as I haven't played with the code yet, but you're calling rest! =
on a Turn, not on the Warrior. Make sure your warrior variable (or =
method call result?) is what you think it is.

Make sure you still have something like:

class Player
def play_turn(warrior)
 
B

Benoit Daloze

[Note: parts of this message were removed to make it a legal post.]

Hi,
People,

I tried cloning the latest git but adding

warrior.rest!

to player.rb and running gave:

Welcome to Ruby Warrior
[1] p - beginner - level 1 - score 0
[2] New Profile
Choose profile by typing the number: 1
Starting Level 1
- turn 1 -
--------
|@ >|
--------
./rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method
`rest!' for #<RubyWarrior::Turn:0x7f5f0ced1a58 @action=nil, @senses={}>
(NoMethodError)

What have I missed?

You just can't warrior.rest! on level 1, warrior methods are added level by
level.

And, why would you rest when you can just go straight ahead? ;)

B.D.
 
P

Philip Rhoades

Guys,


I dunno as I haven't played with the code yet, but you're calling
rest! on a Turn, not on the Warrior. Make sure your warrior variable
(or method call result?) is what you think it is.

Make sure you still have something like:

class Player def play_turn(warrior)


I just used something simple above because the example stuff gave me the
same problem - that is, using:

class Player
def play_turn(warrior)
if warrior.feel.enemy?
warrior.attack!
else
warrior.walk!
end
end
end

results in:

Welcome to Ruby Warrior
[1] p - beginner - level 1 - score 0
[2] New Profile
Choose profile by typing the number: 1
Starting Level 1
- turn 1 -
--------
|@ >|
--------
/rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method
`feel' for #<RubyWarrior::Turn:0x7f4c176e0680 @action=nil, @senses={}>
(NoMethodError)
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/units/warrior.rb:12:in
`play_turn'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/units/base.rb:72:in
`prepare_turn'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`each'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:50:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:46:in
`times'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/level.rb:46:in
`play'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:72:in
`play_current_level'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:63:in
`play_normal_mode'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/game.rb:23:in
`start'
from
/usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/../lib/ruby_warrior/runner.rb:17:in
`run'
from /usr/lib/ruby/gems/1.8/gems/ruby-warrior/bin/rubywarrior:5

Not something I was expecting from something that is supposed to help
teach Ruby . .

Thanks,

Phil.
--
Philip Rhoades

GPO Box 3411
Sydney NSW 2001
Australia
E-mail: (e-mail address removed)
 
B

Benoit Daloze

[Note: parts of this message were removed to make it a legal post.]

Guys,

I just used something simple above because the example stuff gave me the
same problem - that is, using:


class Player
def play_turn(warrior)
if warrior.feel.enemy?
warrior.attack!
else
warrior.walk!
end
end
end

results in:


Welcome to Ruby Warrior
[1] p - beginner - level 1 - score 0
[2] New Profile
Choose profile by typing the number: 1
Starting Level 1
- turn 1 -
--------
|@ >|
--------
./rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method
`feel' for #<RubyWarrior::Turn:0x7f4c176e0680 @action=nil, @senses={}>
(NoMethodError)

Not something I was expecting from something that is supposed to help teach
Ruby . .


Well, what do you have in front of you? nothing, so you just need to
warrior.walk!
You'll get the feel method later, you don't need it yet as there is no
enemy. (enemies will be shown on the map)

B.D.
 
P

Philip Rhoades

Benoit,


Guys,

I just used something simple above because the example stuff gave me the
same problem - that is, using:


class Player
def play_turn(warrior)
if warrior.feel.enemy?
warrior.attack!
else
warrior.walk!
end
end
end

results in:


Welcome to Ruby Warrior
[1] p - beginner - level 1 - score 0
[2] New Profile
Choose profile by typing the number: 1
Starting Level 1
- turn 1 -
--------
|@>|
--------
./rubywarrior/p-beginner/player.rb:3:in `play_turn': undefined method
`feel' for #<RubyWarrior::Turn:0x7f4c176e0680 @action=nil, @senses={}>
(NoMethodError)

Not something I was expecting from something that is supposed to help teach
Ruby . .


Well, what do you have in front of you? nothing, so you just need to
warrior.walk!
You'll get the feel method later, you don't need it yet as there is no
enemy. (enemies will be shown on the map)


Thanks - I didn't realise that all the methods were not immediately
available - maybe the script should respond with something nicer than
the ugly error messages in this case?

Regards,

Phil.
--
Philip Rhoades

GPO Box 3411
Sydney NSW 2001
Australia
E-mail: (e-mail address removed)
 
A

Aldric Giacomoni

Philip said:
Thanks - I didn't realise that all the methods were not immediately
available - maybe the script should respond with something nicer than
the ugly error messages in this case?

That's a good idea. If I have time, maybe I'll try to submit a patch..
Or you could directly ask the developer :)
 
R

Robert Dober

Thunk
your threads are fun but I would appreciate if you respected other
threads, not everything can be fun, and you know depending on your
answer I will be treated as a stupid troll feeder or a nice guy, I put
my reputation into your hands, are you going to let me down?

Kind regards
Robert
 
R

Robert Dober

Thunk
your threads are fun but I would appreciate if you respected other
threads, not everything can be fun, and you know depending on your
answer I will be treated as a stupid troll feeder or a nice guy, I put
my reputation into your hands, are you going to let me down?

Kind regards
Robert



--=20
Learning without thought is labor lost; thought without learning is perilou=
s.=94
--- Confucius
 
T

Thiago Massa

[Note: parts of this message were removed to make it a legal post.]

Hahaha, I've been studying alot lately and once I finish my tests I'm
definately trying it out, *I've* been with some idea to create a game where
you program stuff in order to do something but in a way that goes
mainstream(and maybe be a good way to learn how to program).
 
A

akraynov

Hello guys! I consider RubyWarrior may be useful for learning. A have
reached for 6'th level (as beginner).

Now my code looks as following: http://good.net/_5pJ5Rurvz .
I can't understand issue: if i call in method:
def roam_to_combat!
debug("Entering roam_to_combat")
state = :ws_combat
@ini_health = health
debug(@ini_health)
warrior.attack!(cur_dir)
end

then it lacks to execute string "state = :ws_combat".
But if i call
def roam_to_combat!
debug("Entering roam_to_combat")
self.state = :ws_combat # <-- here is difference
@ini_health = health
debug(@ini_health)
warrior.attack!(cur_dir)
end
then it executes "state = :ws_combat" normally.

Why it didn't execute "state =" without "self"?
Is it Ruby's bug?
I got Ruby 1.8 installed.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,197
Latest member
Sean29G025

Latest Threads

Top