Dealer.agent.xml

<!--
<H3>The blackjack dealer controls the game.</H3>

The dealer registers itself at the DirectoryFacilitator
and waits for player agents to join the table.
-->
<agent xmlns="http://jadex.sourceforge.net/jadex"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jadex.sourceforge.net/jadex
http://jadex.sourceforge.net/jadex-0.96.xsd"
name="Dealer"
package="jadex.examples.blackjack.dealer">

<imports>
<import>jadex.examples.blackjack.*</import>
<import>jadex.examples.blackjack.gui.*</import>
<import>jadex.runtime.*</import>
<import>jadex.planlib.*</import>
<import>jadex.util.*</import>
<import>jadex.adapter.fipa.*</import>
<import>java.util.logging.*</import>
<import>java.util.*</import>
</imports>

<capabilities>
<!-- this capability provides easy access to "out-of-the-box"-plans
allowing - for example - to register at the DF. -->
<capability name="dfcap" file="jadex.planlib.DF"/>
</capabilities>

<!--
These are the dealers beliefs. None of these beliefs should be edited in the ADF
because all beliefs are initialised by the plans during the game or have
expedient start-up values (like the three beliefs below).
-->
<beliefs>
<!-- The card set used to play the game. -->
<belief name="cardset" class="CardSet" />

<!-- The number of seconds to wait for answers from players. -->
<belief name="playerwaitmillis" class="long">
<fact>(Integer)$propertybase.getProperty("standard.timeout")</fact>
</belief>

<!-- The number of seconds to wait before drawing a card.
Can be adjusted in the GUI. -->
<belief name="stepdelay" class="int">
<fact>1</fact>
</belief>

<!-- When set to true, each step in the game must be manually
issued in the GUI. -->
<belief name="singleStepMode" class="boolean">
<fact>false</fact>
</belief>

<!-- The self representation of the dealer. -->
<belief name="myself" class="Dealer">
<fact>new Dealer()</fact>
</belief>

<!-- The players. -->
<beliefset name="players" class="Player"/>

<!-- The history of played games. -->
<belief name="statistics" class="GameStatistics">
<fact>new GameStatistics()</fact>
</belief>

<belief name="gamestate" class="GameState">
<fact>new GameState($beliefbase.myself, null)</fact>
</belief>

<belief name="gui" class="DealerFrame"/>

<!--
It's possible that a few different manager (possibly from remote Players)
want to track their players during the game, therefor a beliefset containing
all manager-AIDs is needed.
-->
<beliefset name="tracker" class="AgentIdentifier"/>

</beliefs>

<!--
The dealer has only one initial goal: registering a
dealing-service at the DF and renew this registration
every 10 seconds.
-->
<goals>
<!-- Main goal to play a game. -->
<performgoal name="play_game" exclude="never" retrydelay="3000">
<contextcondition>
$beliefbase.players.length > 0
</contextcondition>
</performgoal>

<!-- Goal to play with a single player (in the context of a larger game). -->
<performgoal name="play_with_player">
<parameter name="player" class="Player"/>
</performgoal>

<!-- Used for registering the dealer at the df. -->
<achievegoalref name="df_register">
<concrete ref="dfcap.df_register"/>
</achievegoalref>
<!-- Used for deregistering the dealer at the df. -->
<achievegoalref name="df_deregister">
<concrete ref="dfcap.df_deregister"/>
</achievegoalref>
</goals>

<!--
These are all the plans, the dealer will execute during a game.
There is one plan for every major task. Have a look into the
plan-classes to get a detailed insight in whats going on there.
-->
<plans>
<!-- Register a player. -->
<plan name="register_plan">
<body class="DealerRegisterPlayerPlan" />
<!-- <body>new DealerRegisterPlayerPlan()</body>-->
<trigger>
<messageevent ref="request_join" />
</trigger>
</plan>

<!-- Play a game. -->
<plan name="play_game_plan">
<body class="DealerGameRoundMasterPlan" />
<!-- <body>new DealerGameRoundMasterPlan()</body> -->
<trigger>
<goal ref="play_game"/>
</trigger>
</plan>

<!-- Play a game with a single player. -->
<plan name="play_with_player_plan">
<parameter name="player" class="Player">
<goalmapping ref="play_with_player.player"/>
</parameter>
<body class="DealerGameRoundPlayerPlan" />
<!-- <body>new DealerGameRoundPlayerPlan()</body>-->
<trigger>
<goal ref="play_with_player"/>
</trigger>
<!-- <contextcondition>
$beliefbase.getBeliefSet("players").containsFact($plan.player)
&& !$plan.player.getState().equals(Player.STATE_IDLE)
</contextcondition>-->
<contextcondition>
$beliefbase.getBeliefSet("players").containsFact($plan.player)
&& !$plan.player.getState().equals(Player.STATE_IDLE)
</contextcondition>
</plan>

