(2015.03.31修正しました.aiwolf-ver0.1.16対応版)
ゲームを実行するためのソースコードは以下の通り.
/**
* 指定した回数ゲームを実行し,各陣営の勝利数を表示するMainクラス
* @author inaba
*
*/
public class MyStarter {
/**
* 参加エージェントの数
*/
static protected int PLAYER_NUM = 12;
/**
* 1回の実行で行うゲーム数
*/
static protected int GAME_NUM = 100;
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
//村人側勝利数
int villagerWinNum = 0;
//人狼側勝利数
int werewolfWinNum = 0;
for(int i = 0;i<GAME_NUM;i++){
List<Player> playerList = new ArrayList<Player>();
for(int j=0;j<PLAYER_NUM;j++){
playerList.add(new RoleAssignPlayer()); //ここで作成したエージェントを指定
}
GameServer gameServer = new DirectConnectServer(playerList); GameSetting gameSetting = GameSetting.getDefaultGame(PLAYER_NUM); AIWolfGame game = new AIWolfGame(gameSetting, gameServer); game.setRand(new Random(gameSetting.getRandomSeed())); game.start(); if(game.getWinner() == Team.VILLAGER){ villagerWinNum++; }else{ werewolfWinNum++; }
System.out.println("村人側勝利:" + villagerWinNum + " 人狼側勝利" + werewolfWinNum);
}
}
* 指定した回数ゲームを実行し,各陣営の勝利数を表示するMainクラス
* @author inaba
*
*/
public class MyStarter {
/**
* 参加エージェントの数
*/
static protected int PLAYER_NUM = 12;
/**
* 1回の実行で行うゲーム数
*/
static protected int GAME_NUM = 100;
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
//村人側勝利数
int villagerWinNum = 0;
//人狼側勝利数
int werewolfWinNum = 0;
for(int i = 0;i<GAME_NUM;i++){
List<Player> playerList = new ArrayList<Player>();
for(int j=0;j<PLAYER_NUM;j++){
playerList.add(new RoleAssignPlayer()); //ここで作成したエージェントを指定
}
GameServer gameServer = new DirectConnectServer(playerList); GameSetting gameSetting = GameSetting.getDefaultGame(PLAYER_NUM); AIWolfGame game = new AIWolfGame(gameSetting, gameServer); game.setRand(new Random(gameSetting.getRandomSeed())); game.start(); if(game.getWinner() == Team.VILLAGER){ villagerWinNum++; }else{ werewolfWinNum++; }
System.out.println("村人側勝利:" + villagerWinNum + " 人狼側勝利" + werewolfWinNum);
}
}
ソースコードの解説は人狼知能エージェントの作成・その3とかなり重複するので割愛.
プログラムを実行すると,100回ゲームを実行し,村人側と人狼側の勝利数をそれぞれ表示する.
ポイントは,ソースコード中央辺りで前回作成したRoleAssignPlayerをplayerListに12回(PLAYER_NUM回)追加している点である.
これにより,RoleAssignPlayer12体による対戦が行える.
実行するとコンソールにこんな感じで表示される.
Agent[11] request no role
Agent[09] request no role
Agent[01] request no role
Agent[12] request no role
Agent[06] request no role
Agent[04] request no role
Agent[08] request no role
Agent[10] request no role
Agent[02] request no role
Agent[05] request no role
Agent[03] request no role
Agent[07] request no role
=============================================
======
Agent[01] null ALIVE POSSESSED
Agent[02] null ALIVE VILLAGER
Agent[03] null ALIVE WEREWOLF
Agent[04] null ALIVE VILLAGER
Agent[05] null ALIVE VILLAGER
Agent[06] null ALIVE VILLAGER
Agent[07] null ALIVE WEREWOLF
Agent[08] null ALIVE VILLAGER
Agent[09] null ALIVE MEDIUM
Agent[10] null ALIVE VILLAGER
Agent[11] null ALIVE BODYGUARD
Agent[12] null ALIVE SEER
Human:10
Werewolf:2
・
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:VILLAGER
・
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:WEREWOLF
Villager:42 Werewolf:58
Agent[09] request no role
Agent[01] request no role
Agent[12] request no role
Agent[06] request no role
Agent[04] request no role
Agent[08] request no role
Agent[10] request no role
Agent[02] request no role
Agent[05] request no role
Agent[03] request no role
Agent[07] request no role
=============================================
======
Agent[01] null ALIVE POSSESSED
Agent[02] null ALIVE VILLAGER
Agent[03] null ALIVE WEREWOLF
Agent[04] null ALIVE VILLAGER
Agent[05] null ALIVE VILLAGER
Agent[06] null ALIVE VILLAGER
Agent[07] null ALIVE WEREWOLF
Agent[08] null ALIVE VILLAGER
Agent[09] null ALIVE MEDIUM
Agent[10] null ALIVE VILLAGER
Agent[11] null ALIVE BODYGUARD
Agent[12] null ALIVE SEER
Human:10
Werewolf:2
・
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:VILLAGER
・
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:WEREWOLF
Villager:42 Werewolf:58
100回中,村人側が42回,人狼側が58回勝ったようだ.
現段階では人狼側のほうが強いらしい.それもそのはずで,前回作成したMySeerPlayerは占い結果を全く発表せず,投票もランダムで行っている.重要な役職の占い師がこの体たらくではこれも仕方ない.
というわけで,前回作成したRoleAssignPlayerのソースコードからthis.setSeerPlayer(new MySeerPlayer())をコメントアウトしてみよう.これですべてサンプルがゲームを行うことになる.
実行結果は以下のとおり.
・
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:VILLAGER
Villager:56 Werewolf:44
・
・
Send finish to Agent[09]
Send finish to Agent[10]
Send finish to Agent[11]
Send finish to Agent[12]
Winner:VILLAGER
Villager:56 Werewolf:44
村人側が56回,人狼側が44回勝利,ということでやはり前回作成したSeerPlayerが諸悪の根源だったようだ(泣)
これでは残念すぎるので,次回はもっと強いエージェントを作っていこう.
0 件のコメント:
コメントを投稿