Recently I acquired a new board game dubbed Terraforming Mars. The game is developed by Jacob Fryxelius and published by Stronghold Games. It has a price tag of around 60 EUR / 45 USD on Amazon. The game has an impressive rating of 8.4 on BoardGameGeek.com.

The game can be played by 2 to 5 people. The box says a game should take 90 to 120 minutes, but in my experience it’s more like 2 to 3 hours (I’ve played 20+ games so far).

**The objective and how the game is played**

You and your fellow gamers will be assuming the role of big corporations working to … *queue suspense sound effects* … Terraform Mars *fanfare*. Not that surprising really, is it

You start out by having a set production for your corporation, some starting capital and a corporate feat, which may help you throughout the game to a greater or lesser extent.

The games is played in rounds (simulating generations in timespan), where you go through phases of producing resources, buying project options, spending money to built said project or from a set of standard projects. Players take turns performing one or two actions per turn. When everyone is done, the round ends and a new one begins. Each project can have a variety of effects, of which some raises one or more of the three global parameters (oxygen, water and tempetature). When all these parameters reach a set level each, the game ends.

During the course of the game you raise your Terraforming Rating, which ultimately serves as Victory Points. The player with the highest amount of victory points is the winner.

The game is composed of both cards and a board on which you play tiles, thus giving an additional way to interact with other players.

You can find the rules here; Terraforming Mars rules

**Why I love it and what I think makes it great**

Terraforming Mars has me hooked on a number of things, which is why I’ve played more than 20 games in the course of 4 weeks. First off it has a set of really interesting mechanics. I’ve found myself pondering over which projects and actions are the best, what the return on investment is on each, how I should sequence them and lastly what my opponents are doing. I’ve played 2-player games by far the most. Even here the actions taken by my opponent in these games are an important enough factor, that I could never successfully disregard this.

Another interesting thing is that the resources you produce over time enable you to complete more projects, making you produce even more resources over time. Thus building up resource production is the most important thing in the beginning of the game. But when the game end all these resources are worth nothing in terms of winning the game – only Victory Points is – which brings in a whole new aspects of when should you shift your focus from producing resources, to gaining Victory Points.

The setting of the game is great too. It’s really well executed with regards to mechanics and gives a great ambiance to the game as a whole. I’ve caught myself chuckling a few times, when I read the flavor text on a project card and seen how well the story on it supports what it actually does in terms of gameplay.

Complexity wise the game has a lot to offer. More than once I’ve found myself missing things, so if I had to say something negative it’s got to be that the game is best played when you’re not too tired, as it will affect your enjoyment, as misplays will happen more frequently.

Terraforming Mars does have an element of luck, but I’ve never felt that you couldn’t make skill count too. It balances a fine line between skill and chance, and it does it well.

**Ending remarks**

I see myself playing this game over and over, and are trying to find pockets of time during my week constantly.

Terraforming Mars has all the good elements that you could stuff in a box and I am happy to toss countless hours into managing my interstellar corporation for generations to come.

Kudos FryxGames.se on a job well done

]]>The 10,000 app has recieved an update.

I’ve made some improvements to the User Interface, so that buttons will be easier to tell apart from the rest of the UI. There has also been made some modifications to the computer player, so that it will try and score more than you, if you’ve reached 10,000.

I hope you all enjoy it. Go check it out

Best Regards

Lars Sonne

From time to time I’ve made a few PHP pages, for various reasons. Some of these use a MySQL database for storing and retrieving data. When it comes to securing my data and restricting access to editing and deleting functions to me only, I’ve looked at a few simple solutions to the problem. One of the ways I’ve done this, and the one I prefer, is by letting WordPress handle the authentication of the user. The WordPress authentication can probably be bypassed, but since it’s not personal or top secret data, I’ve come to the conclusion that a basic protection is adequate for these data.

**How to do it?**

First off you need to use WordPress own login page and the users you want to let on to the custom page need to have access to log onto the WordPress site you’re using for authentication purposes.

In my PHP code I’ve included the following lines (the page is located in an adjacent directory to the WordPress installation):

require(‘../wp-blog-header.php’);

and

if(is_user_logged_in()) {

// Show the page, since the user is logged in

} else {

// The user is not logged in

}

The inclusion of the wp-blog-header.php file is required if you want to be able to use the method is_user_logged_in(). It is this method that check to see if the user is logged in (surprise, surprise!). Then all I need to do is put the magic inside the curly brackets between the *if* and the *else*. Easy, peasy

**Things that I haven’t checked**

