ゲームプログラム

D言語でPlatinum

そろそろステージデータを使ったゲーム作りをしたいと思って作ってみた。 マップエディタはいつものように、「Platinum」 http://www.hyperdevice.net/ import std.file; /** * 2次元マップ<br> * ハッシュテーブルによる実装 */ class Layer2D { public: /** * …

フレームスキップ

どうやら、おめがさんが「RECT WINDER」に手を入れようとされている模様。 http://d.hatena.ne.jp/o_mega/20061109/1163033243 しかし、ソースコードを読んだところ、フレームスキップ処理を入れてないのにガッカリしたようです。 適当ですみません。 その点…

D言語にBulletMLを組み込む

D言語へBulletMLを組み込む方法 - ゲーム作者の集い[ゲームヘル2000] - アットウィキ ふー、書き終わりました。 kenmoが何でこんな文章を書き続けるのかというと、 まあ、自分の知識をひけらかしたい、ってのもあるのですが、 得た知識をしっかり自分の頭に…

D言語ゲームライブラリ「dHell」

D言語で簡単にゲームが作れるようにライブラリを作ってみた。 D言語ゲームライブラリ「dHell」 - ゲーム作者の集い[ゲームヘル2000] - アットウィキ ただし、機能は、 画像読込・描画(BMPのみ) BGM読込・再生(WAV/OGGのみ) 効果音読込・再生(WAVのみ) …

D言語ゲーム開発入門

とりあえず、一通りの情報は揃えてみました。 D言語ゲーム開発入門 - ゲーム作者の集い[ゲームヘル2000] - アットウィキ 今のところは「SDL」オンリーです。 今まで、 「D言語でゲーム作ってみたいけど、情報集めるの面倒だし、、」 と思っていた人に役に立…

2Dでの擬似グレア処理

http://d.hatena.ne.jp/o_mega/20060922/1158951079 グレア処理は3Dでしかできないと思っていたのですが、 2Dでも頑張ればできるのかー! とオドロキでした。 せっかくなので、HSPで実装して、やり方をゲームヘルにまとめておきました。 http://www5.atwiki.…

Flashシューティング

最近、Flashでちまちまと遊んでいます。 なんとかゲームっぽい体裁を整えたのがこちら。 http://blog58.fc2.com/k/kenmo/file/App.swf (※Flash Player 9 が必要でつ) 1週間ほど触り続けて、なんとなく思った、ActionScript 3(Flash)の強み Javaの仕様に…

レンズフレアの作り方

レンズフレアとは レンズフレアとは、 逆光を撮影したときにレンズ内で光が屈折してできる 輪っかや多角形の光のことです。 レンズフレアの具体的な画像については、Googleのイメージ検索で、、。 http://images.google.co.jp/images?q=%E3%83%AC%E3%83%B3%E…

リプレイクラス

