2009-01-01から1年間の記事一覧

趣味と仕事

趣味のプログラムはひたすら楽しい部分の作成を行う 仕事のプログラムはひたすらエラーチェックを行う

データ整合性チェックについてうんたらかんたら

まったく更新していないのでたまには、何か書くかなってことでデータ整合性チェックについて 以前(2か月前)に書いたCRCチェックのプログラムは、PSPのデータインストール時の整合性チェック用に つかったもの。本来であれば、より安全性の高いMD5を使うべき…

CRC32を求めるCのコード

Javaしか書いていなかったのでC版も書いておく #include <limits.h> typedef unsigned char uint8; typedef unsigned long uint32; static const uint32 CRC32Table[] = { 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E4</limits.h>…

開発機が安くなった

PSP

http://www.itmedia.co.jp/news/articles/0906/03/news057.html 50万円から15万円に下がった。 でも個人じゃ手を出す気になれないよね。 IDEはCodeWarriorしか対応していないし、個人で購入できるかどうかは不明だし。 他の開発環境はgccを直接使うしかない…

PSPの浮動小数点の処理遅すぎ

最近お仕事ないの・・・お金は入ってくるけどね そんなわけで、PSPで3D周りをちょくちょくいじって遊んでいます。 ソフトはMetasequoiaを使い、保存したファイルがテキスト形式なので そいつを読み込んで、PSPで表示している。 それにしても読み込みが遅い!…

プログラム容量のお話

Windowsでゲームを製作するときは、プログラムの容量を考えることなどないが 携帯電話、携帯ゲーム機などでは、メモリが少ないためプログラム容量を考える必要が出てくる。 PSP開発をしているときは、STLは普通に使用しているがBoostは使おうとは思わない。 …

とらドラP!

4/30発売のとらドラP!のメインプログラムを担当しました。 PSP初&コンシューマ初のゲーム製作となります。 この日記は4/30に書こうと思ったのですが、すでにフライングでプレイで来ている人がいるため 今日書いてしまいます。 とらドラP!には様々な要素を入…

定数の記述場所

外部に公開する必要があるものはヘッダーに 公開する必要がないものは、cppファイルに書きましょう。

アロケータの使い方

作成したアロケータの使い方 #include <vector> // 64バイトアラインメントでメモリ確保を行うvector std::vector<char, CAllocator<char, 64> > buffer;</char,></vector>

アロケータの作り方

STL標準のstd::allocatorには、アラインメントを操作する機能がないので 確保したいメモリのアイランメントを設定したい場合、自前でアロケータを作る必要がある #include <malloc.h> typedef unsigned long uint32; // デフォで4バイトアラインメント template <class T, uint32 N = 4> class</class></malloc.h>…

セーブとロードでの型違いは×

固定長のものはセーブとロードが同一環境であるならば、構造体にして その構造体をそのままセーブ、ロードすることで問題ない。 しかし、可変長のものはそうはいかないので、可変した際の数やらなんやらを保存しなくてはいけない。 今回、std::mapを使ってい…

戻り値ありの関数で

値を返さない(return;)は未定義動作だ。 大抵のコンパイラは警告を出してくれるから、気付こうね。

ひどいプログラムを見た

こんなのがあった。一瞬何をやっているかわからなかった。 if (IsHoge()) { // いろいろ } else if (IsHogeHoge()); else { // いろいろ } 普通こうだろ if (IsHoge()) { // いろいろ } else if (!IsHogeHoge()) { // いろいろ }

メモリプールを活用しよう

メモリが非常に厳しい環境でゲームを作る場合、最低でも1つメモリプールを作成しよう。 グローバルnewやmallocは通常のメモリからメモリを確保し、画像やサウンドなど メモリ消費が多いものはメモリプールを使うようにする。 そうしないと、メモリの断片が発…

メモリが少ないときは、std::mapよりstd::vectorを使用しよう

現在サウンドノベルを作成しているのだが、すでに一度通過したことがある場所は スキップを行うことができるようにするという処理を導入する場合、スクリプト命令一つにつき 変数一つを用意して0を代入しておき、通過したら1を代入する。 スキップ処理の開始…

std::vectorのメモリ解放

vecotrで確保したメモリは、clearメソッドを呼んでも解放されず デストラクタが来るまではずっとメモリを確保している。 そこで、以下の方法で解放することができる。 std::vector<int> hoge; // hogeのresizeとclearを繰り返す。 // 解放 std::vector<int>().swap(hog</int></int>…

2009年の抱負

2009年の抱負は、ダイエットと質素倹約である。 ダイエットは早くも挫折しそうだが、質素倹約はいい感じである。 今のペースだと給与の3/4は貯蓄できそうだ。 抱負の追加として、この日記を一日一回更新にしようと思う。 以前は携帯電話のプログラムだったの…