読者です 読者をやめる 読者になる 読者になる

大学生からの Web 開発

廃れない技術よ 我が身に

Java で人狼のキャラクターモデルを定義する

Android Java

最近は Android アプリのリリースを目標として、コードを書いている。

Android アプリ開発で必要となる Java の習熟度が高くなくて、入門書片手に、な状況だ。「スッキリわかるJava入門」という本がとても分かりやすくて、それでの継承を扱った章を読んでから、一気に世界が開けた感がある。コード中に出てくることに慣れない implementsinterface といった単語ももう大丈夫だ。

スッキリわかるJava入門 第2版

スッキリわかるJava入門 第2版

どんな Android アプリを作るか

Java に入門する以前考えていたものと、現在つくりたいと思っているものは違っていて、今は 「人狼ゲームマスターを務めてくれるアプリ」を開発しようと思っている。

なぜ人狼ゲームアプリかと言うと理由はいくつかある。

  • スッキリわかるJava入門に掲載されている例は、ゲームを題材にしたものばかりでそういうものの振る舞いを実装することに楽しさを感じる
  • 基本的な役職のみ登場させれば難しくなさそう
  • 自分たちで遊べる
  • 友達に紹介しやすい

下の2つがけっこう大きな理由で、身近な人に遊んでもらってフィードバックが得られれば嬉しみがある。でも、人狼はめちゃくちゃ好きってわけでもないです。

キャラクターモデル

書いた。バッと書いたので、ミスありそう。

誤りや、こうした方がいいよ という点を指摘してもらえるとすごく助かります。

// lynch: 人間が処刑
// maul: 人狼がやる

public abstract class Character {
  private int lynchCount = 0;
  private int maulCount = 0;

  public abstract boolean isWerewolf();

  public int getLynchCount() {
    return this.lynchCount;
  }

  public void setLynchCount(int lynchCount) {
    this.lynchCount = lynchCount;
  }

  public int getMaulCount() {
    return this.maulCount;
  }

  public void setMaulCount(int maulCount) {
    this.maulCount = maulCount;
  }


  public void pollLynch(Character chara) {
    chara.setLynchCount(chara.getLynchCount++;)
  }

}

// 村人
public class Villager extends Character {
  private boolean isWerewolf = false;

  @Override
  public boolean isWerewolf() {
    return this.isWerewolf;
  }
}


// 預言者
public class Seer extends Character {
  private boolean isWerewolf = false;

  @Override
  public boolean isWerewolf() {
    return this.isWerewolf;
  }

  private boolean see(Character chara) {
    return chara.isWerewolf();
  }
}

// 人狼
public class Werewolf extends Character {
  private boolean isWerewolf = true;

  @Override
  public boolean isWerewolf() {
    return this.isWerewolf;
  }

  // 人狼が複数人の場合を考慮して、kill ではなくあくまで投票とする
  private void pollMaul(Character chara) {
    chara.setMaulCount(chara.getMaulCount++;)
  }
}

前のアプリ

人狼アプリを作ろうと思う前は、「モンスターストライクの全国マルチを中継する掲示板アプリ」を開発しようと考えていた。

知らない人に説明すると、モンスターストライクっていうスマホゲーは、クエストの URL を送信することで、離れた場所にいる人ともマルチプレイができるんだけど、それは(LINE に登録されている)身内としかできない仕様になっている。それをモンスト掲示板アプリは、全国の強いプレイヤー・自分に都合の良いプレイヤーと協力するようにするものだ。

なぜやめたか

  • モンストのアップデートに追従して、アプリを更新しないといけない
    • 新しいボスモンスターが実装されたら、そのクエストを募集するためのメニュー追加が必要だったりで、しんどい
  • モンストはクエストに行ける時間帯が限られていて、人気のクエストの時間になるとサーバーが耐えられるのか不安だった
    • クエストは最大4人までしか行けなく早い者勝ちといった様相で、掲示板アプリは、とにかく更新ボタンを連打して一番上に出てきた部屋のリンクを押して、入れなかったらまた更新を連打……といった使われ方になる。
  • モンストに飽きた
    • 飽きてやめちゃってスマホにはもう入ってないくらいなので、作っても自分には役に立たない
    • これが一番大きい