I am writing a game in Objective C/cocos2d where a newspaper is a central part of what controls or rather effects the game's world economy as well as what a city might do (such as increase X, reduce Y)

The newspaper is a bit like a "Chance card" in Monopoly, it has an effect on something.

My question is, what is the best way to do write a newspaper that has both a random and specific effect within the game.

Would the best strategy be to write out all the things a newspaper can affect, a PLIST of headlines (with placeholders).

I think Tiny Tower uses a PLIST of events and it randomly picks an event, but I'm not sure how it actually parses it because certain events do different things.

But then how do I parse all the scenarios that a newspaper can deliver? A big switch statement seems very long and complicated to do.

I am wondering if there is a simpler way to handle this kind of thing.

Related to this is that there might be no news that day and I'm not sure what the newspaper should display, should it just display the last headline?

So, in summary.

1) A newspaper generates a headline, it affects different things, such as the world economy, prices, how city reacts

2) I need the newspaper to generate headlines (although there may be days when there are no headlines at all), but I am not sure how to parse it without using a big-ass switch statement.

Thanks in advance.

  • 2
    \$\begingroup\$ There isn't a best way. You have a lot of design choices available, and the good ones will each leave their own mark on how the game works. It's up to you to pick how they should work in order to make the game work the way you want it to. \$\endgroup\$ Oct 11, 2012 at 13:31
  • \$\begingroup\$ I agree. Just test, fail, repeat until it sorta works. \$\endgroup\$
    – zardon
    Oct 11, 2012 at 15:21

1 Answer 1


In order to "parse it without a big-ass switch statement" you'd use functors AKA function pointers. But since you do not mention which language you are using (PLISTS -> Objective C?) I cannot tell you whether you have those available in your language of choice.

Here is an article on how function pointers work (Objective C).

If you are using a language which does not support function pointers, then you would use the Strategy Pattern instead.

  • \$\begingroup\$ All you need is some "type" ID, and a Dictionary associating each type with some method. Now pass all data to that method: result = methodsDictionary[data.type](data);. \$\endgroup\$ Oct 11, 2012 at 14:28
  • \$\begingroup\$ Sorry, I was not clear about the language, this is my fault. I am using Objective C \$\endgroup\$
    – zardon
    Oct 11, 2012 at 15:19
  • \$\begingroup\$ I am playing with a test of PLISTs to hold all my stories for different categories and then use randomization to pick the story, city, product or whatever it is that I am affecting. But I am not sure if this is right, sure its random but it feels wrong somehow \$\endgroup\$
    – zardon
    Oct 11, 2012 at 15:21
  • \$\begingroup\$ As @JonathanHobbs said -- how can we possibly know? What does "it feels wrong somehow" mean? You're speaking to industry professionals here, so try to be explicit: We're giving up our time to assist you. Also, "PLIST" is a very specific term and means nothing in the broader scheme; I work with many languages and platforms, but not including Objective C. Do you mean text files? If so, the benefit to loading information in from outside of your codebase is that you need not recompile when you want to change that information. If it's in code, you'll have to recompile each time you change it. \$\endgroup\$
    – Engineer
    Oct 11, 2012 at 17:23
  • \$\begingroup\$ @zardon I've assisted you with that part of your question which was concrete, and thus answerable. You will need to make your own decisions on design. If you want a single, concrete question answered, this is the site for you. Otherwise, a forum is a better choice. \$\endgroup\$
    – Engineer
    Oct 11, 2012 at 17:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .