This is a bit of a follow-up question to my post here. I'm now attempting to replicate the same general code using Connect Four (7x6 grid instead of 3x3).
However, when I pass a Dynamic value to my createBox function, it seems to use values such as board$3379[[1,6]] instead of using the actual board variable. I believe this relates to the RuleDelayed issue described here but using With doesn't seem to help.
When I remove the Dynamic function before board[[x,y]] it works as intended.
createBox[elem_] := Module[{},
Print@elem;
Graphics[
{{White, Rectangle[]}
, Switch[elem
, "A", {Red, Disk[{0.5, 0.5}, 0.4]}
, "B", {Blue, Disk[{0.5, 0.5}, 0.4]}
, " ", {Thick, Circle[{0.5, 0.5}, 0.4]}
, _, {}
]
}, ImageSize -> 50, Frame -> True, FrameStyle -> Thickness[.02],
FrameTicks -> None
]
];
CreateDialog[
DynamicModule[
{board = ConstantArray[" ", {7, 6}], player = "A"},
Grid[
Table[
With[{y = y, x = x}
, EventHandler[
createBox[Dynamic@board[[x, y]]]
, {"MouseClicked" :> (
If[board[[y, x]] === " ",
board[[x, y]] = "A";
];
)}
]]
, {y, Length@board[[1]], 1, -1}, {x, Length@board}
], Spacings -> {0, 0}
]
], WindowTitle -> "Connect Four", WindowSize -> All
];
Is there a better way to structure this?