すんげー難しいと思っていたのですが、 やってみたら意外に簡単でした。 なんというか、自分のプレイが1つ1つ再生されるのは、 ちょっとした感動モノでした。 で、やり方です。 とりあえずクラス図を、、(´∀`; ゲームにおいて、キーの入力判定として必…

ゲーム開発のためのオブジェクト指向

http://www5.atwiki.jp/yaruhara/pages/39.html 1週間ぐらいネチネチ更新して、ようやく完成しまちた。 kenmoもオブジェクト指向を1年ぐらい使い続けてきて、 最近ようやく机上の理論だけでなく、 実用的な方法も分かってきたような気がします。 まー、も…

レベルデザイン層の構築

はじめに レベルデザインを楽に作るためのツールとしては、 マップエディタ スクリプト データベース が三種の神器ではないかと思っています。 マップエディタ・スクリプト・データベースとは それぞれについて簡単に説明すると、、、 マップエディタとは、…

BulletMLによるシューティングゲームの構築

BulletMLを使ってシューティングゲームを構築すると、 こんな形に落ち着くのでは、というkenmoの実装例をメモ書き。 BulletML BulletMLはどんなものか簡単に解説しますと、 XMLを解析して「弾幕」を生成するだけです。 なので弾を発射する「敵」の動きは別に…

方向ベクトルと長さ

http://d.hatena.ne.jp/kenmo/20050817#p1 で 「移動量は極座標にするべきだにゃーー!!」 なんてことを書いたわけですが、 これにはちょっとした欠点がありまして、、。 それは、極座標同士の加算・減算の手順が面倒、ということです。 例えば、 45°方向に…

Pythonでのマイクロスレッド

http://www.gamasutra.com/features/20020821/dawson_pfv.htm を見て知りましたー。 Pythonだとこんなに簡単にマイクロスレッドが、実装できてしまうんですねー。 …今まで知らなかったのが悔やまれます、、。 ウサギとカメのゲーム #!/usr/bin/env python # …

Builderパターンによる調合システムの構築

今回は、Builderパターンを使って、最近はやりの「調合システム」を構築してみます。 kenmoの勝手な考察ですが、調合システムは、 単体では弱いが、組み合わせをすることにより強力なアイテムになる 「あとアレがあれば、強力なアイテムが作れるのにー」とい…

「えぐぜりにゃ〜」ソース解説4

最後に「敵の生成ロジック」を見ていきます (※バージョンは「exelinya_0214.zip」です) geneenemy 敵の生成はgeneenemyですね。(1128〜1182行目) まあ、そんなに長くないです。 (最新バージョンでは、生成ロジックが強化されているようですが、、) 敵…

えぐぜりにゃ〜ソース解説3

えぐぜりにゃ〜ソース解説の続きです。 (※バージョンは「exelinya_0214.zip」です) 今回は敵の移動関数の解説になります。 移動関数概要 ソースとしては、801〜1029行目が、敵の移動関数になります。 803行目は、存在チェックですね。 if(enemy_type(cnt) …

「えぐぜりにゃ〜」ソース解説2

前回はざっくりと移動関数を見ましたので、今回は細かく見ていきます。 (※バージョンは「exelinya_0214.zip」です) movemychar まずはプレイヤーの移動関数です。(498行目から) プレイヤーの移動関数は、以下の処理を行っています。 ライフの自動回復 キ…

「えぐぜりにゃ〜」ソース解説

色々と勉強になった「えぐぜりにゃ〜」のソースをkenmoなりに解説してみます。 シーンの状態遷移 まずはシーンの遷移について解説します。 34行目〜41行目の定数に注目します。 // 遷移状態ステート #define STATE_TITLE_INIT 0 #define STATE_TITLE 1 #defi…

Pygameでモーションブラー

で、早速モーションブラーを作成。 モーションブラーの原理は、 現在の描画内容をテンポラリに取っておいて、 次回描画時にテンポラリをアルファブレンドする、 だけです。 Pygameを使うとこんな感じ。 // ゲームループ while(True): // 一連の描画処理 … sc…

ゲーム開発のためのオブジェクト指向〜Mediatorによる衝突判定の分離

実は、kenmoが今作っているゲームのソースコードが結構大変なことになっちゃっていたりします。 というのは、ゲームのメインとなるシーンのクラス(SceneMain)に、 たくさんのTask(オブジェクト)がぶら下がっているからです。 …えーと、こんな感じ(´д`…

Mediatorを使った衝突判定処理の分離

とりあえず、Pythonのソースコードだけ。 解説は後日にて…。 class Task: """ タスク """ def __init__(self, name, x=0, dx=0): """ コンストラクタ """ self.name = name self.x = x self.dx = dx def update(self): """ 更新 """ self.x += self.dx if(se…

カットインの座標の算出方法

ゲームには、よく使う演出として、 オブジェクトが「ぎゅいーん」とカットインしてきて、 少しずつ減速しながら、ある位置にピタっと止まる演出がよくあります。 今回はそういった動きを実装する方法を解説します。 加速度を算出する方法 方法の1つとして、…

ゲームバランスの調整手法

逆引きゲームプログラミング (GAME DEVELOPER BOOKS)にのっていたのを自分なりにまとめてみました。 代表的なゲームバランスの調整手法 名称 内容 プログラム 例 ランク法 EASY/NORMAL/HARDなど、難易度を段階別にする 易しい 家庭用ゲームならほとんど レベ…

言語解析(書きかけ)

アドベンチャー用のスクリプトを構文解析した結果、 たぶんこんなコードに変換するだろう、という予想のメモ書き。 if文 ○解析前 if(式){ }○解析後 if, ifブロックの終端アドレス, 式(, ... , 終端文字) goto文 ○解析前 goto *ラベル○解析後 goto, ジャン…

言語解析

言語解析の流れ 言語解析は、大まかに以下の流れになります。 字句解析 構文解析 意味解析 コード生成 コード解析実行 字句解析 字句解析は、プログラムやスクリプトを「意味のある最小単位の文字列」に分解することです。 この最小単位をトークンといいます…

有限状態機械(Finite State Machine)

はじめに 有限状態機械とは、 「複数の『状態』を持ち、その『状態』により『振る舞い』が決定される抽象的な機械」 のことです。 具体的な例を挙げると、パックマンのモンスターがそれに該当します。 モンスターは、 移動 追跡 逃避 3つの「状態」を持ちま…

RPGにおけるスクリプト2

この前のスクリプトは、 条件分岐がない ラベルがない ということで、ゲームを作るのに、 使えないスクリプトであることが判明しました…!(´∀`; というのは例えば、 階段を降りますか? Yes→降りる No→降りない ということもできません(´Д`; というこ…

戦術SLGのゲームバランス

はじめに 今回は、タクティクスオウガのような戦術SLGの、 ゲームバランスについて考えてみます。 基本は「ジャンケン」 こういったゲームにおいて、基本となる考え方は、 ユニット同士の相性に「ジャンケン」のような関係を持たせることです。 例えば、「歩…

RPGにおけるイベントスクリプトの構造

昨日に続いて、RPGネタです。 マップに配置したイベントIDをキーに、イベントスクリプトを呼び出す、 という話だったのですが、 今回はその「イベントスクリプト」の構造に触れてみたいと思います。 イベントスクリプトは、 イベントID ├フラグ操作 └イベン…