#!/usr/bin/env python3 # Copyright 2016 Andrew Medworth (github@medworth.org.uk) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """Generate SVG diagram for double-dealing demo""" import svg def make_original_position(layout): """Create original position with coins""" pos = svg.StringsAndCoinsPosition(layout) other_chain = pos.add_horizontal_chain(5) pos.next_line() chain = pos.add_horizontal_chain(5) pos.next_line(small=True) return [pos, chain, other_chain] def original(layout, pos): """Render start position""" layout.add_default_text("Original position:") layout.next_grid_position() pos.highlight_add_and_move() def opened(layout, pos, chain): """Render first chain opening""" layout.add_default_text("Player $A$ must open a chain:") layout.next_grid_position() pos.cut_ground_string(chain[-1]) pos.highlight_add_and_move() def doubledeal(layout, pos, chain): """Render double-dealing move""" layout.add_default_text("Player $B$ double-deals:") layout.next_grid_position() pos.cut_ground_string(chain[0]) pos.cut_2coin_string(chain[1], chain[2]) pos.cut_2coin_string(chain[2], chain[3]) pos.cut_2coin_string(chain[3], chain[4]) pos.highlight_add_and_move(colour="red") def final(layout, pos, chain, other_chain): """Render final position""" layout.add_default_text("Player $A$ must now open the final chain:") layout.next_grid_position() pos.cut_2coin_string(chain[0], chain[1]) pos.cut_2coin_string(other_chain[3], other_chain[4]) pos.highlight_add_and_move() layout.add_default_text("Player $B$ takes and wins 2--8.") def main(): """Entry point""" layout = svg.Layout() [pos, chain, other_chain] = make_original_position(layout) original(layout, pos) opened(layout, pos, chain) doubledeal(layout, pos, chain) final(layout, pos, chain, other_chain) layout.render() if __name__ == "__main__": main()