Snake and ladder: Difference between revisions
Content added Content deleted
m (→{{header|C sharp|C#}}: Fixed bug where only first variable was referenced in output) |
|||
Line 1,625: | Line 1,625: | ||
ReadChar |
ReadChar |
||
END SnakeAndLadder.</lang> |
END SnakeAndLadder.</lang> |
||
=={{header|Nim}}== |
|||
{{trans|Kotlin}} |
|||
<lang Nim>import random, sequtils, strformat, tables |
|||
const Snl = {4: 14, 9: 31, 17: 7, 20: 38, 28: 84, 40: 59, 51: 67, 54: 34, |
|||
62: 19, 63: 81, 64: 60, 71: 91, 87: 24, 93: 73, 95: 75, 99: 78}.toTable |
|||
const SixThrowsAgain = true |
|||
proc turn(player, square: Positive): int = |
|||
var square = square |
|||
while true: |
|||
let roll = rand(1..6) |
|||
stdout.write &"Player {player}, on square {square}, rolls a {roll}" |
|||
if square + roll > 100: |
|||
echo " but cannot move." |
|||
else: |
|||
inc square, roll |
|||
echo &" and moves to square {square}." |
|||
if square == 100: return 100 |
|||
let next = Snl.getOrDefault(square, square) |
|||
if square < next: |
|||
echo &"Yay! Landed on a ladder. Climb up to {next}." |
|||
if next == 100: return 100 |
|||
square = next |
|||
elif square > next: |
|||
echo &"Oops! Landed on a snake. Slither down to {next}." |
|||
square = next |
|||
if roll < 6 or not SixThrowsAgain: return square |
|||
echo "Rolled a 6 so roll again." |
|||
proc playGame(n: Positive) = |
|||
# "n" players starting on square one. |
|||
var players = repeat(1, n) |
|||
while true: |
|||
for i, s in players: |
|||
let ns = turn(i + 1, s) |
|||
if ns == 100: |
|||
echo &"Player {i+1} wins!" |
|||
return |
|||
players[i] = ns |
|||
echo() |
|||
randomize() |
|||
when isMainModule: |
|||
playGame(3)</lang> |
|||
{{out}} |
|||
Sample game. |
|||
<pre>Player 1, on square 1, rolls a 4 and moves to square 5. |
|||
Player 2, on square 1, rolls a 5 and moves to square 6. |
|||
Player 3, on square 1, rolls a 2 and moves to square 3. |
|||
Player 1, on square 5, rolls a 5 and moves to square 10. |
|||
Player 2, on square 6, rolls a 3 and moves to square 9. |
|||
Yay! Landed on a ladder. Climb up to 31. |
|||
Player 3, on square 3, rolls a 5 and moves to square 8. |
|||
Player 1, on square 10, rolls a 1 and moves to square 11. |
|||
Player 2, on square 31, rolls a 3 and moves to square 34. |
|||
Player 3, on square 8, rolls a 1 and moves to square 9. |
|||
Yay! Landed on a ladder. Climb up to 31. |
|||
Player 1, on square 11, rolls a 1 and moves to square 12. |
|||
Player 2, on square 34, rolls a 2 and moves to square 36. |
|||
Player 3, on square 31, rolls a 1 and moves to square 32. |
|||
Player 1, on square 12, rolls a 1 and moves to square 13. |
|||
Player 2, on square 36, rolls a 6 and moves to square 42. |
|||
Rolled a 6 so roll again. |
|||
Player 2, on square 42, rolls a 5 and moves to square 47. |
|||
Player 3, on square 32, rolls a 2 and moves to square 34. |
|||
Player 1, on square 13, rolls a 6 and moves to square 19. |
|||
Rolled a 6 so roll again. |
|||
Player 1, on square 19, rolls a 5 and moves to square 24. |
|||
Player 2, on square 47, rolls a 1 and moves to square 48. |
|||
Player 3, on square 34, rolls a 6 and moves to square 40. |
|||
Yay! Landed on a ladder. Climb up to 59. |
|||
Rolled a 6 so roll again. |
|||
Player 3, on square 59, rolls a 1 and moves to square 60. |
|||
Player 1, on square 24, rolls a 5 and moves to square 29. |
|||
Player 2, on square 48, rolls a 1 and moves to square 49. |
|||
Player 3, on square 60, rolls a 4 and moves to square 64. |
|||
Oops! Landed on a snake. Slither down to 60. |
|||
Player 1, on square 29, rolls a 1 and moves to square 30. |
|||
Player 2, on square 49, rolls a 2 and moves to square 51. |
|||
Yay! Landed on a ladder. Climb up to 67. |
|||
Player 3, on square 60, rolls a 6 and moves to square 66. |
|||
Rolled a 6 so roll again. |
|||
Player 3, on square 66, rolls a 5 and moves to square 71. |
|||
Yay! Landed on a ladder. Climb up to 91. |
|||
Player 1, on square 30, rolls a 1 and moves to square 31. |
|||
Player 2, on square 67, rolls a 5 and moves to square 72. |
|||
Player 3, on square 91, rolls a 3 and moves to square 94. |
|||
Player 1, on square 31, rolls a 3 and moves to square 34. |
|||
Player 2, on square 72, rolls a 1 and moves to square 73. |
|||
Player 3, on square 94, rolls a 2 and moves to square 96. |
|||
Player 1, on square 34, rolls a 6 and moves to square 40. |
|||
Yay! Landed on a ladder. Climb up to 59. |
|||
Rolled a 6 so roll again. |
|||
Player 1, on square 59, rolls a 2 and moves to square 61. |
|||
Player 2, on square 73, rolls a 2 and moves to square 75. |
|||
Player 3, on square 96, rolls a 4 and moves to square 100. |
|||
Player 3 wins!</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |