神代クロ のすべての投稿

ゲーム開発3:システム構成を確認する

5f7d4ba8.jpgいきなりDirectXまわりを組んでいこうと思ったのですが、考えも無しに組んでいくと後々破綻しそうなので、とりあえず過去に組んだシステム構成を確認してみました。

画像のツリーがそれで、クラス毎に書いてます。WinMainからはじまり、CSystemで全体の初期化をします。その時にCGraphics等でDirectX関連の初期化も行います。またCSystemはフレームレート等の基底システムを司ります。

CGameModeは各モードの基底クラスで、タイトル画面だとか、エンディングとか、その時どきのシーンを派生します。

CMainModeがゲームプレイ時のシーンです。この中にキャラクタや移動するフィールドなんかを詰め込んでます。

図では分かりづらいですが、CMainMode等はCGameModeを継承、CMyChara等はCCharaを継承しています。

基本はこの構成で良さそうですね。ただこの過去のシステムでは、DirectXに依存する部分の隠蔽化が不十分だったため、今回ゼロから組み直すハメになったので、そこは気をつけてみます。

図を眺めてまず最初にやるのは、やはりCSystemクラスですね。その後DirectX関連を進めていきますか。

ゲーム開発2:ウィンドウを表示する

久しぶりにゲームを作ろうと思います。6年ぶりなので久しぶりどころじゃないけど。この6年で、覚えたことは忘れちゃったし、そもそも時代が変わってるので、新たな気持ちでゼロから勉強です。

せっかくなので、開発日誌をつけていこうと思います。ちなみに開発環境は、
WindowsXP SP3
DirectX9.0c
Visual Studio 2008 Express Edition with SP1
C++

で行きます。

まずはウィンドウを表示する処理を作ります。WindowsのプログラムはWinMain()からですね。最近はUnicode対応の関係から_tWinMain()とかいうのが定義されてるみたいだけど、とりあえず今まで通りで。

ここの処理はもう定型文みたいなものですね。描画はDirectXにやらせるので、以下のソースコードではウィンドウ内には何も表示されません。

次はフレームレートかな、それともDirectX Graphicsに進んだ方がいいかな。

//---------------------------------------------------------
// メイン

#include "windows.h"

#define WINDOW_NAME "開発テスト"
#define APP_NAME "devtest"

// システムメッセージの処理
LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

//---------------------------------------------------------
// アプリケーション開始

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
 RECT rect={0, 0, 640, 480};
 MSG  msg;
 
 // ウィンドウクラスを登録する
 WNDCLASSEX wc={sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L,
       GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
       APP_NAME, NULL};
 RegisterClassEx(&wc);
 
 // アプリケーションのウィンドウを作成する
 AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, NULL);
 HWND hWnd=CreateWindow(APP_NAME, WINDOW_NAME, 
         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, (rect.right-rect.left), (rect.bottom-rect.top),
         GetDesktopWindow(), NULL, wc.hInstance, NULL);
 
 // 独自の処理★
 
 // ウィンドウ表示
 ShowWindow(hWnd, SW_SHOWDEFAULT);
 UpdateWindow(hWnd);
 
 // メッセージループ
 ZeroMemory(&msg, sizeof(msg));
 while (msg.message!=WM_QUIT) {
  if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
  else {
   // 独自の処理★
  }
 }
 
 return 0;
}


//---------------------------------------------------------
// システムメッセージの処理

LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg) {
 case WM_ACTIVATE:
  // ウィンドウがアクティブになった
  // 独自の処理★
  return 0;
 
 case WM_KEYDOWN:
  switch (wParam) {
  case VK_ESCAPE:
   // 強制終了
   DestroyWindow(hWnd);
   return 0;
  }
  break;
 
 case WM_DESTROY:
  // ウィンドウが閉じられた
  // 独自の処理★
  PostQuitMessage(0);
  return 0;
 }
 
 return DefWindowProc(hWnd, msg, wParam, lParam);
}

マウスジェスチャーのマウ筋を導入

昔からある事は知ってたけど、初めてマウスジェスチャーを導入してみました。マウスジェスチャーとはマウスのみで色んな事をさせるツールです。

入れたのはマウ筋です。なんかWikipedia最も有名って書いてあったからw しかしマウスジェスチャーって共通の仕様が無いんだね。どうしようか悩んだけど、とりあえず基本的なものだけ登録しました。

R→(進む)
R←(戻る)
R←→(リロード)
R↓→(ウィンドウを閉じる)

あと幾つか登録した。

たったこれだけなのに、なんか凄く使い勝手が良くなったよ! 今まではマウスでいちいちボタンの所まで移動させる必要があったけど、それが無くなったお陰で、かなり楽に操作できるようになりました。

