{"id":231,"date":"2025-11-27T16:05:16","date_gmt":"2025-11-27T07:05:16","guid":{"rendered":"https:\/\/java.satoshis.jp\/?p=231"},"modified":"2025-12-04T14:16:09","modified_gmt":"2025-12-04T05:16:09","slug":"%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%a7rpg%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b-%e5%87%ba%e7%8f%be%e7%a2%ba%e7%8e%87%e3%82%92","status":"publish","type":"post","link":"https:\/\/java.satoshis.jp\/?p=231","title":{"rendered":"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067RPG\u3092\u4f5c\u3063\u3066\u307f\u308b \u2013 \u51fa\u73fe\u78ba\u7387\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3080"},"content":{"rendered":"<p>Java\u306b\u306f\u7c21\u5358\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u30af\u30e9\u30b9\u300cProperties\u300d\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30e2\u30f3\u30b9\u30bf\u30fc\u30fb\u30a2\u30a4\u30c6\u30e0\u30fb\u88c5\u5099\u306e\u51fa\u73fe\u78ba\u7387\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u5909\u66f4\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u306f\u3053\u306eRpg\u7528\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304b\u308c\u305f\u5024\u3092\u6587\u5b57\u5217\u3067\u53d6\u5f97\u3059\u308b\u30e1\u30bd\u30c3\u30c9 getString(key) \u3068\u3001\u6574\u6570\u5024\u3067\u53d6\u5f97\u3059\u308b\u30e1\u30bd\u30c3\u30c9 getInt(key) \u3092\u7528\u610f\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage rpg;\r\n\r\nimport java.io.FileReader;\r\nimport java.io.IOException;\r\nimport java.util.Properties;\r\n\r\npublic class RpgProperties {\r\n  private static Properties properties = null;\r\n\r\n  public RpgProperties() {\r\n    if (properties == null) {\r\n      try (FileReader fr = new FileReader(&quot;rpg.properties&quot;)) {\r\n        properties = new Properties();\r\n        properties.load(fr);\r\n      } catch (IOException e) {\r\n        e.printStackTrace();\r\n      }\r\n    }\r\n  }\r\n\r\n  public String getString(String key) {\r\n    return properties.getProperty(key);\r\n  }\r\n\r\n  public int getInt(String key) {\r\n    String s = properties.getProperty(key);\r\n    return Integer.parseInt(s);\r\n  }\r\n}\r\n<\/pre>\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u3058\u30d5\u30a9\u30eb\u30c0\u306b\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\u307e\u305a\u306f\u753b\u9762\u30bf\u30a4\u30c8\u30eb\u3092\u5909\u66f4\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\nrpg.properties\u30d5\u30a1\u30a4\u30eb\u306b\u30bf\u30a4\u30c8\u30eb\u3092\u66f8\u3044\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ntitle=Dragon Quest Zero\r\n<\/pre>\n<p>RpgFrame\u3067\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3093\u3060\u30bf\u30a4\u30c8\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u51e6\u7406\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 30; highlight: [30,35]; title: ; notranslate\" title=\"\">\r\n  private RpgProperties rpgProperties = new RpgProperties();\r\n  public RpgFrame() {\r\n    super(&quot;RPG&quot;);\r\n    super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r\n    addKeyListener(this);\r\n    setTitle(rpgProperties.getString(&quot;title&quot;));\r\n    Container pane = getContentPane();\r\n    pane.setLayout(new GridBagLayout());\r\n    drawField();\r\n  }\r\n<\/pre>\n<p>\u6b21\u306f\u30e2\u30f3\u30b9\u30bf\u30fc\u306e\u51fa\u73fe\u78ba\u7387\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ntitle=Dragon Quest Zero\r\nmonster.slime.rate=30\r\nmonster.dracky.rate=30\r\nmonster.ghost.rate=30\r\nmonster.dragon.rate=10\r\n<\/pre>\n<p>\u3053\u306e\u5024\u306fMonsterCreator\u3067\u53c2\u7167\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; highlight: [2,9,13,14,15,16,18,20]; title: ; notranslate\" title=\"\">\r\npackage rpg.model.monster;\r\nimport rpg.RpgProperties;\r\nimport rpg.view.IconLabel;\r\nimport rpg.view.monster.DrackyLabel;\r\nimport rpg.view.monster.GhostLabel;\r\nimport rpg.view.monster.SlimeLabel;\r\n\r\npublic class MonsterCreator {\r\n  private RpgProperties rpgProperties = new RpgProperties();\r\n  public Monster createMonster() {\r\n    double v = Math.random() * 100;\r\n    Monster m = null;\r\n    int slimeRate = rpgProperties.getInt(&quot;monster.slime.rate&quot;);\r\n    int drackyRate = slimeRate + rpgProperties.getInt(&quot;monster.dracky.rate&quot;);\r\n    int ghostRate = drackyRate + rpgProperties.getInt(&quot;monster.ghost.rate&quot;);\r\n    if (v &lt; slimeRate) {\r\n      m = new Slime();\r\n    } else if (v &lt; drackyRate) {\r\n      m = new Dracky();\r\n    } else if (v &lt; ghostRate) {\r\n      m = new Ghost();\r\n    }\r\n    return m;\r\n  }\r\n<\/pre>\n<p>\u30a2\u30a4\u30c6\u30e0\u3068\u88c5\u5099\u306e\u51fa\u73fe\u78ba\u7387\u3082\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3081\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<h2>\u65e5\u672c\u8a9e\u306e\u6587\u5b57\u5316\u3051\u5bfe\u7b56<\/h2>\n<p>RpgProperties.java\u306e\u4ee5\u4e0b\u306e\u90e8\u5206\u3092\u4fee\u6b63\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 11; highlight: [13]; title: ; notranslate\" title=\"\">\r\n  public RpgProperties() {\r\n    if (properties == null) {\r\n      try (InputStreamReader fr = new InputStreamReader(new FileInputStream(&quot;rpg.properties&quot;), &quot;UTF-8&quot;)) {\r\n        properties = new Properties();\r\n        properties.load(fr);\r\n      } catch (IOException e) {\r\n        e.printStackTrace();\r\n      }\r\n    }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Java\u306b\u306f\u7c21\u5358\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u30af\u30e9\u30b9\u300cProperties\u300d\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30e2\u30f3\u30b9\u30bf\u30fc\u30fb\u30a2\u30a4\u30c6\u30e0\u30fb\u88c5\u5099\u306e\u51fa\u73fe\u78ba\u7387\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u5909\u66f4\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002 \u307e\u305a &#8230; <\/p>\n","protected":false},"author":1,"featured_media":59,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[11,28,17,29],"class_list":["post-231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java","tag-properties","tag-rpg","tag-29"],"_links":{"self":[{"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":3,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":245,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions\/245"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/media\/59"}],"wp:attachment":[{"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}