Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装

Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装

お勉強。
1フレーム(update())ごとにバッファを入れ替える。

ファイル一覧

  1. doubleBuffer.ts

実装

doubleBuffer.ts

abstract class Actor {
  constructor(name: string) {
    this.name_ = name;
    this.currentSlapped_ = false;
  };

  abstract update(): void;

  public swap(): void {
    this.currentSlapped_ = this.nextSlapped_;
    this.nextSlapped_ = false;
  }

  public slap(): void { this.nextSlapped_ = true };

  public getname(): string { return this.name_ }

  protected wasSlapped(): boolean { return this.currentSlapped_ };

  protected name_: string;

  private currentSlapped_: boolean;
  private nextSlapped_: boolean;

}

class Commedian extends Actor {

  // 顔の向き
  public face(actor: Actor) { this.facing_ = actor };

  public update(): void {
    // console.log("name,wasSlapped : " + this.name_ + "," + this.wasSlapped())
    if (this.wasSlapped()) {
      // 自分が叩かれてたら、こんどは顔が向いている方向にいる役者を叩く(どんなコメディだよ)
      this.facing_.slap()
      console.log(this.name_ + "が" + this.facing_.getname() + "を叩く★★★★★★★★★★★★。")
    } else {
      console.log(this.name_ + "が" + this.facing_.getname() + "を叩かない。")
    }
  }

  private facing_: Actor;

}

class Stage {
  public add(actor: Actor, id: number): void {
    this.actors_[id] = actor;
  }

  public update(): void {
    this.actors_.forEach(actor => {
      actor.update();
    });

    this.actors_.forEach(actor => {
      actor.swap();
    });
    console.log("幕間1フレーム-------------------------------------")

  }

  public reset(): void {
    this.actors_.length = 0;
    console.log("reset : ------------------")
  }

  private actors_: Array = []
}

// ここから本処理
//準備
let stage: Stage = new Stage();
let aaa: Commedian = new Commedian("aaa");
let bbb: Commedian = new Commedian("bbb");
let ccc: Commedian = new Commedian("ccc");
aaa.face(bbb);
bbb.face(ccc);
ccc.face(aaa);

stage.add(aaa, 0)
stage.add(bbb, 1)
stage.add(ccc, 2)

// 動かす
aaa.slap(); //まず叩く。
stage.update(); // コメディスタート : このフレームでは誰も叩かない
stage.update(); // aaaがbbbを叩く
stage.update(); // bbbがcccを叩く
stage.update(); // cccがaaaを叩く

stage.reset();

stage.add(aaa, 2);
stage.add(bbb, 1);
stage.add(ccc, 0);
stage.update(); // aaaがbbbを叩く
stage.update(); // bbbがcccを叩く
stage.update(); // ccc->aaa
stage.update(); // aaa->bbb
stage.update(); // bbb->ccc


所感

TypeScript、まぁ書きやすいか。
自分は古い人なので、javaScriptよりはまぁやりやすいか。
型がわからなかったり、変数宣言が微妙だったりすると、
遊びで使ったりその場限りのツールならいいんですが、
マジモンのプロジェクトでは使いづらくって。

コメント

このブログの人気の投稿

windows10 で nvidia のグラボのcode43現象を解決した

GTX560Ti がおかしい(code 43が出る)(2018年)→解決しました(2019)

Java : processbuilder 標準出力 タイムアウト