1., 2., and 3. can be accomplished using a VertexShapeFunction
. I provided an example of this in an earlier answer. These requirements need a different implementation.
The helper function I provided in an earlier answer
ClearAll[visualizationToGraph];
visualizationToGraph[viz_, opts : OptionsPattern[Graph]] :=
Graph[EdgeList[viz] /. ((VertexShapeFunction /.
Options[viz, VertexShapeFunction])[[1]])[[1, 1]], opts]
g = gameTree2["Visualization"];
g0 = visualizationToGraph[g];
VertexShapeFunction
.
vsf[shape_, fontSize_, fontFamily_][position_, name_, dimensions_] :=
{EdgeForm[Black],
White,
shape[position],
Text[Style[name, fontSize, Black, FontFamily -> fontFamily], position]};
shape is a function that takes a position and returns a Graphics
primitive located at that position. E.g.
shape1 = Disk[#1, .2] &;
shape2 = RegularPolygon[#, .25, 6] &;
Using shape2
g1 = Graph[g0,
VertexShapeFunction -> vsf[shape2, 10, "Arial"],
ImageSize -> {1000, 500},
PerformanceGoal -> "Quality"]

The requirements for 4. are not very clear. Here is one interpretation
g2 = Graph[g0,
VertexShapeFunction -> vsf[shape1, 10, "Arial"],
ImageSize -> {1000, 500},
PerformanceGoal -> "Quality"];
yPositions = GraphEmbedding[g2][[All, 2]] // DeleteDuplicates;
prolog =
MapThread[{Text["Level " <> ToString@#2, {-.4, #1 + .1}], Dashed, InfiniteLine[{{0, #1}, {1, #1}}]} &,
{ReverseSort@yPositions, Range@Length@yPositions}];
GraphPlot[g2,
PlotRangePadding -> {Scaled[.05], 0},
Prolog -> prolog] //
Labeled[#, Style["Game Tree 3", 14, Black, Bold], Top] &
