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

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

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

ファイル一覧

  1. doubleBuffer.ts

実装

doubleBuffer.ts

  1. abstract class Actor {
  2. constructor(name: string) {
  3. this.name_ = name;
  4. this.currentSlapped_ = false;
  5. };
  6.  
  7. abstract update(): void;
  8.  
  9. public swap(): void {
  10. this.currentSlapped_ = this.nextSlapped_;
  11. this.nextSlapped_ = false;
  12. }
  13.  
  14. public slap(): void { this.nextSlapped_ = true };
  15.  
  16. public getname(): string { return this.name_ }
  17.  
  18. protected wasSlapped(): boolean { return this.currentSlapped_ };
  19.  
  20. protected name_: string;
  21.  
  22. private currentSlapped_: boolean;
  23. private nextSlapped_: boolean;
  24.  
  25. }
  26.  
  27. class Commedian extends Actor {
  28.  
  29. // 顔の向き
  30. public face(actor: Actor) { this.facing_ = actor };
  31.  
  32. public update(): void {
  33. // console.log("name,wasSlapped : " + this.name_ + "," + this.wasSlapped())
  34. if (this.wasSlapped()) {
  35. // 自分が叩かれてたら、こんどは顔が向いている方向にいる役者を叩く(どんなコメディだよ)
  36. this.facing_.slap()
  37. console.log(this.name_ + "が" + this.facing_.getname() + "を叩く★★★★★★★★★★★★。")
  38. } else {
  39. console.log(this.name_ + "が" + this.facing_.getname() + "を叩かない。")
  40. }
  41. }
  42.  
  43. private facing_: Actor;
  44.  
  45. }
  46.  
  47. class Stage {
  48. public add(actor: Actor, id: number): void {
  49. this.actors_[id] = actor;
  50. }
  51.  
  52. public update(): void {
  53. this.actors_.forEach(actor => {
  54. actor.update();
  55. });
  56.  
  57. this.actors_.forEach(actor => {
  58. actor.swap();
  59. });
  60. console.log("幕間1フレーム-------------------------------------")
  61.  
  62. }
  63.  
  64. public reset(): void {
  65. this.actors_.length = 0;
  66. console.log("reset : ------------------")
  67. }
  68.  
  69. private actors_: Array = []
  70. }
  71. // ここから本処理
  72. //準備
  73. let stage: Stage = new Stage();
  74. let aaa: Commedian = new Commedian("aaa");
  75. let bbb: Commedian = new Commedian("bbb");
  76. let ccc: Commedian = new Commedian("ccc");
  77. aaa.face(bbb);
  78. bbb.face(ccc);
  79. ccc.face(aaa);
  80. stage.add(aaa, 0)
  81. stage.add(bbb, 1)
  82. stage.add(ccc, 2)
  83. // 動かす
  84. aaa.slap(); //まず叩く。
  85. stage.update(); // コメディスタート : このフレームでは誰も叩かない
  86. stage.update(); // aaaがbbbを叩く
  87. stage.update(); // bbbがcccを叩く
  88. stage.update(); // cccがaaaを叩く
  89. stage.reset();
  90. stage.add(aaa, 2);
  91. stage.add(bbb, 1);
  92. stage.add(ccc, 0);
  93. stage.update(); // aaaがbbbを叩く
  94. stage.update(); // bbbがcccを叩く
  95. stage.update(); // ccc->aaa
  96. stage.update(); // aaa->bbb
  97. stage.update(); // bbb->ccc

所感

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

コメント

このブログの人気の投稿

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

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

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