There are some obvious things that I haven’t checked, like if it’s possible to circumvent the authentication and if so how easy it is. I also haven’t looked into the possibility of making a special right for the page, but just given access to any user that can log into the WordPress site that I piggyback my authentication off.

The solution is simple, I know, but it covers the bare minimum I needed for the pages I’ve created. Oh, and any updates to the login procedure is not my headache, since they get handled with the WordPress updates. Which is probably better than what I could piece together on my own anyways

Cheers!

Lars

I’ve released a new version of the 10,000 – The Dice Game app on Google Play. This release features a few things.

- You can now play against the computer
- German translation
- Better randomness of the dice rolls

The option to play against the computer is something that has been on my mind for quite some time and I’m happy to say that the result is now here. The AI proved to be a bit more challenging to implement than I first thought, but from my time in the computer industry I was hardly surprised. Things are in my opinion never straight forward Nevertheless I’m quite pleased with the result.

I’ve aimed for the computer to be beatable but not a walkover, relying on a set of simple rules to govern its behaviour. I also tried to make it animated so you can follow the steps it takes when playing and who knows, maybe you’ll even get a new trick or two. I hope you’ll enjoy it!

Happy rolling

]]>Tell me you don’t recognize the situation; I got some stuff I should do, doesn’t matter if it’s important or just a little thing. I want to do it, and doing it would give me a sense of achievement. If I did it I wouldn’t have it hanging over my head. But somehow I end up putting it off and not having it done by the time I end up going to bed, which these days end up being much later than it should be. Especially considering I got two small kids to take care of.

Why is this? Games. Lots and lots of games. It’s so easy when I settle in front of the computer, which is around 8 PM, when the kids are sleeping. I feel my energy ebbing out, knowing I could be doing things with my time now, that I can’t do during the day, if only I could muster the willpowerΒ … And then it’s just sitting there. That little icon that promises a few minutes of fun. It starts off so innocent and BAM, the evening has passed. The wife and I have an understanding. She likes watching TV, I like my computer games. And we go to bed at the same time. Well used to anyways.

So why is this? Because I’m soft. Because I’ve put myself in a vicious loop where I don’t get enough sleep since I’m up playing games, and I play games since I’m too tired to do anything else. But I know I’m able to change this. I just need to take the first step… And this is it. So tomorrow evening I’ll refrain from clicking that little time consuming icon. If I can’t muster the energy to get the important things done first, then just shut the computer down and go to bed, or read a book, or spend time with my significant other.

So tomorrow I’ll let the Beast sleep.

And who knows, I may even get something done …

About a month ago I released a new version of the 10,000 app. It contained a few things but nothing ground breaking. Nonetheless I had some assumptions about how fast users would upgrade their app, more precisely I expected that 80 to 90 percent would be running the latest version within 30 days of launch.

At the time of writing a little over a month has passed and I have some numbers to reflect on. With a total of about 10,000 active device installs (totally coincidental :)) I think there’s some basis for statistics, which I find interesting.

EDIT: I made a miscalculation the first time I ran through the numbers. I have adjusted this and some of my conclusions has been re examined and adjusted accordingly.

**The numbers**

After 1 day: 15.5 % had upgraded

After 2 days: 28.9 %

After 3 days: 33.7 %

After 4 days: 36.4 %

After 5 days: 38.9 %

After 6 days: 40.0 %

After 1 week: 42.1 %

After 2 weeks: 48.4 %

After 3 weeks: 52.6 %

After 4 weeks: 55.9 %

After 1 month: 56.8 %

What I find interesting is two things.

- The “curve” flattens quicker than I anticipated. After recalculating the numbers it’s not cut in half every day, but the curve still rapidly flattens
- A little over half the devices have been upgraded one month after the release.

**Conclusions**

I’ll be wary of what to conclude based on this, but for future reference I’ll just note that getting a new version out to all users/devices is going to take a lot longer than I first anticipated. If only 3.3 % upgrades every week from now, which is the difference between week 3 and 4, it’ll take more than 4 months total, for all devices to get upgraded.

Just something to think about

]]>I’ve put a new version of “10,000 – The Dice Game” (there’s a link at the bottom of the post) with a few new things in it.

**Bug Fixed!**One of the user, Brian Farmer, took the time to write a review, where he described an error where the game was reset if your screen went to sleep. That bug is now fixed and your game will now live on, while your phone takes a break. Thank you, Brian.

**Cookie Policy.**A popup appears when you start the app for the first time (or the first time after you update to 1.4). This warns the user about the use of cookies and provides a link where they can read more about it. This is a requirement to comply with the European legislation and the Google User Consent Policy. I chose to not restrict the message to EU citizens only.

