2005-04-01から1ヶ月間の記事一覧
テンプレートメソッドとストラテジーメソッド テンプレートメソッドとは、細かい部分でのアルゴリズムの交換を容易にする方法です。 例えば、シミュレーションRPGのユニットを実装してみます。 Pythonで実装すると以下のようになります。 <unit.py> cla…
ウェーブフォーム オーディオ データのフォーマットを定義します。 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("偶数です。"); でいいような気がするけど、ビット演算を使用すれば もうちょっと速いプログラムが書けるみたい…
フライ級 フライ級は共通のコンポーネントを参照することにより、 軽量なクラスを実現することです。 たとえば、トークンに描画機能を持たせる場合に、 各トークンが「グラフィックスオブジェクト」を生成するのは、 リソースの無駄になります。 かといって…
シングルトンクラス シングルトンクラスとは、そのアプリケーション内で、 そのインスタンスが「唯一」であることを保障するものです。 これをゲームに適用する場面としては、 サウンドカード、グラフィクスカードなどのデバイスクラス 唯一のファクトリクラ…
洞窟物語(Studio Pixel)をやっていて気になったのですが…。 このゲーム、「一発死」が多いです。 通常「一発死」は、プレイヤーにとってあまりいい印象を与えません。 気分良くプレイしていたものが、突然中断されるからです。 「一発死」は、そこでやり直…
ファクトリクラス ファクトリクラスとは、「インスタンスを生成するクラス」のことです。 例えば、ファクトリクラスは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の内容をまとめただけですが…。
Javaゲームプログラミングアルゴリズム (CD付)を読んでたら、 なにげにスクリプトがのっていたので参考までに。 sleep [n] スクリプトの実行をnフレーム停止する。 Enemy1 [x],[y] Enemy1を座標(x, y)に出現させる。 wait 画面上から全ての敵がいなくなるま…
(※参考:ゲームクリエーターズバイブル) 今日は「属性」について書きます。 「属性」はゲームにとって重要な概念です。 例えばシミュレーションRPGでは「火の属性」とか「水の属性」などがあって、 属性間の相性により、ダメージ量が変化しますよね。 この…
まだLPDIRECT3DTEXTURE9(テクスチャ)とLPD3DXSPRITE(スプライト)しか使えていないので、 どちらが原因か分からないのですが、 画像サイズが縦横共にでないと、勝手に画像サイズを伸ばしたりしちゃうみたいです。 (バージョンはDirectX9.0bです)
(参考:ゲームクリエーターズバイブル) 実は現代的なゲームを設計する場合、昨日のようなFSM図では力不足といえます。 それは、 状態遷移の過程 属性 といったものの記述ができないからです。 「状態遷移の過程」というのは、 通常のトークンは状態遷移す…
今日もゲームの設計手法について書きます。 (参考:ゲームクリエーターズバイブル) ちなみにどの工程で役に立つのかというと、 ゲームデザインが終わった「基本設計〜詳細設計」のあたりになると思います。 さて、トークンが複雑に状態遷移する場合には、 …
昨日の続きです。 (元ネタは、ゲームクリエーターズバイブルです。) では、トークンの相互作用表って、どうやって書くの? ということで、、、こんな感じです。 この表は、あるトークンと別のトークンが「衝突」した場合の相互作用表になります。 バッテン…
出版されているゲームプログラム本って、 (当たり前ですが)設計手法についてはほとんど書かれていないんですよね…。 何かいい情報はないかなー、などと思っていたら、 見つけましたよ、お母さん!ゲームクリエーターズバイブル作者: アンドリューローリン…
http://www5f.biglobe.ne.jp/~kenmo/program/shooting/shootingScript2/shootingScript2.html このレベルで中級とは差し出がましいのですが…。 とりあえずはこれで、シューティングのスクリプトは終了。ふい〜。 まだ、以下のような課題を残したままですが……
365 feat.DELIアーティスト: AI,DELI,UZI出版社/メーカー: ユニバーサル シグマ発売日: 2005/02/09メディア: CD クリック: 11回この商品を含むブログ (8件) を見るAI feat. DELI という文字を見て迷わず借りました。(´ー`) AQUARIUS色がいい感じに出てま…
xを変化させることにより、yを決定する場合、 xを説明変数、yを従属変数と呼ぶ。 特に説明変数が1つである場合、「単回帰分析」と呼び、 2つ以上である場合は、「重回帰分析」と呼ぶ。 係数a,bを決定するためには、「最小自乗法」を利用する。 データの個…
今更ですが、、。 Vector: ソフトライブラリ&PCショップ - 国内最大級の フリーソフト ダウンロードサイト 久々にゲームで笑ったかも。 ワンキーゲームは偉大ですねぇ…。
敵の思考ルーチンの決定要素となる「評価関数」の精度を上げるために、 「回帰分析」を使って重み係数を決めるといいみたいです。 (リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS)の4章) 回帰分析とは…
今日からようやく学校が始まりました。 今日は画像処理で、Bitmapを読み込んでヘッダ情報を書き出すというものでした。 しかし、、、残念ながら時間内に完成できず、 Cのファイル入出力と文字列処理やらが理解できてないことが判明してしまいました、、。 よ…
動かすタイミングについて、かなり悩んだのでメモ。 敵の行動のパターンとしては、 座標の移動 弾を撃つ という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) + "…