Skip to content

Instantly share code, notes, and snippets.

@asciiphil

asciiphil/1-monopoly.py

Last active Jul 3, 2020
Embed
What would you like to do?
Code to generate Monopoly visualizations
#!/usr/bin/env python3
import itertools
import colorcet as cc
import matplotlib.colors as mcolors
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np
START = np.zeros(120)
START[0] = 1.0
JAIL_CELL = 10
GO_TO_JAIL_CELL = 30
GO_CELL = 0
CC_CELLS = [2, 17, 33]
C1_CELL = 11
E3_CELL = 24
H2_CELL = 39
R1_CELL = 5
RR_CELLS = [5, 15, 25, 35]
U1_CELL = 12
U_CELLS = [12, 28]
CH_CELLS = [7, 22, 36]
CELL_NAMES = [
('GO', 'white', 'black'),
('Medit. Ave', 'brown', 'white'),
('Comm. Ch', 'white', 'black'),
('Baltic Ave', 'brown', 'white'),
('Income Tax', 'white', 'black'),
('Reading RR', 'white', 'black'),
('Orient. Ave', 'lightblue', 'black'),
('Chance', 'white', 'black'),
('Vt Ave', 'lightblue', 'black'),
('Ct Ave', 'lightblue', 'black'),
('Jail', 'white', 'black'),
('St. Chas. Pl', 'pink', 'black'),
('Elec. Co.', 'white', 'black'),
('States Ave', 'pink', 'black'),
('Va Ave', 'pink', 'black'),
('Pa RR', 'white', 'black'),
('St. Jas. Pl', 'orange', 'black'),
('Comm. Ch', 'white', 'black'),
('Tn Ave', 'orange', 'black'),
('NY Ave', 'orange', 'black'),
('Free Park.', 'white', 'black'),
('Ky Ave', 'red', 'white'),
('Chance', 'white', 'black'),
('In Ave', 'red', 'white'),
('Il Ave', 'red', 'white'),
('B&O RR', 'white', 'black'),
('Atl. Ave', 'yellow', 'black'),
('Vent. Ave', 'yellow', 'black'),
('Wtr. Wks.', 'white', 'black'),
('Marvin Gdn', 'yellow', 'black'),
('Go To Jail', 'white', 'black'),
('Pacific Ave', 'green', 'white'),
('NC Ave', 'green', 'black'),
('Comm. Ch', 'white', 'white'),
('Pa Ave', 'green', 'white'),
('Short Line', 'white', 'black'),
('Chance', 'white', 'black'),
('Park Pl', 'darkblue', 'white'),
('Lux. Tax', 'white', 'black'),
('Boardwalk', 'darkblue', 'white'),
]
np.set_printoptions(edgeitems=6)
def probability_lists(die_sides):
singles = np.zeros(1 + 2 * die_sides)
doubles = np.zeros(1 + 2 * die_sides)
for i in range(2, 1 + 2 * die_sides):
if i <= die_sides + 1:
base_prob = i - 1
else:
base_prob = 2 * die_sides + 1 - i
if i % 2 == 0:
singles[i] = base_prob - 1
doubles[i] = 1
else:
singles[i] = base_prob
return (singles, doubles)
def apply_row_probabilities(array, row, die_sides):
singles, doubles = probability_lists(die_sides)
for i, (s_prob_n, d_prob_n) in enumerate(zip(singles, doubles)):
col = (row + i) % 40
s_prob = s_prob_n / (die_sides * die_sides)
d_prob = d_prob_n / (die_sides * die_sides)
# single -> single
array[row, col] += s_prob
# single -> double
array[row, col+40] += d_prob
# double -> single
array[row+40, col] += s_prob
# double -> triple
array[row+40, col+80] += d_prob
# triple -> single
array[row+80, col] += s_prob
array[row+80, JAIL_CELL] += 1/6
def apply_go_to_jail(array):
for row in range(0, array.shape[0]):
array[row, JAIL_CELL] += array[row, GO_TO_JAIL_CELL] + \
array[row, GO_TO_JAIL_CELL + 40] + \
array[row, GO_TO_JAIL_CELL + 80]
array[row, GO_TO_JAIL_CELL] = 0
array[row, GO_TO_JAIL_CELL + 40] = 0
array[row, GO_TO_JAIL_CELL + 80] = 0
def apply_community_chest(array):
for row in range(0, array.shape[0]):
for cc in CC_CELLS:
for offset in (0, 40, 80):
array[row, GO_CELL+offset] += 1/16 * array[row, cc+offset]
array[row, JAIL_CELL+offset] += 1/16 * array[row, cc+offset]
array[row, cc+offset] *= 14/16
def apply_chance(array):
for row in range(0, array.shape[0]):
for ch in CH_CELLS:
for offset in (0, 40, 80):
for dest in (GO_CELL, JAIL_CELL, C1_CELL, E3_CELL, H2_CELL, R1_CELL):
array[row, dest+offset] += 1/16 * array[row, ch+offset]
try:
next_railroad = next(itertools.dropwhile(lambda i: i<ch, RR_CELLS))
except StopIteration:
next_railroad = RR_CELLS[0]
array[row, next_railroad+offset] += 2/16 * array[row, ch+offset]
try:
next_utility = next(itertools.dropwhile(lambda i: i<ch, U_CELLS))
except StopIteration:
next_utility = U_CELLS[0]
array[row, next_utility+offset] += 1/16 * array[row, ch+offset]
# back three
array[row, offset+((ch-3)%40)] += 1/16 * array[row, ch+offset]
array[row, ch+offset] *= 6/16
def create_prob_matrix(die_sides):
array = np.zeros((120, 120))
for row in range(0, 40):
apply_row_probabilities(array, row, die_sides)
apply_go_to_jail(array)
apply_community_chest(array)
apply_chance(array)
return array
def collapse_prob_matrix(array):
"""Collapses the double tracking into a single 40x40 array."""
result = np.zeros((40, 40))
for row in range(0, 40):
for col in range(0, 40):
# "weight" is the likelihood of us being on the row. Doubles
# happen 1/6 of the time. The odds that the last two rolls
# were doubles are 1/36. The odds that the last roll was
# doubles but the previous wasn't are 5/36. That leaves 30/36
# for the common case of no doubles.
for ro, weight in ((0, 30/36), (40, 5/36), (80, 1/36)):
for co in (0, 40, 80):
result[row, col] += array[row+ro, col+co] * weight
return result
def plot_matrix(array):
cmap = mcolors.LinearSegmentedColormap.from_list('cc_bgy', ['#ffffff'] + list(reversed(cc.bmw)))
ax = plt.gca()
im = ax.imshow(array, cmap=cmap)
ax.figure.colorbar(im, ax=ax, format=mtick.PercentFormatter(xmax=1), label='Chance of transition')
plt.show()
def plot_collapsed_matrix(array):
cmap = mcolors.LinearSegmentedColormap.from_list('cc_bgy', ['#ffffff'] + list(reversed(cc.bmw)))
plt.figure(figsize=[12, 9])
ax = plt.gca()
im = ax.imshow(array, cmap=cmap)
ax.figure.colorbar(im, ax=ax, format=mtick.PercentFormatter(xmax=1), label='Chance of transition')
ax.set_yticks(range(0, len(CELL_NAMES)))
ax.set_yticklabels((n[0] for n in CELL_NAMES))
ax.set_xticks(range(0, len(CELL_NAMES)))
ax.set_xticklabels((n[0] for n in CELL_NAMES), rotation=90)
for edge, spine in ax.spines.items():
spine.set_color('white')
ax.set_xticks(np.arange(array.shape[1]+1)-.5, minor=True)
ax.set_yticks(np.arange(array.shape[0]+1)-.5, minor=True)
ax.grid(which="minor", color="w", linestyle='-', linewidth=2)
ax.tick_params(which="minor", bottom=False, left=False, right=False, top=False)
ax.tick_params(bottom=False, left=False, right=False, top=False)
ax.set_title('Odds of Moving from One Space to Another in Monopoly', fontsize='x-large')
ax.set_ylabel('Chance to go from here...')
ax.set_xlabel('...to here.')
plt.subplots_adjust(bottom=0.15)
plt.savefig('monopoly.svg')
#plt.show()
arr = create_prob_matrix(6)
#plot_matrix(arr)
carr = collapse_prob_matrix(arr)
plot_collapsed_matrix(carr)
digraph monopoly {
label="Monopoly First Move"
rankdir=LR
compound=true
node [shape=plaintext]
start [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLPADDING="0">
<TR><TD PORT="GO" BGCOLOR="black"><FONT COLOR="white">GO<BR/>100%</FONT></TD></TR>
<TR><TD PORT="Mediterranean">Mediterranean Ave</TD></TR>
<TR><TD PORT="CC1">Community Chest</TD></TR>
<TR><TD PORT="Baltic">Baltic Ave</TD></TR>
<TR><TD PORT="Income_Tax">Income Tax</TD></TR>
<TR><TD PORT="Reading_RR">Reading RR</TD></TR>
<TR><TD PORT="Oriental">Oriental Ave</TD></TR>
<TR><TD PORT="Chance1">Chance</TD></TR>
<TR><TD PORT="VT">Vermont Ave</TD></TR>
<TR><TD PORT="CT">Connecticut Ave</TD></TR>
<TR><TD PORT="Jail">Jail</TD></TR>
<TR><TD PORT="St_Charles">St. Charles Pl</TD></TR>
<TR><TD PORT="Electric">Electric Company</TD></TR>
<TR><TD PORT="States">States Ave</TD></TR>
<TR><TD PORT="VA">Virginia Ave</TD></TR>
<TR><TD PORT="PA_RR">Pennsylvania RR</TD></TR>
<TR><TD PORT="St_James">St. James Pl</TD></TR>
<TR><TD PORT="CC2">Community Chest</TD></TR>
<TR><TD PORT="TN">Tennessee Ave</TD></TR>
<TR><TD PORT="NY">New York Ave</TD></TR>
<TR><TD PORT="Parking">Free Parking</TD></TR>
<TR><TD PORT="KY">Kentucky Ave</TD></TR>
<TR><TD PORT="Chance2">Chance</TD></TR>
<TR><TD PORT="IN">Indiana Ave</TD></TR>
<TR><TD PORT="IL">Illinois Ave</TD></TR>
<TR><TD PORT="BO_RR">B&amp;O RR</TD></TR>
<TR><TD PORT="Atlantic">Atlantic Ave</TD></TR>
<TR><TD PORT="Ventnor">Ventnor Ave</TD></TR>
<TR><TD PORT="Water">Water Works</TD></TR>
<TR><TD PORT="Marvin">Marvin Gardens</TD></TR>
<TR><TD PORT="G2J">Go To Jail</TD></TR>
<TR><TD PORT="Pacific">Pacific Ave</TD></TR>
<TR><TD PORT="NC">North Carolina Ave</TD></TR>
<TR><TD PORT="CC3">Community Chest</TD></TR>
<TR><TD PORT="PA">Pennsylvania Ave</TD></TR>
<TR><TD PORT="Short">Short Line</TD></TR>
<TR><TD PORT="Chance3">Chance</TD></TR>
<TR><TD PORT="Park">Park Pl</TD></TR>
<TR><TD PORT="Luxury_Tax">Luxury Tax</TD></TR>
<TR><TD PORT="Boardwalk">Boardwalk</TD></TR>
</TABLE>>]
final [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLPADDING="0">
<TR><TD PORT="GO" BGCOLOR="#ffd7ff">GO<BR/>1.2%</TD></TR>
<TR><TD PORT="Mediterranean">Mediterranean Ave</TD></TR>
<TR><TD PORT="CC1" BGCOLOR="#ffc1ff">Community Chest<BR/>2.4%</TD></TR>
<TR><TD PORT="Baltic" BGCOLOR="#ff83ff">Baltic Ave<BR/>5.6%</TD></TR>
<TR><TD PORT="Income_Tax" BGCOLOR="#e12fff">Income Tax<BR/>9.4%</TD></TR>
<TR><TD PORT="Reading_RR" BGCOLOR="#9f1eff"><FONT COLOR="white">Reading RR<BR/>12.2%</FONT></TD></TR>
<TR><TD PORT="Oriental" BGCOLOR="#661fff"><FONT COLOR="white">Oriental Ave<BR/>13.9%</FONT></TD></TR>
<TR><TD PORT="Chance1" BGCOLOR="#fc5aff">Chance<BR/>7.3%</TD></TR>
<TR><TD PORT="VT" BGCOLOR="#661fff"><FONT COLOR="white">Vermont Ave<BR/>13.9%</FONT></TD></TR>
<TR><TD PORT="CT" BGCOLOR="#bd1eff"><FONT COLOR="white">Connecticut Ave<BR/>11.1%</FONT></TD></TR>
<TR><TD PORT="Jail" BGCOLOR="#e02eff">Jail<BR/>9.5%</TD></TR>
<TR><TD PORT="St_Charles" BGCOLOR="#ff6bff">St. Charles Pl<BR/>6.6%</TD></TR>
<TR><TD PORT="Electric" BGCOLOR="#ffa8ff">Electric Company<BR/>3.8%</TD></TR>
<TR><TD PORT="States">States Ave</TD></TR>
<TR><TD PORT="VA">Virginia Ave</TD></TR>
<TR><TD PORT="PA_RR" BGCOLOR="#ffdaff">Pennsylvania RR<BR/>1.0%</TD></TR>
<TR><TD PORT="St_James">St. James Pl</TD></TR>
<TR><TD PORT="CC2">Community Chest</TD></TR>
<TR><TD PORT="TN">Tennessee Ave</TD></TR>
<TR><TD PORT="NY">New York Ave</TD></TR>
<TR><TD PORT="Parking">Free Parking</TD></TR>
<TR><TD PORT="KY">Kentucky Ave</TD></TR>
<TR><TD PORT="Chance2">Chance</TD></TR>
<TR><TD PORT="IN">Indiana Ave</TD></TR>
<TR><TD PORT="IL" BGCOLOR="#ffdaff">Illinois Ave<BR/>1.0%</TD></TR>
<TR><TD PORT="BO_RR">B&amp;O RR</TD></TR>
<TR><TD PORT="Atlantic">Atlantic Ave</TD></TR>
<TR><TD PORT="Ventnor">Ventnor Ave</TD></TR>
<TR><TD PORT="Water">Water Works</TD></TR>
<TR><TD PORT="Marvin">Marvin Gardens</TD></TR>
<TR><TD PORT="G2J">Go To Jail</TD></TR>
<TR><TD PORT="Pacific">Pacific Ave</TD></TR>
<TR><TD PORT="NC">North Carolina Ave</TD></TR>
<TR><TD PORT="CC3">Community Chest</TD></TR>
<TR><TD PORT="PA">Pennsylvania Ave</TD></TR>
<TR><TD PORT="Short">Short Line</TD></TR>
<TR><TD PORT="Chance3">Chance</TD></TR>
<TR><TD PORT="Park">Park Pl</TD></TR>
<TR><TD PORT="Luxury_Tax">Luxury Tax</TD></TR>
<TR><TD PORT="Boardwalk" BGCOLOR="#ffdaff">Boardwalk<BR/>1.0%</TD></TR>
</TABLE>>]
subgraph cluster_dierolls {
label="Die Rolls (first, second)\n36 possibilities\n2.8% each"
d2 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR><TD PORT="11" BGCOLOR="#ffbaff">1,1</TD></TR>
</TABLE>>]
d3 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="12" BGCOLOR="#ffbaff">1,2</TD>
<TD PORT="21" BGCOLOR="#ffbaff">2,1</TD>
</TR>
</TABLE>>]
d4 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="13" BGCOLOR="#ffbaff">1,3</TD>
<TD PORT="22" BGCOLOR="#ffbaff">2,2</TD>
<TD PORT="31" BGCOLOR="#ffbaff">3,1</TD>
</TR>
</TABLE>>]
d5 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="14" BGCOLOR="#ffbaff">1,4</TD>
<TD PORT="23" BGCOLOR="#ffbaff">2,3</TD>
<TD PORT="32" BGCOLOR="#ffbaff">3,2</TD>
<TD PORT="41" BGCOLOR="#ffbaff">4,1</TD>
</TR>
</TABLE>>]
d6 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="15" BGCOLOR="#ffbaff">1,5</TD>
<TD PORT="24" BGCOLOR="#ffbaff">2,4</TD>
<TD PORT="33" BGCOLOR="#ffbaff">3,3</TD>
<TD PORT="42" BGCOLOR="#ffbaff">4,2</TD>
<TD PORT="51" BGCOLOR="#ffbaff">5,1</TD>
</TR>
</TABLE>>]
d7 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="16" BGCOLOR="#ffbaff">1,6</TD>
<TD PORT="25" BGCOLOR="#ffbaff">2,5</TD>
<TD PORT="34" BGCOLOR="#ffbaff">3,4</TD>
<TD PORT="43" BGCOLOR="#ffbaff">4,3</TD>
<TD PORT="52" BGCOLOR="#ffbaff">5,2</TD>
<TD PORT="61" BGCOLOR="#ffbaff">6,1</TD>
</TR>
</TABLE>>]
d8 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="26" BGCOLOR="#ffbaff">2,6</TD>
<TD PORT="35" BGCOLOR="#ffbaff">3,5</TD>
<TD PORT="44" BGCOLOR="#ffbaff">4,4</TD>
<TD PORT="53" BGCOLOR="#ffbaff">5,3</TD>
<TD PORT="62" BGCOLOR="#ffbaff">6,2</TD>
</TR>
</TABLE>>]
d9 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="36" BGCOLOR="#ffbaff">3,6</TD>
<TD PORT="45" BGCOLOR="#ffbaff">4,5</TD>
<TD PORT="54" BGCOLOR="#ffbaff">5,4</TD>
<TD PORT="63" BGCOLOR="#ffbaff">6,3</TD>
</TR>
</TABLE>>]
d10 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="46" BGCOLOR="#ffbaff">4,6</TD>
<TD PORT="55" BGCOLOR="#ffbaff">5,5</TD>
<TD PORT="64" BGCOLOR="#ffbaff">6,4</TD>
</TR>
</TABLE>>]
d11 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR>
<TD PORT="56" BGCOLOR="#ffbaff">5,6</TD>
<TD PORT="65" BGCOLOR="#ffbaff">6,5</TD>
</TR>
</TABLE>>]
d12 [label=<
<TABLE BORDER="0" CELLBORDER="0">
<TR><TD PORT="66" BGCOLOR="#ffbaff">6,6</TD></TR>
</TABLE>>]
}
start:GO -> d2:11:n; d2:11:s -> final:CC1
subgraph cluster_cc {
label="Community Chest Cards\n16 cards\n0.2% each"
CCopt [label=<
<TABLE BORDER="0" CELLBORDER="0" CELLPADDING="0">
<TR><TD PORT="bank" BGCOLOR="#ffe9fe">Bank error in your favor.</TD></TR>
<TR><TD PORT="doc" BGCOLOR="#ffe9fe">Doctor's fees.</TD></TR>
<TR><TD PORT="stock" BGCOLOR="#ffe9fe">Sale of stock.</TD></TR>
<TR><TD PORT="opera" BGCOLOR="#ffe9fe">Grand Opera Night.</TD></TR>
<TR><TD PORT="holiday" BGCOLOR="#ffe9fe">Holiday Fund matures.</TD></TR>
<TR><TD PORT="refund" BGCOLOR="#ffe9fe">Income tax refund.</TD></TR>
<TR><TD PORT="birthday" BGCOLOR="#ffe9fe">It is your birthday.</TD></TR>
<TR><TD PORT="life_ins" BGCOLOR="#ffe9fe">Life insurance matures.</TD></TR>
<TR><TD PORT="hospital" BGCOLOR="#ffe9fe">Hospital Fees.</TD></TR>
<TR><TD PORT="school" BGCOLOR="#ffe9fe">School fees.</TD></TR>
<TR><TD PORT="consult" BGCOLOR="#ffe9fe">Receive consultancy fee.</TD></TR>
<TR><TD PORT="repairs" BGCOLOR="#ffe9fe">Assessed for street repairs.</TD></TR>
<TR><TD PORT="beauty" BGCOLOR="#ffe9fe">Second place in beauty pageant.</TD></TR>
<TR><TD PORT="inherit" BGCOLOR="#ffe9fe">You inherit money.</TD></TR>
<TR><TD PORT="go" BGCOLOR="#ffe9fe">Advance to "Go".</TD></TR>
<TR><TD PORT="jail" BGCOLOR="#ffe9fe">Go to Jail.</TD></TR>
</TABLE>>]
}
final:CC1 -> CCopt [lhead=cluster_cc]
CCopt:go:e -> final:GO [constraint=false]
CCopt:jail:e -> final:Jail [constraint=false]
CCopt:bank -> final:CC1 [constraint=false]
CCopt:doc -> final:CC1 [constraint=false]
CCopt:stock -> final:CC1 [constraint=false]
CCopt:opera -> final:CC1 [constraint=false]
CCopt:holiday -> final:CC1 [constraint=false]
CCopt:refund -> final:CC1 [constraint=false]
CCopt:birthday -> final:CC1 [constraint=false]
CCopt:life_ins -> final:CC1 [constraint=false]
CCopt:hospital -> final:CC1 [constraint=false]
CCopt:school -> final:CC1 [constraint=false]
CCopt:consult -> final:CC1 [constraint=false]
CCopt:repairs -> final:CC1 [constraint=false]
CCopt:beauty -> final:CC1 [constraint=false]
CCopt:inherit -> final:CC1 [constraint=false]
start:GO -> d3:12:n; d3:12:s -> final:Baltic
start:GO -> d3:21:n; d3:21:s -> final:Baltic
start:GO -> d4:13:n; d4:13:s -> final:Income_Tax
start:GO -> d4:22:n; d4:22:s -> final:Income_Tax
start:GO -> d4:31:n; d4:31:s -> final:Income_Tax
start:GO -> d5:14:n; d5:14:s -> final:Reading_RR
start:GO -> d5:23:n; d5:23:s -> final:Reading_RR
start:GO -> d5:32:n; d5:32:s -> final:Reading_RR
start:GO -> d5:41:n; d5:41:s -> final:Reading_RR
start:GO -> d6:15:n; d6:15:s -> final:Oriental
start:GO -> d6:24:n; d6:24:s -> final:Oriental
start:GO -> d6:33:n; d6:33:s -> final:Oriental
start:GO -> d6:42:n; d6:42:s -> final:Oriental
start:GO -> d6:51:n; d6:51:s -> final:Oriental
start:GO -> d7:16:n; d7:16:s -> final:Chance1
start:GO -> d7:25:n; d7:25:s -> final:Chance1
start:GO -> d7:34:n; d7:34:s -> final:Chance1
start:GO -> d7:43:n; d7:43:s -> final:Chance1
start:GO -> d7:52:n; d7:52:s -> final:Chance1
start:GO -> d7:61:n; d7:61:s -> final:Chance1
subgraph cluster_chance {
label="Chance Cards\n16 cards\n1.0% each"
Copt [label=<
<TABLE BORDER="0" CELLBORDER="0" CELLPADDING="0">
<TR><TD PORT="go" BGCOLOR="#ffdaff">Advance to "Go".</TD></TR>
<TR><TD PORT="back" BGCOLOR="#ffdaff">Go Back Three Spaces.</TD></TR>
<TR><TD PORT="reading" BGCOLOR="#ffdaff">Take a trip to Reading Railroad.</TD></TR>
<TR><TD PORT="jail" BGCOLOR="#ffdaff">Go to Jail.</TD></TR>
<TR><TD PORT="SC" BGCOLOR="#ffdaff">Advance to St. Charles Place.</TD></TR>
<TR><TD PORT="dividend" BGCOLOR="#ffdaff">Bank pays you dividend.</TD></TR>
<TR><TD PORT="jail_free" BGCOLOR="#ffdaff">Get out of Jail Free.</TD></TR>
<TR><TD PORT="repairs" BGCOLOR="#ffdaff">Make general repairs on your property.</TD></TR>
<TR><TD PORT="poor_tax" BGCOLOR="#ffdaff">Pay poor tax.</TD></TR>
<TR><TD PORT="chair" BGCOLOR="#ffdaff">You're elected Chairman of the Board.</TD></TR>
<TR><TD PORT="mature" BGCOLOR="#ffdaff">Building loan matures.</TD></TR>
<TR><TD PORT="crossword" BGCOLOR="#ffdaff">Win a crossword competition.</TD></TR>
<TR><TD PORT="U" BGCOLOR="#ffdaff">Advance to nearest Utility.</TD></TR>
<TR><TD PORT="RR" BGCOLOR="#ffdaff">Advance to nearest Railroad.</TD></TR>
<TR><TD PORT="IL" BGCOLOR="#ffdaff">Advance to Illinois Ave.</TD></TR>
<TR><TD PORT="boardwalk" BGCOLOR="#ffdaff">Advance to Boardwalk.</TD></TR>
</TABLE>>]
}
final:Chance1 -> Copt [lhead=cluster_chance]
Copt:go:e -> final:GO [constraint=false]
Copt:IL:e -> final:IL [constraint=false]
Copt:SC:e -> final:St_Charles [constraint=false]
Copt:U:e -> final:Electric [constraint=false]
Copt:RR:e -> final:PA_RR [constraint=false]
Copt:dividend -> final:Chance1 [constraint=false]
Copt:jail_free -> final:Chance1 [constraint=false]
Copt:back:e -> final:Income_Tax [constraint=false]
Copt:jail:e -> final:Jail [constraint=false]
Copt:repairs -> final:Chance1 [constraint=false]
Copt:poor_tax -> final:Chance1 [constraint=false]
Copt:reading:e -> final:Reading_RR [constraint=false]
Copt:boardwalk:e -> final:Boardwalk [constraint=false]
Copt:chair -> final:Chance1 [constraint=false]
Copt:mature -> final:Chance1 [constraint=false]
Copt:crossword -> final:Chance1 [constraint=false]
start:GO -> d8:26:n; d8:26:s -> final:VT
start:GO -> d8:35:n; d8:35:s -> final:VT
start:GO -> d8:44:n; d8:44:s -> final:VT
start:GO -> d8:53:n; d8:53:s -> final:VT
start:GO -> d8:62:n; d8:62:s -> final:VT
start:GO -> d9:36:n; d9:36:s -> final:CT
start:GO -> d9:45:n; d9:45:s -> final:CT
start:GO -> d9:54:n; d9:54:s -> final:CT
start:GO -> d9:63:n; d9:63:s -> final:CT
start:GO -> d10:46:n; d10:46:s -> final:Jail
start:GO -> d10:55:n; d10:55:s -> final:Jail
start:GO -> d10:64:n; d10:64:s -> final:Jail
start:GO -> d11:56:n; d11:56:s -> final:St_Charles
start:GO -> d11:65:n; d11:65:s -> final:St_Charles
start:GO -> d12:66:n; d12:66:s -> final:Electric
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment