{"id":170,"date":"2024-12-05T13:54:57","date_gmt":"2024-12-05T04:54:57","guid":{"rendered":"https:\/\/java.satoshis.jp\/?p=170"},"modified":"2024-12-05T15:12:31","modified_gmt":"2024-12-05T06:12:31","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-%e8%a3%85%e5%82%99%e3%82%92%e4%bd%bf%e3%81%88","status":"publish","type":"post","link":"https:\/\/java.satoshis.jp\/?p=170","title":{"rendered":"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067RPG\u3092\u4f5c\u3063\u3066\u307f\u308b \u2013 \u88c5\u5099\u3092\u4f7f\u3048\u308b\u3088\u3046\u306b\u3059\u308b"},"content":{"rendered":"<p>\u4ee5\u524d\u3001\u30b3\u30f3\u30bd\u30fc\u30eb\u30a2\u30d7\u30ea\u3067\u52c7\u8005\u304c\u3072\u306e\u304d\u306e\u68d2\u3092\u88c5\u5099\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3057\u305f\u306e\u3067\u3001\u6575\u3068\u906d\u9047\u3057\u305f\u308a\u30a2\u30a4\u30c6\u30e0\u3092\u62fe\u3063\u305f\u308a\u3059\u308b\u306e\u3068\u540c\u69d8\u306b\u3001\u88c5\u5099\u3092\u62fe\u3048\u308b\u3088\u3046\u306b\u5b9f\u88c5\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u3001\u4ee5\u524d\u306b\u4f5c\u6210\u3057\u305f Arms \u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u65b0\u3057\u304f rpg.model.arms \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u3066\u3053\u3061\u3089\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; highlight: [1]; title: ; notranslate\" title=\"\">\r\npackage rpg.model.arms;\r\n\r\npublic class Arms {\r\n  private String name;\r\n\r\n  public Arms(String name) {\r\n    this.name = name;\r\n  }\r\n\r\n  public String getName() {\r\n    return name;\r\n  }\r\n}\r\n<\/pre>\n<p>Arms \u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066 HinokiRod \u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage rpg.model.arms;\r\n\r\npublic class HinokiRod extends Arms {\r\n  public HinokiRod() {\r\n    super(&quot;\u3072\u306e\u304d\u306e\u68d2&quot;);\r\n  }\r\n}\r\n<\/pre>\n<p>RpgFrame \u306e\u4e2d\u3067\u3001\u52c7\u8005\u304c\u79fb\u52d5\u3057\u305f\u3068\u304d\u306b\u78ba\u7387\u3067\u88c5\u5099\u3092\u62fe\u3046\u51e6\u7406\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 68; highlight: [102,103,104,105,106,107,108,109,110,111,129,130,131,132]; title: ; notranslate\" title=\"\">\r\n  @Override\r\n  public void keyPressed(KeyEvent e) {\r\n    if (e.getKeyCode() == KeyEvent.VK_LEFT) {\r\n      if (braveX &gt; 0) braveX--;\r\n    }\r\n    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {\r\n      if (braveX &lt; FieldWidth - 1) braveX++;\r\n    }\r\n    if (e.getKeyCode() == KeyEvent.VK_UP) {\r\n      if (braveY &gt; 0) braveY--;\r\n    }\r\n    if (e.getKeyCode() == KeyEvent.VK_DOWN) {\r\n      if (braveY &lt; FieldHeight - 1) braveY++;\r\n    }\r\n    drawField();\r\n    System.out.println(&quot;x=&quot; + braveX + &quot;, y=&quot; + braveY);\r\n    if (isEncount()) {\r\n      System.out.println(&quot;\u6575\u3068\u906d\u9047\u3057\u307e\u3057\u305f\u3002&quot;);\r\n      BattleFrame bf = new BattleFrame();\r\n      bf.setBrave(rpg.getBrave());\r\n      Monster m = rpg.getMonster();\r\n      bf.setMonster(m);\r\n      bf.setMonsterLabel(getMonsterLabel(m));\r\n      SwingUtilities.invokeLater(new WindowInvoker(bf));\r\n    } else if (isItemFound()) {\r\n      \/\/\u30a2\u30a4\u30c6\u30e0\u3092\u62fe\u3046\u51e6\u7406\r\n      Item item = rpg.getItem();\r\n      Brave brave = rpg.getBrave();\r\n      brave.addItem(item);\r\n      System.out.println(item.getName() + &quot;\u3092\u898b\u3064\u3051\u305f&quot;);\r\n      String msg = item.getName() + &quot;\u3092\u898b\u3064\u3051\u305f\uff01&quot;;\r\n      JOptionPane.showMessageDialog(\r\n        this, msg,\r\n        &quot;\u30a2\u30a4\u30c6\u30e0&quot;, JOptionPane.INFORMATION_MESSAGE);\r\n    } else if (isArmsFound()) {\r\n      \/\/ \u88c5\u5099\u3092\u62fe\u3046\u51e6\u7406\r\n      Arms arms = rpg.getArms();\r\n      Brave brave = rpg.getBrave();\r\n      brave.setArms(arms);\r\n      String msg = arms.getName() + &quot;\u3092\u898b\u3064\u3051\u305f\uff01&quot;;\r\n      JOptionPane.showMessageDialog(\r\n        this, msg,\r\n        &quot;\u30a2\u30a4\u30c6\u30e0&quot;, JOptionPane.INFORMATION_MESSAGE);\r\n    }\r\n  }\r\n  private IconLabel getMonsterLabel(Monster m) {\r\n    MonsterCreator mc = new MonsterCreator();\r\n    return mc.getMonsterLabel(m);\r\n  }\r\n  @Override\r\n  public void keyReleased(KeyEvent e) {\r\n    \/\/\r\n  }\r\n  private boolean isEncount() {\r\n    double v = Math.random();\r\n    return v &lt; 0.05;\r\n  }\r\n  private boolean isItemFound() {\r\n    double v = Math.random();\r\n    return v &lt; 0.05;\r\n  }\r\n  private boolean isArmsFound() {\r\n    double v = Math.random();\r\n    return v &lt; 0.05;\r\n  }\r\n<\/pre>\n<p>Rpg\u30af\u30e9\u30b9\u306b getArms() \u3092\u8ffd\u52a0\u3057\u3066\u3001\u3072\u306e\u304d\u306e\u68d2\u3092\u62fe\u3048\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<br \/>\n\u30e2\u30f3\u30b9\u30bf\u30fc\u3084\u30a2\u30a4\u30c6\u30e0\u306f\u8907\u6570\u304b\u3089\u78ba\u7387\u3067\u767a\u751f\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u3053\u3067\u306f\u3072\u306e\u304d\u306e\u68d2\u306e\u307f\u306b\u3057\u304a\u304d\u307e\u3059\u3002<br \/>\n\u3042\u3068\u3067\u5225\u306e\u88c5\u5099\u3092\u62fe\u3048\u308b\u3088\u3046\u306b\u3057\u305f\u304f\u306a\u3063\u305f\u3089\u3001\u4fee\u6b63\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u306d\uff01<\/p>\n<pre class=\"brush: java; highlight: [25,26,27]; title: ; notranslate\" title=\"\">\r\npackage rpg.model;\r\n\r\nimport rpg.model.arms.Arms;\r\nimport rpg.model.arms.HinokiRod;\r\nimport rpg.model.item.Item;\r\nimport rpg.model.monster.Monster;\r\n\r\npublic class Rpg {\r\n  private Brave brave;\r\n  public Rpg() {\r\n    brave = new Brave();\r\n    brave.setName(&quot;\u30e8\u30b7\u30d2\u30b3&quot;);\r\n  }\r\n  public Brave getBrave() {\r\n    return brave;\r\n  }\r\n  public Monster getMonster() {\r\n    MonsterCreator mc = new MonsterCreator();\r\n    return mc.createMonster();\r\n  }\r\n  public Item getItem() {\r\n    ItemCreator ic = new ItemCreator();\r\n    return ic.createItem();\r\n  }\r\n  public Arms getArms() {\r\n    return new HinokiRod();\r\n  }\r\n}\r\n<\/pre>\n<p>\u88c5\u5099\u3092\u62fe\u3063\u305f\u6642\u306b\u3001\u3044\u304d\u306a\u308a\u88c5\u5099\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3066\u3001\u6240\u6301\u54c1\u3068\u3057\u3066\u8ffd\u52a0\u3059\u308b\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p>\u52c7\u8005\u304c\u88c5\u5099\u3092\u6240\u6301\u3057\u3066\u3044\u308b\u3051\u308c\u3069\u3082\u88c5\u5099\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3092\u4f5c\u308a\u307e\u3059\u3002<\/p>\n<p>\u52c7\u8005\u306e\u30af\u30e9\u30b9\u3092\u4fee\u6b63\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; highlight: [13,28,29,30]; title: ; notranslate\" title=\"\">\r\npackage rpg.model;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport rpg.model.arms.Arms;\r\nimport rpg.model.item.Item;\r\n\r\npublic class Brave extends Chara {\r\n  private int exp = 1;\r\n  private int mp = 10;\r\n  private int gold = 0;\r\n  private Arms arms;\r\n  private List&lt;Arms&gt; armses = new ArrayList&lt;&gt;();\r\n  private List&lt;Item&gt; items = new ArrayList&lt;&gt;();\r\n  public Brave() {\r\n    hp = 10;\r\n    setName(&quot;\u30e8\u30b7\u30d2\u30b3&quot;);\r\n  }\r\n  public int getExp() {\r\n    return exp;\r\n  }\r\n  public void addExp(int p) {\r\n    exp += p;\r\n  }\r\n  public void setArms(Arms arms) {\r\n    this.arms = arms;\r\n  }\r\n  public void addArms(Arms arms) {\r\n    armses.add(arms);\r\n  }\r\n  public void addItem(Item item) {\r\n    items.add(item);\r\n  }\r\n\r\n<\/pre>\n<p>RpgFrame\u3067\u3001\u88c5\u5099\u3092\u62fe\u3046\u3068\u3053\u308d\u306e\u30b3\u30fc\u30c9\u3082\u4fee\u6b63\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 102; highlight: [106]; title: ; notranslate\" title=\"\">\r\n    } else if (isArmsFound()) {\r\n      \/\/ \u88c5\u5099\u3092\u62fe\u3046\u51e6\u7406\r\n      Arms arms = rpg.getArms();\r\n      Brave brave = rpg.getBrave();\r\n      brave.addArms(arms);\r\n      String msg = arms.getName() + &quot;\u3092\u898b\u3064\u3051\u305f\uff01&quot;;\r\n      JOptionPane.showMessageDialog(\r\n        this, msg,\r\n        &quot;\u30a2\u30a4\u30c6\u30e0&quot;, JOptionPane.INFORMATION_MESSAGE);\r\n    }\r\n<\/pre>\n<p>\u30d0\u30c8\u30eb\u306e\u753b\u9762\u3067\u52c7\u8005\u304c\u653b\u6483\u3059\u308b\u3068\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3059\u306e\u3067\u3001Brave\u30af\u30e9\u30b9\u3092\u4fee\u6b63\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 107; highlight: [108,109]; title: ; notranslate\" title=\"\">\r\n  public int getDealDamage() {\r\n    int ratio = 1;\r\n    if (arms != null) ratio = arms.getRatio();\r\n    return ratio;\r\n  }\r\n<\/pre>\n<p>\u6226\u95d8\u753b\u9762\u306b\u88c5\u5099\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u3001\u88c5\u5099\u3092\u5909\u66f4\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; highlight: [10,51,52,53]; title: ; notranslate\" title=\"\">\r\npackage rpg.view;\r\nimport java.awt.Container;\r\n\r\nimport javax.swing.BoxLayout;\r\nimport javax.swing.JButton;\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JLabel;\r\nimport javax.swing.JPanel;\r\n\r\nimport rpg.controller.ArmsAction;\r\nimport rpg.controller.BattleAction;\r\nimport rpg.controller.EscapeAction;\r\nimport rpg.controller.HealAction;\r\nimport rpg.controller.ItemAction;\r\nimport rpg.model.Brave;\r\nimport rpg.model.monster.Monster;\r\n\r\npublic class BattleFrame extends JFrame {\r\n  private Brave brave;\r\n  private Monster monster;\r\n  private BraveLabel braveLabel;\r\n  private JLabel expLabel;\r\n  private IconLabel monsterLabel;\r\n  private JPanel iconsPanel;\r\n  public BattleFrame() {\r\n    super(&quot;\u6226\u95d8&quot;);\r\n    Container pane = getContentPane();\r\n    pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));\r\n    expLabel = new JLabel(&quot;\u7d4c\u9a13\u5024:&quot;);\r\n    pane.add(expLabel);\r\n    iconsPanel = new JPanel();\r\n    iconsPanel.setLayout(new BoxLayout(iconsPanel, BoxLayout.X_AXIS));\r\n    JPanel buttonsPanel = new JPanel();\r\n    buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS));\r\n    pane.add(iconsPanel);\r\n    pane.add(buttonsPanel);\r\n    braveLabel = new BraveLabel();\r\n    iconsPanel.add(braveLabel);\r\n    JButton battleButton = new JButton(&quot;\u3053\u3046\u3052\u304d&quot;);\r\n    battleButton.addActionListener(new BattleAction(this));\r\n    buttonsPanel.add(battleButton);\r\n    JButton escapeButton = new JButton(&quot;\u306b\u3052\u308b&quot;);\r\n    escapeButton.addActionListener(new EscapeAction(this));\r\n    buttonsPanel.add(escapeButton);\r\n    JButton healButton = new JButton(&quot;\u304b\u3044\u3075\u304f&quot;);\r\n    healButton.addActionListener(new HealAction(this));\r\n    buttonsPanel.add(healButton);\r\n    JButton itemButton = new JButton(&quot;\u30a2\u30a4\u30c6\u30e0&quot;);\r\n    itemButton.addActionListener(new ItemAction(this));\r\n    buttonsPanel.add(itemButton);\r\n    JButton armsButton = new JButton(&quot;\u88c5\u5099&quot;);\r\n    armsButton.addActionListener(new ArmsAction(this));\r\n    buttonsPanel.add(armsButton);\r\n  }\r\n\r\n  (\u4ee5\u4e0b\u7565)\r\n<\/pre>\n<p>ItemAction\u3092\u30de\u30cd\u3057\u3066ArmsAction\u3092\u4f5c\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage rpg.controller;\r\n\r\nimport java.awt.event.ActionEvent;\r\nimport java.awt.event.ActionListener;\r\nimport java.util.List;\r\n\r\nimport javax.swing.JOptionPane;\r\n\r\nimport rpg.model.Brave;\r\nimport rpg.model.arms.Arms;\r\nimport rpg.view.BattleFrame;\r\n\r\npublic class ArmsAction implements ActionListener {\r\n  private BattleFrame battleFrame;\r\n\r\n  public ArmsAction(BattleFrame battleFrame) {\r\n    this.battleFrame = battleFrame;\r\n  }\r\n\r\n  @Override\r\n  public void actionPerformed(ActionEvent e) {\r\n    \/\/ \u88c5\u5099\u3092\u6301\u3063\u3066\u306a\u3051\u308c\u3070\u4f55\u3082\u3057\u306a\u3044\r\n    if (!hasArms()) {\r\n      JOptionPane.showMessageDialog(battleFrame,\r\n      &quot;\u88c5\u5099\u304c\u3042\u308a\u307e\u305b\u3093\u3002&quot;,\r\n      &quot;\u88c5\u5099&quot;,\r\n      JOptionPane.INFORMATION_MESSAGE);\r\n      return;\r\n    }\r\n    Object&#x5B;] armses = new String&#x5B;2];\r\n    armses&#x5B;0] = &quot;\u88c5\u5099\u306a\u3057&quot;;\r\n    armses&#x5B;1] = &quot;\u3072\u306e\u304d\u306e\u68d2&quot;;\r\n    Object armsName = JOptionPane.showInputDialog(\r\n      battleFrame, \r\n      &quot;\u88c5\u5099\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044&quot;, \r\n      &quot;\u88c5\u5099&quot;,\r\n      JOptionPane.PLAIN_MESSAGE, \r\n      null, \r\n      armses,\r\n      armses&#x5B;0]);\r\n    if (armsName == null) return;\r\n    Brave brave = battleFrame.getBrave();\r\n    if (armsName.equals(armses&#x5B;0])) {\r\n      brave.setArms(null);\r\n    } else {\r\n      List&lt;Arms&gt; armsList = brave.getArmses();\r\n      Arms arms = armsList.get(0);\r\n      brave.setArms(arms);\r\n      String msg = brave.getName() + &quot;\u306f\u3001&quot;\r\n                 + arms.getName() + &quot;\u3092\u88c5\u5099\u3057\u305f\u3002&quot;;\r\n      JOptionPane.showMessageDialog(battleFrame,\r\n      msg,\r\n      &quot;\u88c5\u5099&quot;,\r\n      JOptionPane.INFORMATION_MESSAGE);\r\n    }\r\n  }\r\n\r\n  private boolean hasArms() {\r\n    Brave brave = battleFrame.getBrave();\r\n    return brave.hasArms();\r\n  }\r\n}\r\n<\/pre>\n<p>ArmsAction\u3067\u52c7\u8005\u304c\u6301\u3063\u3066\u3044\u308b\u88c5\u5099\u306e\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3001Brave\u30af\u30e9\u30b9\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: java; first-line: 104; highlight: [112,113,114,115,116,117]; title: ; notranslate\" title=\"\">\r\n  public List&lt;Item&gt; getItems() {\r\n    return items;\r\n  }\r\n  public int getDealDamage() {\r\n    int ratio = 1;\r\n    if (arms != null) ratio = arms.getRatio();\r\n    return ratio;\r\n  }\r\n  public boolean hasArms() {\r\n    return armses.size() &gt; 0;\r\n  }\r\n  public List&lt;Arms&gt; getArmses() {\r\n    return armses;\r\n  }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u524d\u3001\u30b3\u30f3\u30bd\u30fc\u30eb\u30a2\u30d7\u30ea\u3067\u52c7\u8005\u304c\u3072\u306e\u304d\u306e\u68d2\u3092\u88c5\u5099\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3057\u305f\u306e\u3067\u3001\u6575\u3068\u906d\u9047\u3057\u305f\u308a\u30a2\u30a4\u30c6\u30e0\u3092\u62fe\u3063\u305f\u308a\u3059\u308b\u306e\u3068\u540c\u69d8\u306b\u3001\u88c5\u5099\u3092\u62fe\u3048\u308b\u3088\u3046\u306b\u5b9f\u88c5\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002 \u307e\u305a\u3001\u4ee5\u524d\u306b\u4f5c\u6210\u3057\u305f Arms \u30af &#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,17,2],"class_list":["post-170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java","tag-rpg","tag-2"],"_links":{"self":[{"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/170","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=170"}],"version-history":[{"count":6,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":176,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=\/wp\/v2\/posts\/170\/revisions\/176"}],"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=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/java.satoshis.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}