SlideShare uma empresa Scribd logo
1 de 28
人狼エージェント作成講座
エージェント作成フロー 
1. 環境構築 
– プロジェクトのダウンロード 
– Jarファイルの導入 
2. Playerクラスの実装 
– BasePlayerの実装 
– 各役職Playerの実装
エージェント作成フロー 
1. 環境構築 
– プロジェクトのダウンロード 
– Jarファイルの導入 
2. Playerクラスの実装 
– BasePlayerの実装 
– 各役職Playerの実装
プロジェクトのダウンロード 
• http://www.aiwolf.org/から「資料>人狼知能 
サーバ>aiwolf-ver0.1.7」をダウンロード 
– 中身はjarファイルとjavadoc
Jarファイルの概要 
• aiwolf-client 
– エージェントを作成する際に用いる 
• aiwolf-common 
– サーバとクライアント両方で用いる 
• aiwolf-server 
– ゲームの進行を行うサーバ 
– エージェント作成時に用いることは無い
新規プロジェクトの作成
ビルド・パスの構成 
• プロジェクトを右クリック→ビルド・パスの構成 
• ライブラリ→外部JARの追加 
– ダウンロードした以下のJARファイルを選択 
• aiwolf-client 
• aiwolf-common 
• aiwolf-server
エージェント作成フロー 
1. 環境構築 
– プロジェクトのダウンロード 
– Jarファイルの導入 
2. Playerクラスの実装 
– BasePlayerの実装 
– 各役職Playerの実装
Playerインターフェースの実装 
• ゲーム実行に必要なクラス 
→org.aiwolf.common.data.Playerを継承したクラス 
• Playerインターフェース内のAbstract Method 
• getName() 
• vote() 
• update(GameInfo gameinfo) 
• attack() 
• initialize(GameInfo gameinfo) 
• divine() 
• dayStart() 
• guard() 
• talk() 
• finish() 
• whisper()
ゲームの流れ 
サーバ 
Player3 
Player4 
Player2 
Player1
ゲームの流れ 
サーバ 
Player3 
Player4 
Player2 
Player1 
投票先を決めて
ゲームの流れ 
サーバ 
Player3 
Player4 
Player2 
Player1 
投票先を決めて 
Vote()
ゲームの流れ 
update(GameInfo) 
initialize() 
update(GameInfo) 
dayStart() 
update(GameInfo) 
whisper()(人狼のみ) 
talk() 
vote() 
divine()(占い師のみ) 
attack()(人狼のみ) 
guard()(狩人のみ) 
update(GameInfo) 
finish() 
会話終了 
ゲーム終了
RoleBasePlayerクラス 
• 役職によって行動のアルゴリズムが全然違う 
→役職ごとのプレイヤーを作るのが楽 
• org.aiwolf.client.base.player.RoleBasePlayer 
– 割り振られた役職のプレイヤークラスを呼ぶ
RoleBasePlayerクラス 
RoleBasePlayer 
VillagerPlayer 
SeerPlayer MediumPlayer 
WolfPlayer 
Player1 
Player2 
サーバ
RoleBasePlayerクラス 
サーバ 
RoleBasePlayer 
VillagerPlayer 
あなたの役職は占い師 
SeerPlayer MediumPlayer 
WolfPlayer
RoleBasePlayerクラス 
サーバ 
RoleBasePlayer 
SeerPlayer 
自分の役職を占い師に設定
RoleBasePlayerクラス 
サーバ 
RoleBasePlayer 
SeerPlayer 
占い先を決めてくれ
RoleBasePlayerクラス 
サーバ 
RoleBasePlayer 
SeerPlayer 
占い先を決めてくれ 
占い先を決めてくれ
RoleBasePlayerクラス 
サーバ 
RoleBasePlayer 
SeerPlayer 
占い先を決めてくれ 
占い先を決めてくれ 
divine()
RoleBasePlayerの継承 
↓コピペ用 
import org.aiwolf.client.base.player.RoleBasePlayer; 
import org.aiwolf.common.net.GameInfo; 
public class SamplePlayer extends RoleBasePlayer{ 
public SamplePlayer(){ 
//各役職で用いるプレイヤークラスをセットする 
setVillagerPlayer(new SampleVillagerPlayer()); 
setSeerPlayer(new SampleSeerPlayer()); 
//setしていない役職はサンプルエージェントが自動的に割り振られる 
} 
@Override 
public void initialize(GameInfo gameinfo) { 
// TODO 自動生成されたメソッド・スタブ 
} 
@Override 
public String getName() { 
// TODO 自動生成されたメソッド・スタブ 
return null; 
} 
}
各役職プレイヤーの作成 
• org.aiwolf.client.base.player.AbstractVillagerPlayer 
– 村人に必要ないメソッド(attackやdivine等)は実装 
しないで良い様にした抽象クラス 
– これを継承すると少し楽 
↓コピペ用 
package com.aaa; 
import org.aiwolf.client.base.player.AbstractVillagerPlayer; 
import org.aiwolf.common.data.Agent; 
import org.aiwolf.common.net.GameInfo; 
public class SampleVillagerPlayer extends AbstractVillagerPlayer{ 
@Override 
public void initialize(GameInfo gameinfo) { 
// TODO 自動生成されたメソッド・スタブ 
} 
@Override 
public void dayStart() { 
// TODO 自動生成されたメソッド・スタブ 
} 
@Override 
public void finish() { 
// TODO 自動生成されたメソッド・スタブ 
} 
@Override 
public String talk() { 
// TODO 自動生成されたメソッド・スタブ 
return null; 
} 
@Override 
public Agent vote() { 
// TODO 自動生成されたメソッド・スタブ 
return null; 
} 
}
update(GameInfo)の実装 
• 各行動の前に呼ばれる 
• 会話ログの読み込み等をすべき 
↓例 
//会話のログを取得 
List<Talk> talks = gameInfo.getTalkList(); 
//各トークについて処理 
for(Talk talk: talks){ 
Protocol protocol = new Protocol(talk.getContent()); 
List<Utterance> utterances = protocol.getUtterances(); 
//トーク内の各内容について処理 
for(Utterance utterance: utterances){ 
Passage passage = utterance.getPassage(); 
//発話内容がカミングアウトの時 
if(passage.getCategory() == Category.COMINGOUT){ 
//カミングアウトしたエージェントを取得 
Agent comingoutAgent = passage.getSubject(); 
//カミングアウトした役職を取得 
Role comingoutRole = passage.getObject(); 
} 
} 
}
dayStart()の実装 
• 1日の初めに呼ばれる 
• 襲撃結果や占い,霊能結果の情報の取得を 
すべき
talk()の実装 
• 発話を行う時に呼ばれる 
• 返り値はString型だが,人狼プロトコルで 
• 人狼プロトコルは, 
org.aiwolf.client.lib.TemplateTalkFactoryで簡 
単に表現可能
TemplateTalkFactoryクラス 
• estimate(Agent, Role) 
– Agentの役職はRoleだと思う 
• comingout(Agent, Role) 
– AgentがRoleをカミングアウトする 
• inspected(Agent, Species) 
– Agentを占った結果Speciesだった 
• medium_telled(Agent, Species) 
– Agentの霊能結果がSpeciesだった 
• guarded(Agent) 
– Agentを守った 
• skip() 
– まだ今日話したいことがある 
• over() 
– もう今日は話すことない
talk()の例 
Judge judge = getLatestDayGameInfo().getDivineResult(); 
Utterance utterance = TemplateTalkFactory.inspected(judge.getTarget(), 
judge.getResult()); 
Protocol protocol = new Protocol(utterance); 
return protocol.getText();
実行の構成 
• 実行の構成の引数↓ 
-c com.aaa.SamplePlayer 12 -l log