**Danish Translation.**I am Danish after all, so why not

As the astute reader may have noticed, the Google Play listing has also been changed a bit. A user, Daniel Der, made me aware the a comma is the correct digit grouping sign. That has also been corrected in the game too. Thank you, Daniel.

That is it for now. I’ll be eagerly awaiting the data on how fast the updates are getting to the users and maybe even make a post about that.

Best regards

Lars Sonne

And there’s the link I promised

]]>

I hope you all have been having fun with some Dragons of Tarkir and maybe even some Modern Masters. Personally I’ve only been playing the Khans of Tarkir block lately. And having a ton of fun

I’ve managed to win a few online events. Besides that I feel like I’ve steadily improved my performance, both with regards to deckbuilding and play skills. I can’t say that I’m tearing it up, but my online rating in Limited is above 1700.

The numbers for the last 5 months for the rounds played/won:

Month |
Played |
Won |
Win percentage |

January | 24 | 14 | 58,3% |

February | 22 | 9 | 40,9% |

Match | 13 | 8 | 61,5% |

April | 8 | 6 | 75,0% |

May | 14 | 9 | 64,3% |

… and for matches played/won:

Month |
Played |
Won |
Win percentage |

January | 60 | 33 | 55,0% |

February | 48 | 20 | 41,7% |

Match | 32 | 19 | 59,4% |

April | 17 | 11 | 64,7% |

May | 30 | 19 | 63,3% |

I’ve made a graph of my progress since I started tracking.

The numbers are getting a little low for an actual statistical analysis, but none the less I feel like I’m on the right track. Especially after a dreadful performance in February, where the percentages shows a dip. I’ve mostly been playing in the PPW and Phantom queues, but I still have things to learn every time I play. Most importantly I’ve consistently been asking myself “Do I feel up for 3 hours of Magic?” before I jump in queue and deciding to not do so if I felt that I would perform poorly. That I think has had the most profound effect on my performance.

Until next time, have fun playing

]]>

**The mission**

My goal is that at the end of this post I’ll have a set of formal rules that can be coded into the AI. I want to know what the odds are for scoring when rolling any number of dice and how many points I can expect to score. I also want to make a simple decision tree for when to roll and when not to roll.

**Calculating the odds
**

Since I’m no genius when it comes to statistics, I read a few articles on the dice probabilities at different rolls. For those of you that are interested you can find some mathematics explained here, here and here. These articles give us a basis for determining what the chances are of not being able to score points on a given roll.

