source pokerIo.tcl #Elaborations source analysis.soar source pokerElab.soar if {[info exists g_simulation]} { source startLog.tcl echo "\nSimulation mode" } else { echo "\nInteractive testing/debugging mode" source initGame.tcl source aliases.soar max-chunks 200 } source pokerDebug.soar # Operators source defaultOps.soar source preflop.soar source flop.soar source turn.soar source river.soar # -------------------------------------------------------------------- # Subgoal based on stage of the game. # -------------------------------------------------------------------- sp {elaborate*top*state*name (state ^superstate nil) --> ( ^name poker) } # top state operator name becomes substate name sp {elaborate*substate*name (state ^superstate.operator.name ) --> ( ^name ) } # copy io link from top state to substate sp {elaborate*substate*io (state ^superstate.io ) --> ( ^io ) } sp {propose*preflop (state ^name poker ^io.input-link ) ( ^game ) ( ^stage preflop) --> ( ^operator ) ( ^name preflop) } sp {propose*flop (state ^name poker ^io.input-link ) ( ^game ) ( ^stage flop) --> ( ^operator ) ( ^name flop) } sp {propose*turn (state ^name poker ^io.input-link ) ( ^game ) ( ^stage turn) --> ( ^operator ) ( ^name turn) } sp {propose*river (state ^name poker ^io.input-link ) ( ^game ) ( ^stage river) --> ( ^operator ) ( ^name river) } # -------------------------------------------------------------------- # Preferences # -------------------------------------------------------------------- # Prefer higher score. sp {select*prefer*higher*score (state ^operator + ^operator { <> } +) ( ^score ) ( ^score { > }) --> ( ^operator > ) } # If score is tied, operators are equal (indifferent) with respect to each other. sp {select*indifferent*tied*score (state ^operator + ^operator { <> } +) ( ^score ) ( ^score ) --> ( ^operator = ) } # -------------------------------------------------------------------- # Generic operator-handling productions # -------------------------------------------------------------------- sp {apply*bet*operator (state ^operator ^io ) ( ^output-link
    ) ( ^bet.action ) --> (
      ^bet.action ) } sp {remove*bet (state ^operator ^io.output-link
        ) (
          ^bet ) ( ^status complete) --> (
            ^bet -) }