Making a text-based adventure game

March 10, 2020

In this post I will show you how to make a ruby project.

Go to a coding platform. Make a new folder and call it adventure.rb. Let’s start off with a variable. Enter this into the code

places = [
  "airport",
  "train station",
  "hedge maze",
  "road"
]

So this is cool but we never use it anywhere. Add this to the code

puts "You are going to the " + places.sample + "."

Here we are putting a sample/random item from the array we made, but what if we wanted to use the place we are at in the story line? Add this before the puts:

place = places.sample

Then replace:

puts "You are going to the " + places.sample + "."

With:

puts "You are going to the " + place + "."

And now we can know which place we go to. Now we can do this:

puts "On the way to the " + place + ", you see a chicken."

With this these will put at around the same time. To fix this, between:

puts "You are going to the " + place + "."

And:

puts "On the way to the " + place + ", you see a chicken."

Add:

sleep(1)

Let’s test these out. Go to terminal

cd ~/  //plus the folder adventure.rb is in

Then to run it

ruby ./adventure.rb

You should see:

You go to the {insert place here}.
On the way to the {insert place here}, you see a chicken.

Obviously the {insert place here} would be: hedge maze, airport, train station or road. One thing though… on the way to an airport you would probably not see a chicken. So lets make some variables up at the top:

airport = {

}

train_station = {

}

hedge_maze = {

}

road = {

}

Add some content:

airport = {
  animal: "stray dog"
}

train_station = {
  animal: "bird"
}

hedge_maze = {
  animal: "cow"
}

road = {
  animal: "squirrel"
}

Now how would we find the animal based on the place… Functions! Let’s make a findAnimal function:

def find_animal(place, airport, train_station, hedge_maze, road)
  if var == "airport"
    airport[:animal]
  elsif var == "train station"
    train_station[:animal]
  elsif var == "hedge maze"
    hedge_maze[:animal]
  elsif var == "road"
    road[:animal]
  end
end

So this checks what place is and returns the correct animal. Now let’s replace

puts "On the way to the " + place + ", you see a chicken."

With:

puts "On the way to the " + place + ", you see a " + find_animal(place, airport, train_station, hedge_maze, road) + "."

Checking your code.

We have gotten the start of the adventure made. Let’s make sure we did it right. Is this your code:

places = [
  "airport",
  "train station",
  "hedge maze",
  "road"
]

airport = {
  animal: "stray dog"
}

train_station = {
  animal: "bird"
}

hedge_maze = {
  animal: "cow"
}

road = {
  animal: "squirrel"
}

def find_animal(place, airport, train_station, hedge_maze, road)
  if var == "airport"
    airport[:animal]
  elsif var == "train station"
    train_station[:animal]
  elsif var == "hedge maze"
    hedge_maze[:animal]
  elsif var == "road"
    road[:animal]
  end
end


place = places.sample
puts "You are going to the " + place + "."
sleep(1)
puts "On the way to the " + place + ", you see a " + find_animal(place, airport, train_station, hedge_maze, road) + "."

If not then you can just copy and paste by highlighting the text and pressing (command) and C then going to your code and pressing ⌘ and V.