In the following I’ll be listing tables showing the number of combinations that score points and the probability of these when rolling X dice (the columns “# successes” and “Success %” respectively). Conversely I’ve also listed the chance of not rolling points (the “Failure %” column). In the first table I’ll assume no 3-of-a-kind has been rolled or what I’d like to call basic probability.

The total number of combinations is calculated as 6^x, where x is the number of dice rolled.

*Basic probability*

Dice |
# Successes |
Success % |
Failure % |

6 | 45.576 | 97,69 % | 2,31 % |

5 | 7.176 | 92,28 % | 7,72 % |

4 | 1.092 | 84,26 % | 15,74 % |

3 | 156 | 72,22 % | 27,78 % |

2 | 20 | 55,56 % | 44,44 % |

1 | 2 | 33,33 % | 66,67 % |

When rolling 1, 2 or 3 dice it also becomes relevant if there has been rolled 3-of-a-kind previously, since it increases your odds of rolling dice that can score points. In the second table I’ll assume that there has been rolled 3-of-a-kind of 2’s, 3’s, 4’s or 6’s, since these affect the odds.

*3-of-a-kind already rolled*

Dice |
# Successes |
Success % |
Failure % |

3 | 192 | 88,89 % | 11,11 % |

2 | 27 | 75,00 % | 25,00 % |

1 | 3 | 50,00 % | 50,00 % |

**Diving deeper into the combinations**

These odds can be divided further into the different combinations of dice. I’ll list a separate table for every number of dice rolled, sorted by their success probability in ascending order. The column “Combinations” is the name of the combination you scored. “# Successes” and “Success %” express the same as before.

The row “Two 3-of-a-kind” have been included since we use all the dice and unlock all 6 on successive rolls. The row “1 or 5” is for the cases when none of the other combinations occurs.

*Rolling 6 dice*

Combinations |
# Successes |
Success % |

6-of-a-kind | 6 | 0,01 % |

5-of-a-kind | 180 | 0,39 % |

Two 3-of-a-kind | 300 | Β 0,64 % |

Straight | 720 | Β 1,54 % |

Three pairs | 1.800 | Β 3,86 % |

4-of-a-kind | 2.250 | Β 4,82 % |

3-of-a-kind | 14.400 | Β 30,86 % |

1 or 5 | 25.920 | Β 55,56 % |

If you sum up “# Successes” you’ll luckily end up with 45.576, which is the same number as listed in the basic probability table above. In the next two tables the process is repeated for four or five dice.

*Rolling 5 dice*

Combinations |
# Successes |
Success % |

5-of-a-kind | 6 | 0,08 % |

4-of-a-kind | 150 | 1,93 % |

3-of-a-kind | 1.500 | 19,29 % |

1 or 5 | 5.520 | 70,99 % |

*Rolling 4 dice*

Combinations |
# Successes |
Success % |

4-of-a-kind | 6 | 0,46 % |

3-of-a-kind | 120 | 9,26 % |

1 or 5 | 966 | 74,54 % |

The next three tables are for rolling one, two or three dice without having rolled a 3-of-a-kind previously.

*Rolling 3 dice*

Combinations |
# Successes |
Success % |

3-of-a-kind | 6 | 2,78 % |

1 or 5 | 150 | 69,44 % |

*Rolling 2 dice*

Combinations |
# Successes |
Success % |

1 or 5 | 20 | 55,56 % |

*Rolling 1 dice*

Combinations |
# Successes |
Success % |

1 or 5 | 2 | 33,33 % |

You could also be rolling one, two or three dice when you’ve already rolled 3-of-a-kind. The following tables shows, where I’ve added the row “Add to 3-of-a-kind” for this. Remember the odds only change when the 3-of-a-kind is 2’s, 3’s 4’s or 6’s.

*Rolling 3 dice with 3-of-a-kind already rolled
*

Combinations |
# Successes |
Success % |

3-of-a-kind | 5 | 2,31 % |

Add to 3-of-a-kind | 91 | 42,13 % |

1 or 5 | 96 | 44,44 % |

*Rolling 2 dice with 3-of-a-kind already rolled
*

Combinations |
# Successes |
Success % |

Add to 3-of-a-kind | 11 | 30,56 % |

1 or 5 | 16 | 44,44 % |

*Rolling 1 dice with 3-of-a-kind already rolled
*

Combinations |
# Successes |
Success % |

Add to 3-of-a-kind | 1 | 16,67 % |

1 or 5 | 2 | 33,33 % |

This covers the odds for every combination of dice.

**Weighting the odds**

We now have some probabilities down that we can use to guide our decisions (and the AI’s) on whether or not we want to roll the dice at any given point. However if you just decided to roll based on the probability of scoring alone, you would not be playing optimally i.e. scoring the most points.

Enter Expected Value and Opportunity Cost.

*So what is this?*

Expected Value (or EV) is the value we statistically can anticipate getting over the long run from our roll. In this case the score we can add on average. The Opportunity Cost is the value we give up by rolling; being the points we could have banked instead of rolling.

*How do we use that when deciding whether or not to roll?*

What we basically want to be doing is weighting out the two, by saying if my opportunity cost greater than my EV, I shouldn’t roll. But why is this correct? Let’s take an example. You have one dice left and have already scored a 1, a 5 and 3-of-a-kind of 2’s. Your chance of rolling and scoring is 50%. You could either be rolling a 1 scoring 100, a 5 scoring 50 or a 2 scoring 200 more. This would give you an average score of 116,67, but only on 50% of your rolls, giving you an EV of 58,33. Your opportunity cost is your current unbanked points of 350 times the chance you’ll miss out on points on the next roll giving you 116,67. Since the opportunity cost is greater than the EV you should be banking instead of rolling here.

To put it simply:

If EV > Opportunity cost, then roll.

Otherwise bank the points.

This is not the complete answer though. It would be if we always banked after this roll, but we could choose to roll again and again. Therefore we need to factor in the EV of successive rolls, at least to some extent. But how do we do this, since you can score and therefore remove a different number of dice after each roll? Iβm certain that smarter and more mathematically experienced people would be able to solve this puzzle, but I accepted that the heuristic Iβm building will not guarantee that the optimal solution would be found every time, which I why Iβll believe I could employ a short cut here. Calculate the chance of having scored all six dice at the end of the roll when rolling any number of remaining dice. Then weight this by multiplying by the EV of rolling all six dice. This post is however getting quite lengthy, so I’ll save this part for now.

**The Expected Value of a roll**

Working on the combinations I listed earlier I will now map out the EV of every combination on every number of dice rolled. By doing this we get the last set of numbers we need to make an equation for when to roll and when to not. The assumption is that you’ll score the maximum number of dice.

*Rolling 6 dice*

Combinations |
EV |

6-of-a-kind | 2.000 |

5-of-a-kind | 1.525 |

Two 3-of-a-kind | 1.000 |

Straight | 1.000 |

Three pairs | 750 |

4-of-a-kind | 1.050 |

3-of-a-kind | 575 |

1 or 5 | 156 |

*Rolling 5 dice*

Combinations |
EV |

5-of-a-kind | 1.500 |

4-of-a-kind | 1.025 |

3-of-a-kind | 550 |

1 or 5 | 139 |

*Rolling 4 dice*

Combinations |
EV |

4-of-a-kind | 1.000 |

3-of-a-kind | 525 |

1 or 5 | 121 |

*Rolling 3 dice*

Combinations |
EV |

3-of-a-kind | 500 |

1 or 5 | 105 |

*Rolling 2 dice*

Combinations |
EV |

1 or 5 | 90 |

*Rolling 1 dice*

Combinations |
EV |

1 or 5 | 75 |

*Rolling 3 dice with 3-of-a-kind already rolled
*

Combinations |
EV |

3-of-a-kind | 500 |

Add to 3-of-a-kind | 3-of-a-kind value * 108/91 |

1 or 5 | 105 |

The fraction in the “Add to 3-of-a-kind” is to account for doubles and triples. I counted these by hand.

*Rolling 2 dice with 3-of-a-kind already rolled
*

Combinations |
EV |

Add to 3-of-a-kind | 3-of-a-kind value * 12/11 |

1 or 5 | 94 |

*Rolling 1 dice with 3-of-a-kind already rolled
*

Combinations |
EV |

Add to 3-of-a-kind | 3-of-a-kind value |

1 or 5 | 75 |

That should be enough numbers to feed into the equation.

*What if any kind of special rules take effect when playing the last round?*

During the last round we could use the equation, but it is not enough to bank any number of points. It only matters if your total score exceeds that of all of your opponents. A simple solution is to keep rolling until you have more points (both banked and unbanked) than your opponent.

Put simply:

If banked + unbanked points <= opponents score, then roll.

Otherwise bank

That should be enough to implement a set of rules for the AI.

]]>After being in hiatus for quite some time I’ve gotten back to programming a bit. I guess there is an ebb and flow with everything.