特に俺はネットを見るとき、ノートPCにマウスを繋いで50cmくらい離れて操作してるから、キーボードのショートカットとか使えなかったんだよね。

そんな訳で、早速持ってるPCすべてに導入したよ。

思考は現実化する

【携帯版】思考は現実化するを読みました。成功哲学の元祖のうちのひとり、ナポレオンヒルの著書です。携帯版なので省略されてますが、それでも580ページあります。読み終わるのに1週間くらいかかったよw

骨子としては「目標を明確化する」「人にしてほしい事はまず自分からする」です。読むのは二度目ですが、改めて読んでみると、また色々と気付くことがあるね。マスターマインドの重要性とか。今後に活かしていけそうなアイデアも思いつきました。

ちなみに、ナポレオンヒルの著書は10年位前にも何冊か読んだ事あるんだけど、その頃は書いてある事があまり理解できずに本を捨てちゃったんだよね(汗) 当時は小手先のノウハウばかり追い回してたからなぁ。年を経てようやく理解できた本です。

ToDo管理ソフト乗り換え

ここ数年、KamiWikiというWikiソフトをToDo管理ソフトとして使っていました。KamiWikiとはTiddlyWikiを元にしてつくられたものです。セキュリティが弱いけど更新が簡単だったので、SSLBASIC認証で固めて利用してました。

ただ不満があって、携帯電話からは使えません。どちらかというとWikiでWebサイトを作るソフトだから、当然と言えば当然だけど。あとKamiWikiは公開直後から更新が止まってるっぽい。そんな訳で別なToDo管理ソフトを探してきました。

Remember The Milk(RTM)です。Check*padと迷ったけど、機能が多そうという事で。KamiWikiは自分のサーバに乗せるタイプだけど、RTMはASPだね。

会員登録して早速ログイン。RTMはリストというグループを作って、その中にタスクを追加していくんだね。で、タスクが完了したら完了ボタンを押して終了。多機能そうだけど、とりあえず簡単に使えるね。

もちろん携帯電話にも対応してるので、タスクが増えたら即、追加できます。ただ、ページ移動するごとにSSL認証開始みたいなのが出るんだけど、それがちょっと不満。これって消せるのかな?

毎日やることは1回登録すれば、ちゃんと毎日タスクが生成されるみたいだし、なかなか良いです。

しばらく使ってみよう。

ゲーム開発1:Visual Studio 2008 Express Edition with SP1を入れる

ネットニュースでVisual Studio 2008 Express Edition with SP1が提供開始したとなっていたので、これを機にインストールしてみました。無料だし。

以下のサイトから
http://www.microsoft.com/japan/msdn/vstudio/express/

Visual StudioのExpress Editionは、無料で使えるプログラムの統合環境です。色々制限がかかってるけど、商用利用もOKなので、同人ゲーム開発なんかには良いね。俺はVisual C++を使うことにしました。

ためしにコンソールアプリケーションで“Hello, world!”を表示させてみました。うん、簡単。次にWindowsアプリのテンプレートプロジェクトを開いてみたら…よくわからん。知らない構造体?クラス?や関数だらけだし。まあネットでちょっと調べてみたら、Win32で組むプログラムの構造は昔と変わってないみたいだったので安心した。

次にDirectXの開発一式を以下からダウンロード
http://www.microsoft.com/japan/msdn/directx/downloads.aspx

今の最新はMicrosoft DirectX SDK (Mar 2008)です。インストールしたら勝手にVisual Studioにパスを通してくれるから便利だね。

これで一通り準備は整いました。ちなみに、試しにDirectX8.0で組んだプログラムをビルドしようとしたら色々足りないってエラー出たw 今はDirectX9.0cの時代だからまぁ仕方ない。

次回はメインループを組んでみようかね。

タイムホロウ クリア

タイムホロウ 奪われた過去を求めてをクリアしました。このゲームは深夜によくTVCMやってたね。

過去修正アドベンチャーとかいう変わったジャンルのゲームです。ある場所の、過去のある時間を操作できてしまう不思議なペンを操って、身近な不幸を回避したりとか、そんなお話です。

以下ネタバレ。

プレイしてまず、ネーミングがどうかと思ったね。主人公の名前が歩郎(ホロウ)で、飼い猫の名前はフォ郎、不思議なペンの名前はホロウペンだしね。ひょっとして、主人公は両親に好かれてないのではw

ゲーム自体は一本道だけど、結構ストーリーに引き込まれて面白かったです。過去を修正してタイムパラドックスを発生させる(させられる)たびに、ガンガン現代が変わっていくのが良いね。

過去の人に手紙とか送れちゃうけど、俺ならどうするかな。「その会社はやめとけ、倒産するぞ」とかw しかし舞台はご町内だけで完結してたけど、悪用すれば何でも出来そうだね。てゆうか、そんなドラマを昔見た気がする。

