OSDN Git Service

改行コード指定
[jindolf/JinCore.git] / src / main / java / jp / sourceforge / jindolf / corelib / GameRole.java
index 755f2cf..f30f19c 100644 (file)
-/*\r
- * Roles in game\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.Comparator;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-/**\r
- * 役職。\r
- */\r
-public enum GameRole{\r
-\r
-    /** 村人。 */\r
-    INNOCENT("村人", '村', "innocent", Team.VILLAGE),\r
-    /** 人狼。 */\r
-    WOLF("人狼", '狼', "wolf", Team.WOLF),\r
-    /** 占い師。 */\r
-    SEER("占い師", '占', "seer", Team.VILLAGE),\r
-    /** 霊能者。 */\r
-    SHAMAN("霊能者", '霊', "shaman", Team.VILLAGE),\r
-    /** 狂人。 */\r
-    MADMAN("狂人", '狂', "madman", Team.WOLF),\r
-    /** 狩人。 */\r
-    HUNTER("狩人", '狩', "hunter", Team.VILLAGE),\r
-    /** 共有者。 */\r
-    FRATER("共有者", '共', "frater", Team.VILLAGE),\r
-    /** ハムスター人間。 */\r
-    HAMSTER("ハムスター人間", '公', "hamster", Team.HAMSTER),\r
-    ;\r
-\r
-    private static final Comparator<GameRole> BALANCE_COMPARATOR =\r
-            new PowerBalanceComparator();\r
-\r
-    private static final Pattern ROLE_PATTERN;\r
-\r
-    static{\r
-        StringBuilder roleRegex = new StringBuilder();\r
-        for(GameRole role : values()){\r
-            if(roleRegex.length() > 0){\r
-                roleRegex.append('|');\r
-            }\r
-            roleRegex.append('(')\r
-                     .append(Pattern.quote(role.getRoleName()))\r
-                     .append(')');\r
-        }\r
-        ROLE_PATTERN = Pattern.compile(roleRegex.toString());\r
-    }\r
-\r
-\r
-    private final String roleName;\r
-    private final char shortName;\r
-    private final String xmlName;\r
-    private final Team team;\r
-\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param roleName 役職名\r
-     * @param shortName 短縮名\r
-     * @param xmlName XML用シンボル\r
-     * @param team 陣営\r
-     */\r
-    private GameRole(String roleName,\r
-                      char shortName,\r
-                      String xmlName,\r
-                      Team team ){\r
-        this.roleName = roleName.intern();\r
-        this.shortName = shortName;\r
-        this.xmlName = xmlName.intern();\r
-        this.team = team;\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * 与えられたマッチャ先頭が定義済みRole名に一致しないか調べる。\r
-     * @param matcher マッチャ\r
-     * @return 一致した役職。どれにも一致しなければnull。\r
-     */\r
-    public static GameRole lookingAtRole(Matcher matcher){\r
-        matcher.usePattern(ROLE_PATTERN);\r
-\r
-        if( ! matcher.lookingAt() ) return null;\r
-        int groupCt = matcher.groupCount();\r
-        for(int group = 1; group <= groupCt; group++){\r
-            if(matcher.start(group) >= 0){\r
-                GameRole role = values()[group - 1];\r
-                return role;\r
-            }\r
-        }\r
-\r
-        return null;\r
-    }\r
-\r
-    /**\r
-     * 勢力バランス表記用Comparatorを得る。\r
-     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。\r
-     * @return Comparator\r
-     */\r
-    public static Comparator<GameRole> getPowerBalanceComparator(){\r
-        return BALANCE_COMPARATOR;\r
-    }\r
-\r
-\r
-    /**\r
-     * 役職名を返す。\r
-     * @return 役職名\r
-     */\r
-    public String getRoleName(){\r
-        return this.roleName;\r
-    }\r
-\r
-    /**\r
-     * 一文字に短縮された役職名を得る。\r
-     * @return 短縮された役職名\r
-     */\r
-    public char getShortName(){\r
-        return this.shortName;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-    /**\r
-     * 各役職のチームを得る。\r
-     * @return チーム\r
-     */\r
-    public Team getTeam(){\r
-        return this.team;\r
-    }\r
-\r
-    /**\r
-     * 勢力バランス表記用Comparator。\r
-     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。\r
-     */\r
-    private static final class PowerBalanceComparator\r
-            implements Comparator<GameRole> {\r
-\r
-        /**\r
-         * コンストラクタ。\r
-         */\r
-        private PowerBalanceComparator(){\r
-            super();\r
-            return;\r
-        }\r
-\r
-        /**\r
-         * 役職に順序を割り当てる。\r
-         * 村人陣営のほうが狼陣営より小さい値を返す。\r
-         * @param role 役職\r
-         * @return 強さ\r
-         */\r
-        private static int getPowerValue(GameRole role){\r
-            int power;\r
-\r
-            if(role == null) return Integer.MIN_VALUE;\r
-\r
-            switch(role){\r
-            case INNOCENT: power = -50; break;\r
-            case FRATER:   power = -40; break;\r
-            case SEER:     power = -30; break;\r
-            case SHAMAN:   power = -20; break;\r
-            case HUNTER:   power = -10; break;\r
-            case HAMSTER:  power =   0; break;\r
-            case MADMAN:   power = +10; break;\r
-            case WOLF:     power = +20; break;\r
-            default:\r
-                assert false;\r
-                throw new AssertionError();\r
-            }\r
-\r
-            return power;\r
-        }\r
-\r
-        /**\r
-         * {@inheritDoc}\r
-         * @param role1 {@inheritDoc}\r
-         * @param role2 {@inheritDoc}\r
-         * @return {@inheritDoc}\r
-         */\r
-        @Override\r
-        public int compare(GameRole role1, GameRole role2){\r
-            int power1 = getPowerValue(role1);\r
-            int power2 = getPowerValue(role2);\r
-            return power1 - power2;\r
-        }\r
-\r
-    }\r
-\r
-}\r
+/*
+ * Roles in game
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.Comparator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 役職。
+ */
+public enum GameRole{
+
+    /** 村人。 */
+    INNOCENT("村人", '村', "innocent", Team.VILLAGE),
+    /** 人狼。 */
+    WOLF("人狼", '狼', "wolf", Team.WOLF),
+    /** 占い師。 */
+    SEER("占い師", '占', "seer", Team.VILLAGE),
+    /** 霊能者。 */
+    SHAMAN("霊能者", '霊', "shaman", Team.VILLAGE),
+    /** 狂人。 */
+    MADMAN("狂人", '狂', "madman", Team.WOLF),
+    /** 狩人。 */
+    HUNTER("狩人", '狩', "hunter", Team.VILLAGE),
+    /** 共有者。 */
+    FRATER("共有者", '共', "frater", Team.VILLAGE),
+    /** ハムスター人間。 */
+    HAMSTER("ハムスター人間", '公', "hamster", Team.HAMSTER),
+    ;
+
+    private static final Comparator<GameRole> BALANCE_COMPARATOR =
+            new PowerBalanceComparator();
+
+    private static final Pattern ROLE_PATTERN;
+
+    static{
+        StringBuilder roleRegex = new StringBuilder();
+        for(GameRole role : values()){
+            if(roleRegex.length() > 0){
+                roleRegex.append('|');
+            }
+            roleRegex.append('(')
+                     .append(Pattern.quote(role.getRoleName()))
+                     .append(')');
+        }
+        ROLE_PATTERN = Pattern.compile(roleRegex.toString());
+    }
+
+
+    private final String roleName;
+    private final char shortName;
+    private final String xmlName;
+    private final Team team;
+
+
+    /**
+     * コンストラクタ。
+     * @param roleName 役職名
+     * @param shortName 短縮名
+     * @param xmlName XML用シンボル
+     * @param team 陣営
+     */
+    private GameRole(String roleName,
+                      char shortName,
+                      String xmlName,
+                      Team team ){
+        this.roleName = roleName.intern();
+        this.shortName = shortName;
+        this.xmlName = xmlName.intern();
+        this.team = team;
+        return;
+    }
+
+
+    /**
+     * 与えられたマッチャ先頭が定義済みRole名に一致しないか調べる。
+     * @param matcher マッチャ
+     * @return 一致した役職。どれにも一致しなければnull。
+     */
+    public static GameRole lookingAtRole(Matcher matcher){
+        matcher.usePattern(ROLE_PATTERN);
+
+        if( ! matcher.lookingAt() ) return null;
+        int groupCt = matcher.groupCount();
+        for(int group = 1; group <= groupCt; group++){
+            if(matcher.start(group) >= 0){
+                GameRole role = values()[group - 1];
+                return role;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 勢力バランス表記用Comparatorを得る。
+     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。
+     * @return Comparator
+     */
+    public static Comparator<GameRole> getPowerBalanceComparator(){
+        return BALANCE_COMPARATOR;
+    }
+
+
+    /**
+     * 役職名を返す。
+     * @return 役職名
+     */
+    public String getRoleName(){
+        return this.roleName;
+    }
+
+    /**
+     * 一文字に短縮された役職名を得る。
+     * @return 短縮された役職名
+     */
+    public char getShortName(){
+        return this.shortName;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+    /**
+     * 各役職のチームを得る。
+     * @return チーム
+     */
+    public Team getTeam(){
+        return this.team;
+    }
+
+    /**
+     * 勢力バランス表記用Comparator。
+     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。
+     */
+    private static final class PowerBalanceComparator
+            implements Comparator<GameRole> {
+
+        /**
+         * コンストラクタ。
+         */
+        private PowerBalanceComparator(){
+            super();
+            return;
+        }
+
+        /**
+         * 役職に順序を割り当てる。
+         * 村人陣営のほうが狼陣営より小さい値を返す。
+         * @param role 役職
+         * @return 強さ
+         */
+        private static int getPowerValue(GameRole role){
+            int power;
+
+            if(role == null) return Integer.MIN_VALUE;
+
+            switch(role){
+            case INNOCENT: power = -50; break;
+            case FRATER:   power = -40; break;
+            case SEER:     power = -30; break;
+            case SHAMAN:   power = -20; break;
+            case HUNTER:   power = -10; break;
+            case HAMSTER:  power =   0; break;
+            case MADMAN:   power = +10; break;
+            case WOLF:     power = +20; break;
+            default:
+                assert false;
+                throw new AssertionError();
+            }
+
+            return power;
+        }
+
+        /**
+         * {@inheritDoc}
+         * @param role1 {@inheritDoc}
+         * @param role2 {@inheritDoc}
+         * @return {@inheritDoc}
+         */
+        @Override
+        public int compare(GameRole role1, GameRole role2){
+            int power1 = getPowerValue(role1);
+            int power2 = getPowerValue(role2);
+            return power1 - power2;
+        }
+
+    }
+
+}