Mais conteúdo relacionado

Mais procurados

静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2
niku9Tenhou
 
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワルAndrosia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
CODE BLUE
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
Ryota Shiroguchi
 

Mais procurados (20)

Aiwolf seminar 2019_ja
Aiwolf seminar 2019_jaAiwolf seminar 2019_ja
Aiwolf seminar 2019_ja
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2
 
㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!
 
コンピュータビジョン7章資料_20140830読書会
コンピュータビジョン7章資料_20140830読書会コンピュータビジョン7章資料_20140830読書会
コンピュータビジョン7章資料_20140830読書会
 
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワルAndrosia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
 
Unityクリエイターズ勉強会【2/2】【関西】発表資料
Unityクリエイターズ勉強会【2/2】【関西】発表資料Unityクリエイターズ勉強会【2/2】【関西】発表資料
Unityクリエイターズ勉強会【2/2】【関西】発表資料
 
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりDIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
 
実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう
 
インターネット上のWikiページ上でエッジ側端末のI2Cデバイスの設定と入出力を可能とするIoTシステムの試作
インターネット上のWikiページ上でエッジ側端末のI2Cデバイスの設定と入出力を可能とするIoTシステムの試作インターネット上のWikiページ上でエッジ側端末のI2Cデバイスの設定と入出力を可能とするIoTシステムの試作
インターネット上のWikiページ上でエッジ側端末のI2Cデバイスの設定と入出力を可能とするIoTシステムの試作
 
Selenium 触ってみよう
Selenium 触ってみようSelenium 触ってみよう
Selenium 触ってみよう
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine
 
Paging Libraryの利用をやめたいお気持ち表明
Paging Libraryの利用をやめたいお気持ち表明Paging Libraryの利用をやめたいお気持ち表明
Paging Libraryの利用をやめたいお気持ち表明
 

Semelhante a 人狼エージェント作成講座

Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
hiro345
 
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
佑介 九岡
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
shobomaru
 
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
takanori suzuki
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
tamtam180
 

Semelhante a 人狼エージェント作成講座 (20)

Aiwolfseminar2020
Aiwolfseminar2020Aiwolfseminar2020
Aiwolfseminar2020
 
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
Ssaw08 1014
Ssaw08 1014Ssaw08 1014
Ssaw08 1014
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
 
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
 
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
 
Vagrant on SoftLayer
Vagrant on SoftLayerVagrant on SoftLayer
Vagrant on SoftLayer
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
 
Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。
 
Getting Started With Ore-Ore Swift Standard Library +
Getting Started With Ore-Ore Swift Standard Library +Getting Started With Ore-Ore Swift Standard Library +
Getting Started With Ore-Ore Swift Standard Library +
 

人狼エージェント作成講座