2005-04-01から1ヶ月間の記事一覧

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

テンプレートメソッドとストラテジーメソッド テンプレートメソッドとは、細かい部分でのアルゴリズムの交換を容易にする方法です。 例えば、シミュレーションRPGのユニットを実装してみます。 Pythonで実装すると以下のようになります。 <unit.py> cla…

WAVEFORMATEX構造体

ウェーブフォーム オーディオ データのフォーマットを定義します。 WAVEFORMATEX wave; wave.wFormatTag = WAVE_FORMAT_PCM; // タイプ。「WAVE_FORMAT_PCM」を指定。 wave.nChannels = 2; // チャンネル数(1:モノラル 2:ステレオ) wave.wBitsPerSample = …

サウンドプログラム

初期化 サウンドフォーマットの指定(WAVEFORMATEX構造体に値を設定) 指定したフォーマットのサウンドデバイスが開けるかどうかwaveOutOpen()でチェック wavデータ作成 再生 waveOutOpen()でデバイスチェック・オープン wavバッファ確保 wavヘッダ設定(WAV…

動的にメモリを確保してファイルを開く

#include <stdio.h> #include <stdlib.h> void main() { // ファイルオープン FILE* fp = fopen("hoge.bmp", "rb"); if (!fp) exit(1); // ファイルサイズ計算 fseek(fp, 0, SEEK_END); int size = ftell(fp); // 動的にメモリを確保 unsigned char* p = (unsigned char*)malloc</stdlib.h></stdio.h>…

プリプロセッサ

#include <stdio.h> #define DEBUG 1 int main() { #if DEBUG printf("デバッグ中\n"); #else printf("本番です\n"); #endif return 0; }#define DEBUG 0 にすると、本番環境用のソースコードになります。</stdio.h>

関数ポインタ

続いて、C言語入門講座?です。 #include <iostream> using namespace std; bool (*p)(); // こいつが関数ポインタ bool Init(); bool MainLoop(); bool Finish(); bool Init(){cout << "Initialize..." << endl; p = MainLoop; return false;} bool MainLoop(){cout <</iostream>…

ビット演算

最近、C言語を基礎から勉強中です。 問題:変数nが「偶数」であるかどうかを求める式を書きなさい。 単純に考えると、 if(n % 2 == 0) printf("偶数です。"); でいいような気がするけど、ビット演算を使用すれば もうちょっと速いプログラムが書けるみたい…

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

フライ級 フライ級は共通のコンポーネントを参照することにより、 軽量なクラスを実現することです。 たとえば、トークンに描画機能を持たせる場合に、 各トークンが「グラフィックスオブジェクト」を生成するのは、 リソースの無駄になります。 かといって…

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

シングルトンクラス シングルトンクラスとは、そのアプリケーション内で、 そのインスタンスが「唯一」であることを保障するものです。 これをゲームに適用する場面としては、 サウンドカード、グラフィクスカードなどのデバイスクラス 唯一のファクトリクラ…

一発死

洞窟物語(Studio Pixel)をやっていて気になったのですが…。 このゲーム、「一発死」が多いです。 通常「一発死」は、プレイヤーにとってあまりいい印象を与えません。 気分良くプレイしていたものが、突然中断されるからです。 「一発死」は、そこでやり直…

ゲーム開発へのオブジェクト指向の適用1

ファクトリクラス ファクトリクラスとは、「インスタンスを生成するクラス」のことです。 例えば、ファクトリクラスはMakeXXXToken(type)というメンバ関数を持っています。 この関数は、引数で「トークンの種類」を受け取り、 指定したトークンをnewして、メ…

洞窟物語

今更ですが、洞窟物語*1(Studio Pixel)を今日一日、ずーっとやってました。 昔やろうとしたときは、序盤から難易度が高かったり、 独特の世界観がどうもしっくりこなくて、 やめてしまったのですが…、 今日、なにげに1時間ぐらいプレイしてみたら、 アク…

書籍購入

今話題のこの本を買いました。 http://book.mycom.co.jp/book/4-8399-1763-9/4-8399-1763-9.shtml 最近はプログラムの本を買ってばかりだったので、新鮮でしたね。 内容ですが、MonaOSのインストールからカーネルハッキングまで取り上げていて、 なかなか読…

ゲームの設計手法

http://www5f.biglobe.ne.jp/~kenmo/program/design/design.html 日記の4/17〜4/20の内容をまとめただけですが…。

シューティングのスクリプト5

Javaゲームプログラミングアルゴリズム (CD付)を読んでたら、 なにげにスクリプトがのっていたので参考までに。 sleep [n] スクリプトの実行をnフレーム停止する。 Enemy1 [x],[y] Enemy1を座標(x, y)に出現させる。 wait 画面上から全ての敵がいなくなるま…

より複雑なFSM図の設計2

(※参考:ゲームクリエーターズバイブル) 今日は「属性」について書きます。 「属性」はゲームにとって重要な概念です。 例えばシミュレーションRPGでは「火の属性」とか「水の属性」などがあって、 属性間の相性により、ダメージ量が変化しますよね。 この…

画像サイズ

まだLPDIRECT3DTEXTURE9(テクスチャ)とLPD3DXSPRITE(スプライト)しか使えていないので、 どちらが原因か分からないのですが、 画像サイズが縦横共にでないと、勝手に画像サイズを伸ばしたりしちゃうみたいです。 (バージョンはDirectX9.0bです)

より複雑なFSM図の設計

(参考:ゲームクリエーターズバイブル) 実は現代的なゲームを設計する場合、昨日のようなFSM図では力不足といえます。 それは、 状態遷移の過程 属性 といったものの記述ができないからです。 「状態遷移の過程」というのは、 通常のトークンは状態遷移す…

有限状態マシン図

今日もゲームの設計手法について書きます。 (参考:ゲームクリエーターズバイブル) ちなみにどの工程で役に立つのかというと、 ゲームデザインが終わった「基本設計〜詳細設計」のあたりになると思います。 さて、トークンが複雑に状態遷移する場合には、 …

トークンの相互作用表

昨日の続きです。 (元ネタは、ゲームクリエーターズバイブルです。) では、トークンの相互作用表って、どうやって書くの? ということで、、、こんな感じです。 この表は、あるトークンと別のトークンが「衝突」した場合の相互作用表になります。 バッテン…

ゲームの設計手法

出版されているゲームプログラム本って、 (当たり前ですが)設計手法についてはほとんど書かれていないんですよね…。 何かいい情報はないかなー、などと思っていたら、 見つけましたよ、お母さん!ゲームクリエーターズバイブル作者: アンドリューローリン…

シューティングのスクリプト4

http://www5f.biglobe.ne.jp/~kenmo/program/shooting/shootingScript2/shootingScript2.html このレベルで中級とは差し出がましいのですが…。 とりあえずはこれで、シューティングのスクリプトは終了。ふい〜。 まだ、以下のような課題を残したままですが……

今週借りたCD

CD

365 feat.DELIアーティスト: AI,DELI,UZI出版社/メーカー: ユニバーサル シグマ発売日: 2005/02/09メディア: CD クリック: 11回この商品を含むブログ (8件) を見るAI feat. DELI という文字を見て迷わず借りました。(´ー`) AQUARIUS色がいい感じに出てま…

回帰分析2

xを変化させることにより、yを決定する場合、 xを説明変数、yを従属変数と呼ぶ。 特に説明変数が1つである場合、「単回帰分析」と呼び、 2つ以上である場合は、「重回帰分析」と呼ぶ。 係数a,bを決定するためには、「最小自乗法」を利用する。 データの個…

G.S.G

今更ですが、、。 Vector: ソフトライブラリ&PCショップ - 国内最大級の フリーソフト ダウンロードサイト 久々にゲームで笑ったかも。 ワンキーゲームは偉大ですねぇ…。

回帰分析

敵の思考ルーチンの決定要素となる「評価関数」の精度を上げるために、 「回帰分析」を使って重み係数を決めるといいみたいです。 (リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS)の4章) 回帰分析とは…

Bitmap解析

今日からようやく学校が始まりました。 今日は画像処理で、Bitmapを読み込んでヘッダ情報を書き出すというものでした。 しかし、、、残念ながら時間内に完成できず、 Cのファイル入出力と文字列処理やらが理解できてないことが判明してしまいました、、。 よ…

シューティングのスクリプト3

動かすタイミングについて、かなり悩んだのでメモ。 敵の行動のパターンとしては、 座標の移動 弾を撃つ という2つのパターンがあります。 さらにこれらには準備段階があります。 移動量の設定 どんな弾を撃つかを設定 つまり、行動の「準備」をしてから行…

シューティングのスクリプト2

何度も書いてますが、 シューティングの敵の動きなんかは、スクリプトデータとして外部で定義しておくと、 動きの微調整が楽にできて、開発効率が上がります。 で、スクリプトの仕様を考えていたのですが、、、 なかなか難しいですね。 例えば「ラベル」を使…

クラス周り(2)

次に演算子のオーバーロードについて。 class Point2D: def __init__(self, x = 0, y = 0): self.x = x self.y = y def __add__(self, other): self.x += other.x self.y += other.y def GetString(self): return "(" + str(self.x) + "," + str(self.y) + "…