プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

Lua

無題

今月は別の作業に集中するので、本読みは4月頃再開予定。 まあ3月中に終わらなければ伸びる可能性もあるけど、とりあえず3月中を目処に作業中。あと暇な時にでも次に作成するプログラムの資料用に構文解析のアルゴリズムなどを調べて載せるかも知れない。 効…

アドベンチャーゲームのアルゴリズム

遊びのレシピの2章を読みながら適当にメモ アドベンチャーゲームとは? 小説のようなゲームから育成ゲームなど幅広い種類のゲームがある。 システムに手を加えることで別の種類のゲームを作ることが出来る。 他のゲームの基礎となる仕組みを持ったゲーム。 …

WindowsでのLua開発(Macでも可)

Lua

Windows上でLuaの開発環境をいくつか使ってみた感想。 それぞれの開発環境のメリットデメリット。よく考えてみたら全部Macでも使えるツールだった。 VimにTrinityプラグインとlua-supportプラグインを導入 メリット ctagsが使える(Macしか試してない) Vim…

日経ソフトウェア4月号の記事とスクリプト言語による効率的ゲーム開発7章を読んで

Lua

ゲームシステムを内部DSLで記述したら面白そうだと思いました。 DSLというのはドメイン特化言語といって、SQLのように特定の分野に特化した言語のこと。 また、SQLのように独立した言語を外部DSL、言語内において新たに定義された文法を内部DSLと呼ぶ。内部D…

Luaの文法で遊ぶ2「リファレンスチェーン」

Lua

リファレンスチェーンを簡単に利用できるように分解してみた。 サンプルプログラム --リファレンスチェーン生成関数 local function ref(t, call) return setmetatable({t}, { __index = function (self, k) table.insert(self, k) return self end, __call …

Luaの文法で遊ぶ

Lua

昨日のクエリクラスは__indexを利用して、オブジェクトと"."で参照された要素名を処理関数に渡すという手法で作成した。 クエリクラスの実装は非効率的だが、呼び出しの文法は中々面白い形になったと思う。 速度の必要の無い部分であれば導入してもよさそう…

Luaでレコードアクセス2

Lua

前回の記事ではレコードの集合から条件に一致したものを抽出するメタテーブルを作成した。 しかし前回の方法は条件と等しいレコード("==")の抽出にしか対応していないため、あまり有用ではない。 そこで今回は抽出方法を拡張し、もっと柔軟にレコード操作…

Luaでレコードアクセス

Lua

遊びで書いたコードなので実用的ではないけど、発展させれば面白いかも知れない。 SQLとは文法が違うけど意図としてはそういう感じ。たとえばLuaで以下の様なレコードがあった時に records = { {name="takashi", age=20}, {name="takeshi", age=21}, {name="…

LuaをC/C++プログラムに組み込む

スクリプト言語による効率的ゲーム開発 5章5章はどのような内容かというと、VistualStudioでLuaを組み込む所から始まり、RPGに出てくるような「道具屋」をテキストベースで作成する。 この章にはC関数をLuaへ公開するためのグルーコードを自分で組む手順も載…

スクリプト言語Lua

スクリプト言語による効率的ゲーム開発 4章4章はLuaの文法のまとめだったのでサラッと流すことにした。 一応Luaと他の言語の違いを紹介しておく。 配列のインデックスは1から始める。 変数に宣言と型は要らない 条件の偽はnilとfalseのみ 数値型は通常だと実…

Luaのオブジェクト指向プログラミング考察4

Lua

Luaのポリモーフィズム。 オブジェクト指向シリーズということで多様性についての考察。 --クラス定義 a = {f = function (self) print("aのメソッド") end} b = {f = function (self) print("bのメソッド") end} --o:f() --> 初期化前に呼ぶとエラー --汎用…

Luaで列挙型(enum)

Lua

Luaではグローバル変数の宣言が必要ないため、スペルミスしてもすぐには気づけない。 たとえ変数名が間違っていたとしても、nil値として判定されてしまうからだ。以前にグローバル変数で定数を定義した時に、綴りを間違えてしまいバグが発生したことがある。…

Lua5.1とLua5.2の互換性

Lua

現在はLua5.1を使用中。まだ5.2へ移行する予定はないが、いつでも移行できるように注意すべきポイントを把握しておこうと思う。 具体的にはココを読んでおけばオッケー(手抜き) http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#8.1 とりあえずLua5.…

Luaでメソッドチェーン2

Lua

大した話ではないけど前回の続き。 アクションクラスの一部を修正する function Action:die() print(self.name .. "は死んだ") coroutine.yield(true) return self end メイン taro = Action:new{name = "太郎"} move = coroutine.wrap(function () taro:lef…

Luaでメソッドチェーン

Lua

jQueryのようなメソッドチェーンを作る。 ていうか作るのは簡単だけど使い所を見つけるのが難しいような気がする。 パスを書いたりアクションを記述するには良いかもしれない。 アクションクラス Action = {} function Action:new(o) self.__index = self re…

cocos2d-x LuaでBox2D+sqlite3

OpenQuickというライブラリを組み込むことでBox2Dとsqlite3のLuaAPIを利用できる。 http://www.cocos2d-x.org/news/88MITライセンスでオープンソース。 まだ試してないけど期待。ZeroBrane StudioのIDEで開発できるらしい。 ZeroBrane Studioは使用したこと…

スクリプト言語の選択

スクリプト言語による効率的ゲーム開発 3章ゲームに組み込むことができる汎用スクリプト言語はいくつか存在する。 それらの言語の選択基準についての解説の章。 流し読みする。 ライセンス 規約によってはソースの開示が必須だったりする。 比較的商用利用し…

ゲーム開発をスピードアップする

スクリプト言語による効率的ゲーム開発 2章 30回の微修正を25分で行う方法 前章では30回の微修正に1時間25分かかるという例を挙げた。 しかし、そのうち頭を使う必要があるのはコーディングと修正部分の確認だけである。微修正をコーディングと確認だけで済…

ゲームの開発速度は十分ですか?

スクリプト言語による効率的ゲーム開発 1章この本はスクリプト言語を使ってしあわせになろうという本。 例としてLua&C++での作り方が載っている。 「スクリプト言語なんて使わなくてもC++で組めばいいじゃん。速いし」 そう考えるのはちょっと早い。 ゲーム…

Luaのモジュールを穴が空くまで見つめてみる

Lua

Luaで組むならモジュールは避けて通れない。必須と言ってもいい。 今回はそんなモジュールについての解説・・・というか、自分が今理解している内容の確認のためにプログラムを組んでみる。 追記: Lua5.2からはコンセプトが変わり、module関数とsetfenv関数…

iphone上でLuaのバイトコードを生成する

cocos2d-xで使うLuaをバイトコードへ変換する方法を探ってみた。 バイトコードへ変換するとロード速度が上がる。また、難読化にも繋がる。 一般的な方法ではバイトコードの生成にluacを使う。 コマンドをたった1行打つだけでLuaのバイトコードを生成すること…

Luaでオブジェクト指向プログラミング考察3

Lua

先日の考察ではLuaのクラスでプライベート変数を扱った。 しかし、以前のプログラムではオブジェクトの解放後もプライベート変数がメモリ上に残ったままになってしまう。 private.lua local _M = {} local _ = {} --プライベート変数を保持するテーブル func…

ブログ記事整理

Lua

Programming in Luaに関する記事を削除した。このブログでは主に読んだ本の内容を元に記事を書いている。 しかしLua本の記事は自分の言葉で書いた部分があまりにも少なかったため、いずれ削除しようと思っていた。 ちょうど新しい本も読み始めたので、これを…

Luaのオブジェクト指向プログラミング考察2

Lua

昨日の記事ではLuaのモジュールでクラス定義とプライベート変数を扱う方法について考察した。 今回はモジュールで継承とプライベート関数を表現する方法を考える。 ディレクトリ構成 libs/mod.lua libs/sub.lua main.lua 親クラス(mod.lua) local _M = {} …

Luaのオブジェクト指向プログラミング考察

Lua

モジュールでクラス定義を行う方法。 ついでにプライベート変数を定義する方法も。※この記事のプライベート変数定義には問題があるため考察3も参照 モジュール定義(mod.lua) local _M = {} local _ = {} --プライベート変数を保持するテーブル function _M…

cocos2d-x Lua RPGのサンプルほぼ完成

iPhone/iPad/iPod touchプログラミングバイブルのサンプルゲームをLuaで組んでみる。の続き(iOS5版のサンプルプログラム) マップ移動、戦闘、ゲームオーバー、エンディングと言ったひと通りのロジックを作成した。今回のRPGの作成ではC++側はノータッチ。…

Luaの統合開発環境「Lua Development Tools」を試す

Lua

trinity.vimプラグインを入れるとVimをIDEのように使うことができるようになる。 そこでふと、LuaのIDEにはどのようなものがあるのかと思い調べてみたら「Lua Development Tools」というのがあったので入れてみた。 窓の杜の紹介記事 http://www.forest.impr…

vimでLuaのソースからC関数のソースへジャンプ

Luaで組んでいるとcocos2d-xの関数のソースを見たくなることがよくある。 今まではxcodeを同時起動して探していたけれど、ctagsで探せるようになったのでやり方をメモ。 若干重いのでまだ試用段階。 MacPortsでExuberant Ctagsを入れる Exuberant Ctagsのイ…

cocos2d-x Luaでゲーム作り2

RPGの続き マップ移動と当たり判定を組んだ あとはパラメータと戦闘を組んで終わり。 ちょっとアレっと思ったのはgetPostionがCCPoinstではなく複数の戻り値を返すこと。 CCPointで欲しい時はobj:getPositionLua()を呼ぶか、cpp(obj:getPosition())のような…

cocos2d-x Luaでテクスチャアトラス

今回はこちらのサイトを参考にした。 cocos2d-xにおいてTexture Atlasを利用する方法(iOS, Android)C++でのコードは次のようになる。以下転載 アプリで画像ファイルを用意する場合、Texture Atlasを利用することで メモリを大幅に節約することが可能です。…