2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

日本情報クリエイト EngineersAdvent Calendar 2016

Day 21

ゲームのデバッグと単体テスト

Posted at

はじめに

今作っているゲームで実際にやっているデバッグと単体テストのやり方を紹介します
ただし、全て我流です!参考になるやらならないやら!
ちなみに、例やコードで書いてある内容は実際に作っているゲームの内容とは一切関係ありません。
RPGっぽい例を出していますが、実際に作っているのはRPGではありません。

サクサクデバッグしたい!

ゲームのデバッグは、特定の条件下でデバッグをするのが困難な場合が多くあります
例えば、強力な敵キャラの動作テスト、特定のアイテムを持っている場合のテスト
などなど・・
そういう場合は、デバッグ値で無敵状態、最初からアイテムを持っている状態などを
作ってからデバッグします
敵からのダメージの値が正しいか、経験値が正しいかなど、ゲームバランスに関わるような処理などは
いちいち動作確認していられないので、単体テストが非常に有効です

実際にやってみる

デバッグ用のファイルを用意します
ここでは無敵状態などのフラグの制御だけではなく、
ゲームロード時に任意の値を呼び出せるようにしておくと便利です

debug.coffee
class Debug extends Node
  constructor: () ->
    super
    @muteki = true; #無敵
    @test_load = { #セーブデータのロード時にこの値を強制的に呼び出す
      'level':99, #レベルカンスト
      'items':['oriharukon','misuriru'] #アイテムを最初から持ってる
    }

単体テスト用のコードを書くファイルです
ダメージ計算式など、複雑な条件が絡み合う計算などで重宝します

test.coffee
class Test extends Node
  constructor:()->
    super
    @test_ext_flg = true #テスト実行フラグ、trueだとゲーム呼び出し時にテスト関数を走らせる
  textExe:()->
    game.damageCalc() #ダメージ計算式を実行

ゲームのメインで使うシーン以外に、
テスト用のシーンを用意しておきます

test_scene.coffee
class testScene extends Scene
    constructor: () ->
        super

ゲームクラス内で実行します

my_game.coffee
class MyGame extends Game
  constructor:()->
    super
    @debug = new Debug()
    @test = new Test()
  onload:()-> #ゲーム呼び出し時に実行する
    if @test.test_exe_flg is true
      @test_scene = new testScene() #テストフラグが立っていたらテスト用のシーンを実行
      @pushScene(@test_scene)
      @test.testExe()
    else
      @main_scene = new mainScene() #通常はゲームを開始する
      @pushScene(@main_scene)

enchant.jsでのシーンの概念について、興味のある方はこちらを参考にしてみてください。
http://www.atmarkit.co.jp/ait/articles/1304/01/news034_4.html

さいごに

メモリ内変数が複雑に変化し、絡み合うゲーム開発では
デバッグとテストのやり方を効率的にすることで、開発はより快適になります
このデバッグとテストのクラスを丁寧に整備していけば、
再現条件が難しいバグを発見したときでも、サクサクデバッグができるようになります。

次回

次回はenchant.jsでHTMLタグとCSSを使う方法をやろうと思います。
基本的にenchant.js内で使われるタグはcanvasタグ(Spriteクラス)ですが
任意のHTMLタグを使用することも出来ます。
メニューボタンなどを作る時にsurfaceでボタンを描画してlabelで文字を書くのは面倒ですし、
画像を使わず容量節約もしたいです。
これでサクサクとリッチなボタンを作ります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?