I don't believe it is such a bad idea to do it with the computer playing the game many times--probably no more than a couple hundred moves a game so you could play a million games. But if you don't want to do it that way then you could do it like this: start out with 0 on each square except for the first square that has 1. Then put 1/6 on each of the 6 squares following square 1 and make the first square 0. If any of the 1/6's are on a ladder or a snake, then put them at the end of the ladder or snake. You should probably use linked nodes that can also be referenced by array to represent the board. On each iteration, take the value on each square and distribute it evenly over the following 6 squares, accounting for snakes or ladders. (You should use a second board as a buffer for the next step). When a value appears at the finish, you record the value and what iteration it finished at in another array (this second array should be huge, it must have as many elements as the number of game moves you simulate). When, say, 99.9% of the value is at the finish, you terminate. That other array then has the probability distribution of 1 player finishing in x moves if he is playing alone. Then from that array you can find the probability distribution of 2 players (assuming there are 2) finishing in n moves which is what I assume you want.