[#398788] Constructor or a Method — Rubyist Rohit <lists@...>

Take for instance this code:

13 messages 2012/09/01

[#398896] how to sum element of array — Edward QU <lists@...>

dear all

19 messages 2012/09/04

[#398936] best coding for limiting a value — Regis d'Aubarede <lists@...>

A) result=value<min ? min : (value > max ? max : value)

17 messages 2012/09/04

[#398962] Long calculation & time limit — toto tartemolle <lists@...>

Hello,

17 messages 2012/09/05

[#398997] OpenURI open method problem — "Derek T." <lists@...>

The code I am referring to looks like this:

12 messages 2012/09/05

[#399002] Parsing through downloaded html — Sybren Kooistra <lists@...>

Hi all,

28 messages 2012/09/06

[#399012] "Hiding" pictures(and source code if it's possible) — "Damián M. González" <lists@...>

Ey guys, how are you?

11 messages 2012/09/06

[#399083] regix in grep or something like this — Ferdous ara <lists@...>

Hi

12 messages 2012/09/07

[#399206] please help me with making script — Charmaine Willemsen <lists@...>

In this example i like to parse birthday and sexe

11 messages 2012/09/11

[#399218] Pathname#to_str withdrawn in 1.9? — matt@... (Matt Neuburg)

Just getting started experimenting with Ruby 1.9 (1.9.3) and my scripts

13 messages 2012/09/12

[#399227] Breaking Down the Block — incag neato <lists@...>

Can someone please explain in plain english how this block treats the

20 messages 2012/09/13

[#399244] ruby Range to array that acts like time objects? — "Jermaine O." <lists@...>

Hello everybody,

15 messages 2012/09/13

[#399293] Ruby on Ubuntu 12.04 LST — Bojan Jordanovski <lists@...>

Hello everybody,

13 messages 2012/09/14

[#399298] wow, YAML / Psych in 1.9.3 is *slow*! — matt@... (Matt Neuburg)

I just started trying Ruby 1.9.3, coming from Ruby 1.8.7, and was

12 messages 2012/09/14

[#399304] Ruby 1.9.3 and OS X Mountain Lion — sto.mar@...

Hi all,

16 messages 2012/09/14

[#399343] Class variables or Class singleton variables? — "Damián M. González" <lists@...>

Guys, how are you?

18 messages 2012/09/15

[#399386] Ruby - is it worth the effort? — neomex <neomex@...>

Hello,

19 messages 2012/09/17
[#399406] Re: Ruby - is it worth the effort? — Roger Pack <lists@...> 2012/09/17

Unfortunately with Ruby for me it's typically "fun and fast development"

[#399409] Re: Ruby - is it worth the effort? — Peter Zotov <whitequark@...> 2012/09/17

Roger Pack писал 17.09.2012 22:06:

[#399491] Re: Ruby - is it worth the effort? — Robert Klemme <shortcutter@...> 2012/09/19

On Mon, Sep 17, 2012 at 8:20 PM, Peter Zotov <whitequark@whitequark.org> wrote:

[#399421] Encoding question — Thomas Bednarz <lists@...>

I am new to ruby and play around with it a little bit at the moment. I

17 messages 2012/09/17

[#399441] Bug or feature — Damjan Rems <lists@...>

There has probably been some discussion about this problem so sorry if I

13 messages 2012/09/18

[#399451] Class variables — Aleksander Ciesielski <neomex@...>

Is it obligatory to use instance variables in classes? Can't we just

17 messages 2012/09/18

[#399479] Ruby SQL Select Sum 2 Columns? — Courtney Fay <lists@...>

I have the following definition which is looking at an apache database,

12 messages 2012/09/18

[#399556] still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...>

Hi,

28 messages 2012/09/20
[#399570] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/20

[#399574] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Henry Maddocks wrote in post #1076876:

[#399575] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/21

[#399576] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Could you be so kind as to suggest another book? I mean there are many

[#399585] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Sebastjan H. wrote in post #1076909:

[#399572] How would you allow variable from specific list of Fixnum? — Eliezer Croitoru <eliezer@...>

I have:

11 messages 2012/09/21

[#399623] Very important question - survey — Marc Heiler <lists@...>

Is matz more like a ninja or more like a samurai?

11 messages 2012/09/22

[#399695] inject problem — Roelof Wobben <rwobben@...>

26 messages 2012/09/25

[#399714] could initialize return an existing object instead of a new instance? — Gary Weaver <lists@...>

Is it possible for initialize to return an existing object instead of a

9 messages 2012/09/25

[#399811] Good book for getting started with Ruby? [I code Python!] — Alec Taylor <alec.taylor6@...>

I've learned programming in C++, Python and PHP at University. (also

12 messages 2012/09/28

[#399815] calcaulation with unknown numbers of numbers and options fail — Roelof Wobben <rwobben@...>

11 messages 2012/09/28

Re: still learning by doing - connecting rooms in a game

From: Jes俍 Gabriel y Gal疣 <jgabrielygalan@...>
Date: 2012-09-24 20:05:19 UTC
List: ruby-talk #399681
On Mon, Sep 24, 2012 at 8:46 PM, Sebastjan H. <lists@ruby-forum.com> wrote:
> Thank you all for recommending the reading and all the suggestions and
> advices. According to those I'll try to re-factor the game like so:
>
> 1. Have one class for Room and then have subclasses for specific rooms.
> 2. Make a map of the rooms in one of the forms suggested above.
>
> I still have difficulties imagining hot to resolve the interaction
> between certain objects.
>
> For example, I wanted to have the kitchen and the dinning room play out
> like so:
>
>         a) room description
>         b) have the player decide whether or not they take some stuff
>         c) second description, prologue to fight
>         d) fight with a zombie
>         e) exit the room

It looks that there is a common algorithm for handling all rooms, so
this algorithm should be implemented only once, maybe in a parent
class of all rooms. It can delegate to the actual implementation of a
room the things related to data: does this room have items to pick?,
the descriptions, the monster and the connections to other rooms. Then
you run this algorithm from a specific room against the player that
enters the room. An example:

class Room

def player_enter player
  puts first_description
  if has_items? #maybe you could check the return of items instead of
having this method
    puts "This is what you can find in the room: #{items}"
    # perform the logic for the player to choose or not to pick
  end
  puts second_description
  if has_monster?
    fight player, monster
  end

  puts "Choose a door:"
  connections.each {|c| print the connection }
  ..
end

And then a specific room just implements the required methods:

class DiningRoom < Room
  def first_description
    "a typical dining room"
  end
  def has_items?
    true
  end
  def items
    [:gun, :bullets]
  end
  def second_description
    "you hear a strange sound coming from the dark corner"
  end
  def has_monster?
    true
  end
  def monster
    Zombie.new :hp => 100, :power => 5 #or however you instantiate zombies
  end
end

BTW, this pattern is called Template Method:
http://en.wikipedia.org/wiki/Template_method_pattern

> If I have all this in the room.state() I can't reference the player
> object since I get the undefined local variable or method for player.

I think the method that runs the algorithm could receive the player as
an argument.

> So I assume I should put any decision making or fighting in the "runner"
> file since the runner knows about all the objects and have the
> room.state contain only the description?

Well, the algorithm to go through a room can very well be in other
object other than a parent of all rooms, but still the above applies:
implement in each room the specifics of the room, putting the
algorithm in a single place.

> If there is another way I can reference these objects? If I initialize
> an object like player in the room itself it is again limited to the room
> in question, right?

I don't think the Room is the right place to initialize the player
object. The player object probably belongs to a Game object or such.
What you can do is pass the appropiate objects where they need to be
used.

Jesus.

In This Thread