いつも金に困ってるダメなおじさんが、最後は格好良く締めるのが良かったけど、他にもやりようがあった気がするなぁ。で、主人公が好きだった十二林さんはおじさんと結婚して、主人公は十二林さんの娘(従姉妹)と付き合う…のか?

5時間くらいでクリアしちゃってちょっとやり足りない気はするけど、おおむね満足でした。

夏コミ一般参加

コミックマーケット74、通称夏コミの2日目に参加してきました。ホントは参加する気はなかったんだけど、まあ最近の同人ゲームがどうなってるのか、自分の目で確認した方が良いのかなぁと思って。

地方から来た友人らと一緒に、朝からビッグサイトに行ったのですが、とにかく暑い! 帽子とか持って来てないので、頭にタオルを乗せて直射日光を遮ってみたけど、それでも汗が止まらない。この日の最高気温は36度とか。猛暑日に日なたで数時間いるのはなかなかの苦行でした。

会場内に入り、西館に向かいます。今回は西館にあるブースのほとんどが同人ソフトだからね。しかしカタログを見たら、同人ソフトとはCG集・ゲーム・音楽CDのみならず、2ちゃんねるニコニコ動画、果ては同人ソフトを題材にしたもの(東方とかひぐらしの二次創作等)すべてが含まれてます。ちょっとジャンル分けが大雑把すぎないかい…

とりあえず壁サークルを一通り回ってから、島中も延々回ってみたよ。MSXのソフト開発やCPUの自作みたいなのもあって、なかなか楽しかったけどね。

肝心の同人ゲームですが、やはり俺がサークル参加してた数年前に比べてレベルが上がってるね。弾幕シューティング3Dアクションが結構あるし、ぱっと見、市販ゲームと遜色ないのも多し。何でも二次創作なのにオリジナルの声優を使ってるのもあったとか?

そしてプロモーションも、ノートPCPSPを使って実際のプレイ画面や動画を見せてたし、テーブルのディスプレイも気合が入ってます。バッテリーの切れたノートPCを別のノートPCと置き換えてる準備の良い所もあったし、どこもかなり頑張ってました。

俺も久しぶりにゲーム作ろう、と思ってるけど、かなりクォリティを上げないと追いつけないかも。

2日目の西館しか回らなかったけど、テンション上がりました。

横浜で焼きとり

今日は横浜で打ち合わせをしました。打ち合わせの合間に、VisualBasicしか知らない人にPHPを教えてみたり。

打ち合わせ後はそこの会社の人達と飲みに行きました。焼きとり屋です。料理が出てくるのが遅かったけど、なかなか美味しかったです。

メニューを見たら銀盤という純米大吟醸な日本酒があったので注文してみました。純米大吟醸なのに安いので、どうかなと思いましたが、旨かったです。ひとり1合ずつは飲んだね。

しかし横浜から家に帰るのは遠かった。

レンタル自習室を借りてみる

家で仕事してるとなかなか集中できません。かといって喫茶店とかファミレスに行ったら、快適空間だけどネットに繋がらないし、意外に子供やオバちゃんが五月蝿く、また人の出入りがあるので、集中するのは難しい。

そんな訳でレンタルオフィスでも借りようかと調べてたら、レンタル自習室なるものを見つけました。これは学生のみならず資格勉強するサラリーマンも使う有料の自習室です。

会員制で静か、ネットが出来る、安いってんで、仕事に使えないかと1ヶ月間借りてみることにしました。ちゃんと利用用途には「仕事」って書いたw

席は指定席と自由席があって、指定席は予約で一杯なので自由席にします。あと利用時間帯も全時間にしたかったんだけど、これまた予約で一杯なので平日の昼間のみのプランにしました。さらにネット回線利用料を含めて、1ヶ月1万円しません! 安いね。

席は全部で80席くらいあるのかな。そのうち自由席は20席ほど。平日の昼間なので、ガラガラです。にもかかわらず自由席は半分くらい埋まってるけどね。とりあえずテキトーな席に座り、自前のLet’s Noteを立ち上げる。机はPC置いても十分な広さだね。

部屋は締め切り、ドアにも音がしないように細工してあるので、本当に静かです。俺がマウスをカチカチする音がいちばん五月蝿いかも(汗) 静音マウス買った方がいいかな。もちろんケータイもバイブ無しのマナーモードにしてます。

ネットという最大の誘惑はあるものの、集中はできるね。ただ今日座った席は隣の席の人が臭かった(汗) 次からは別の席にしよう。あと仕事の優先順位はあらかじめ決めといた方が良いね。これは自習室関係ないけど。

とにかく1ヶ月、時間がある時には通ってみます。