<plan name="propagate_game_state_plan">
<body class="PropagateGameStatePlan" />
<!-- <body>new PropagateGameStatePlan()</body> -->
<trigger>
<beliefchange ref="myself"/>
<beliefsetchange ref="players"/>
</trigger>
<!-- not possible because game must always be updated. -->
<!--<precondition>$beliefbase.players.length>0</precondition>-->
</plan>
</plans>

<!-- events -->
<events>

<!-- Event to trigger a step. -->
<internalevent name="step"/>

<!-- player messages -->
<!-- Player request to join the game. -->
<messageevent name="request_join" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestJoin.class</value>
</parameter>
</messageevent>

<!-- A player wants to draw another card. -->
<messageevent name="request_draw" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestDraw.class</value>
</parameter>
</messageevent>

<!-- A player makes a bet. -->
<messageevent name="request_bet" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<!--<parameter name="reply-with" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>-->
<parameter name="conversation-id" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestBet.class</value>
</parameter>
</messageevent>


<messageevent name="refuse_bet" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REFUSE</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestBet.class</value>
</parameter>
</messageevent>

<!-- A player has finished its game (i.e. doesn't want to draw any more cards). -->
<messageevent name="request_finished" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestFinished.class</value>
</parameter>
</messageevent>

<!-- todo: manager messages -->

<!-- The manager is shutting down the BlackJack application. -->
<messageevent name="inform_shutdown" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="content-start" class="String" direction="fixed">
<value>"manager:shutDown"</value>
</parameter>
</messageevent>
<!-- The manager registers as tracker on game settings. -->
<messageevent name="query_tracking" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.QUERY_REF</value>
</parameter>
<parameter name="content-start" class="String" direction="fixed">
<value>"manager:registerAsTracker"</value>
</parameter>
</messageevent>

<!-- sent messages -->

<!-- inform a player about a the game result -->
<messageevent name="inform_action_done" direction="send_receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>Done.class</value>
</parameter>
</messageevent>

<!-- inform a player about a the game result -->
<messageevent name="refuse_action" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REFUSE</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
</messageevent>

<!-- inform tracker about playing players -->
<messageevent name="inform_tracker" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="content" class="String" direction="in" />
</messageevent>

<messageevent name="inform_game_state" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="conversation-id" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>GameState.class</value>
</parameter>
</messageevent>

</events>

<expressions>

<!-- The player that gets the next card (if any). -->
<expression name="turnplayer">
select one Player $p from $beliefbase.players
where $p.getState().equals(Player.STATE_PLAYING)
order by $p.getCards().length
</expression>

<!-- Check if it is the dealer's turn. -->
<condition name="dealers_turn">
// The dealer may draw its initial card when all players have two cards.
$beliefbase.myself.getCards().length==0 &&
(select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE) && $p.getCards().length!=2)
== null

// The dealer may draw more cards, when all players are either idle or finished.
|| (select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE) && !$p.getState().equals(Player.STATE_FINISHED))
== null
</condition>

<!-- Check if it is the $player's turn. -->
<condition name="players_turn">
// All players must be idle, playing, or finished.
(select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE)
&& !$p.getState().equals(Player.STATE_PLAYING)
&& !$p.getState().equals(Player.STATE_FINISHED))
== null

// And this player must be the first with the least number of cards.
// Hack !!! Assume "any" selects players in order.
&& (select one Player $p from $beliefbase.players
where $p.getState().equals(Player.STATE_PLAYING)
&& $p.getCards().length<=$player.getCards().length
order by $p.getCards().length)
== $player
<parameter name="$player" class="Player"/>
</condition>

<!-- Check if the dealer has drawn its first card. -->
<condition name="dealer_card">
$beliefbase.myself.getCards().length==1
</condition>

<!-- Check if the dealer has finished drawing cards. -->
<condition name="dealer_finished">
$beliefbase.myself.getState().equals(Player.STATE_FINISHED)
|| $beliefbase.myself.getState().equals(Player.STATE_IDLE)
</condition>

</expressions>

<properties>
<!-- logging-properties, needed to debug the application.
Start the Jadex-Logging-Agent to see whats going on behind the scenes -->
<!--<property name="logging.level">Level.INFO</property>-->
</properties>

<configurations>
<configuration name="default">
<beliefs>
<initialbelief ref="gui">
<fact>new DealerFrame($beliefbase.myself, $agent.getExternalAccess())</fact>
</initialbelief>
</beliefs>
<goals>
<!-- Register the dealer at the df on startup. -->
<initialgoal ref="df_register">
<!-- The services to register. -->
<parameter ref="description">
<value>
<!-- This is the agent-description for the dealer. With this description
the dealers is registered at the directory facilitator.
Note, that the dealer only offers one service, that is 'dealing'
(see service description below). -->
SFipa.createAgentDescription(null,
SFipa.createServiceDescription("dealing", "blackjack", "University of Hamburg"))
</value>
</parameter>
</initialgoal>
<initialgoal ref="play_game"/>
<endgoal ref="df_deregister"/>
</goals>
</configuration>
</configurations>

</agent>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值