Back in November I was looking into how I could be Building an AI with ASyncTask, but I never got to feed the thing some rules with regards to how to play the game. This I aim to remedy now. Since this could get pretty lengthy I’m planning a short series as I go though the process of building an AI for the dice game “10.000”.

**Choosing a method for problem solving**

Building an AI can be done in different ways. I haven’t explored the topic that much, but I could see going about problem solving in different ways; neural networks or some other kinds of fuzzy logic, search algorithms or a basic heuristic. I do however have some programming experience with heuristics and I believe that, since we’re talking about a limited problem space like this a heuristic can do the job just fine.

One of the issues at hand is whether or not we want to get the optimal solution i.e. winning as fast as possible. I can see an argument for building an AI that can do this, but I don’t think it would be very fun to play against. The probability built into the game somewhat remedies this, but the AI should strike a balance between being challenging to play against and still being beatable. Another plus for using a heuristic is that they can be made to give us an answer in short time consistently, thus giving the user a better experience.

**A basic set of rules
**

When implementing the heuristic I need to come up with some rules that it will consist of. In principle I want the AI mimics the process of a human player asking himself a set of questions at every decision point during his turn and answering them based on a predefined logic (as humans we have the advantage of being able to adjust our evaluation during a game, whereas my AI will have a fixed set of rules).

Questions you could be asking yourself?

- What is the probability of being able to make points with X dices?
- What is the reward for rolling the dices?
- What is the risk for rolling the dices?
- Is it the last round and do I have the most points?

Joining these together my heuristic becomes:

*Rule A)* If my chance of success times the reward for rolling the dices is bigger than the chance of failure times the risk, then roll the dice. Otherwise bank the points (if able)

*Rule B)* If it is the last round and I haven’t got the most points, then keep rolling.

**What remains to be done?**

For now I’ve established a basic set of rules. To determine whether or not the AI should keep rolling I need to feed some numbers into rule A. These numbers I’ll try and calculate in my next post using statistical analysis.

That’s it for now

EDIT: To read part 2 go here.

]]>