Rebol3 Code Examplex
Snake and ladder
Rebol [
title: "Rosetta code: Snake and ladder"
file: %Snake_and_ladder.r3
url: https://rosettacode.org/wiki/Snake_and_ladder
]
snake-or-ladder: function/with [
"Play a game of Snakes and Ladders with the given number of players."
players [integer!] "Number of players (must be > 1)"
][
assert [players > 1]
random/seed now/time/precise
print-hline/width 70
print as-blue "== SNAKE AND LADDER =="
repeat i players [positions/:i: 1] ;; start all players on cell 1
print "Game is starting...^/"
player: 1
forever [
move-player roll-dice
if positions/:player = 100 [
print-hline/width 70
print ["^/HURRAY, Player" as-green player "wins!!!"]
break
]
player: (player % players) + 1 ;; advance to next player (wrap around)
]
print "Game ended."
][
portals: #[ ;; map: landing cell -> destination
4 14 9 31 20 38 28 84 ;; ladders
40 59 51 67 63 81 71 91 ;; ladders
17 7 54 34 62 19 64 60 ;; snakes
87 24 93 73 95 75 99 78 ;; snakes
]
positions: #[] ;; player index -> current cell
player: 0 ;; current player index
roll-dice: does [1 + random 5] ;; returns 1–6
move-player: function [dice] [
cell: positions/:player + dice
prin [
"Player" as-green player
"rolled" as-yellow dice
"--> Moved to" as-yellow pad cell 4
]
if cell > 100 [ ;; overshoot: bounce back from 100
cell: 100 - (cell - 100)
prin [as-red "BUMPED to" as-yellow cell ""]
]
positions/:player: either portal: portals/:cell [
print either/only portal > cell [
as-green "Climbed a LADDER to" as-yellow portal ;; ladder up
][ as-red "A SNAKE carried to" as-yellow portal] ;; snake down
portal
][ print "" cell ] ;; plain move, no portal
]
]
snake-or-ladder 2 ;- Start a gameOutput:
----------------------------------------------------------------------
== SNAKE AND LADDER ==
Game is starting...
Player 1 rolled 6 --> Moved to 7
Player 2 rolled 4 --> Moved to 5
Player 1 rolled 5 --> Moved to 12
Player 2 rolled 5 --> Moved to 10
Player 1 rolled 4 --> Moved to 16
Player 2 rolled 3 --> Moved to 13
Player 1 rolled 4 --> Moved to 20 Climbed a LADDER to 38
Player 2 rolled 4 --> Moved to 17 A SNAKE carried to 7
Player 1 rolled 3 --> Moved to 41
Player 2 rolled 2 --> Moved to 9 Climbed a LADDER to 31
Player 1 rolled 3 --> Moved to 44
Player 2 rolled 5 --> Moved to 36
Player 1 rolled 4 --> Moved to 48
Player 2 rolled 4 --> Moved to 40 Climbed a LADDER to 59
Player 1 rolled 3 --> Moved to 51 Climbed a LADDER to 67
Player 2 rolled 3 --> Moved to 62 A SNAKE carried to 19
Player 1 rolled 4 --> Moved to 71 Climbed a LADDER to 91
Player 2 rolled 5 --> Moved to 24
Player 1 rolled 2 --> Moved to 93 A SNAKE carried to 73
Player 2 rolled 3 --> Moved to 27
Player 1 rolled 5 --> Moved to 78
Player 2 rolled 3 --> Moved to 30
Player 1 rolled 2 --> Moved to 80
Player 2 rolled 2 --> Moved to 32
Player 1 rolled 3 --> Moved to 83
Player 2 rolled 4 --> Moved to 36
Player 1 rolled 5 --> Moved to 88
Player 2 rolled 4 --> Moved to 40 Climbed a LADDER to 59
Player 1 rolled 4 --> Moved to 92
Player 2 rolled 2 --> Moved to 61
Player 1 rolled 4 --> Moved to 96
Player 2 rolled 3 --> Moved to 64 A SNAKE carried to 60
Player 1 rolled 6 --> Moved to 102 BUMPED to 98
Player 2 rolled 5 --> Moved to 65
Player 1 rolled 3 --> Moved to 101 BUMPED to 99 A SNAKE carried to 78
Player 2 rolled 4 --> Moved to 69
Player 1 rolled 3 --> Moved to 81
Player 2 rolled 5 --> Moved to 74
Player 1 rolled 5 --> Moved to 86
Player 2 rolled 3 --> Moved to 77
Player 1 rolled 4 --> Moved to 90
Player 2 rolled 5 --> Moved to 82
Player 1 rolled 4 --> Moved to 94
Player 2 rolled 4 --> Moved to 86
Player 1 rolled 6 --> Moved to 100
----------------------------------------------------------------------
HURRAY, Player 1 wins!!!
Game ended.