Admin * New entry * Up load * All archives 

C++&DirectXでプチプチゲーム制作をしています。文章力?気合で乗り越えるさ。

 

旧 ゲーム的な何か。

12«1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.»02
2011年01月の記事一覧

« 12月     02月 »

Posted on --:--:-- «edit»

Category:スポンサー広告

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

tb: --     com: --

go page top

Posted on 01:39:16 «edit»

Category:プログラミングとか

超簡易スクリプトを作る 

こんにちは。相変わらずSignalです。つい先日、こんな本を読みました。

脳はなぜ「心」を作ったのか

今まで「「私は私である」という意識はどこからくるのだろう?」という疑問を持ちつつ過ごしてきたのですが、意識は私たちの脳が生み出した「実感」にすぎないという意見に感銘を受けました。
クールに工学的な視点から「心」を解き明かそうとした本で、今までの中で最も説得力のある説明をされていました。こういう分野に興味のある方は是非一度読んでみてはいかがでしょうか。

それでは今日の本題ですが、久しぶりに具体的なコードについて考えてみようと思います。
お題は「プログラマ以外が扱えるスクリプトを自作する」です。

まず、ゲーム内のあるファイル(例えばキャラクターの3Dモデル)を使ってそれを表示する場合、
①3Dモデルを入れる変数を用意する
②3Dモデルのデータをその変数にロードする
③それをそのまままたはオブジェクト経由
というステップを踏む必要があります。ただしこの方法の場合、プログラム側で読み込むファイルを逐一指定し、すこし手を加えるだけでもコンパイルという大きな手間が生じてしまいます。

今までは素量も少なかったのでそのままだったのですが、今回モデリング側から「サーキット上に自由にオブジェクトを配置したい」という要望が出たので、
「プログラム担当以外でも自由に読み込むファイルを指定し、それを描画出来るようなプログラムを作る」
ことにしました。

とりあえず完成したものから考えるのが手っ取り早いですね、文法はこんな感じ↓
・ファイル読込部
Model\\,boxtest.x
Model\\,testfloor04.x

・描画スクリプト部
"boxtest.x", 10.0f, 600.0f, 3000.0f, -1500.0f, 0.0f, 0.0f, 0.0f

ファイル読込部は①パス②ファイル名の2段構成。
描画スクリプト部は①ファイル名②スケール(モデルの表示倍率)③XYZ座標④XYZ軸回転の4段構成となっています。
基本的な構造は同じで、要素ごとをカンマで区切り、改行で1単位になります。
今思うとかなり危うい構造ではあるのですが、とりあえずこれで話を進めます。

これをプログラムに読み込むにあたって、まずファイルの中身そのものを取得する必要があります。
方法はいくらでもあると思うのですが、今回はifstreamを使いました。
ifstreamにはGetLine関数という命令があるので、それを使って改行までの中身を一気に取り出しています。

↓描画スクリプト読込のコードはこんな感じ
HRESULT CEasyDrawScript::LoadScript()
{
char str[128], buf[8][30];
char *c, *p;

//3Dモデルファイルの読み込み
ifstream ifs(scriptName);

if(!ifs.is_open()){
MessageBox( NULL, "スクリプトの読み込みに失敗しました。", "Error", MB_OK );
return (E_FAIL);
}

while(ifs.getline(str, sizeof(str), '\n')){
c = str;
for(int i = 0;i < 8;i++){
memset(buf[i], 0, sizeof(buf[i]));
p = buf[i];
while(*c != ',' && *c !='\0'){
if(*c != ' '){
*p = *c;
p++;
}
c++;
}
c++;
}

objList.push_back(CEasyScriptObj(
buf[0], //ファイル名
atof(buf[1]), //スケール
D3DXVECTOR3(atof(buf[2]), atof(buf[3]), atof(buf[4])), //位置
D3DXVECTOR3(atof(buf[5]), atof(buf[6]), atof(buf[7]))));
}

return (S_OK);

}

先ほど4要素といいましたがX,Y,Zは独立なので8個の文字列を用意。
strにまとめて読み込んだ文字列を格納、cに加工前の文字列へのポインタ、pに各要素の文字列を入れるポインタを入れて、順次読み込んでいきます。

カンマか文字列の終点がくれば次の要素へ、その中では空白文字を外す処理を行っています。要らない文字を読み込まないようにすれば必要な部分だけを取り出せますね。

そして読み込んだ各要素は数字なら数字に変換されてvector配列に加えられます。
後はファイル名から描画するモデルを検索して決まった位置に描画出来るようになります。万々歳。

もっともまだエラー処理を加えないといけない部分があったりしますね。
ただ安易に加えるとどうしても汚くなってしまう。うまい方法があるんでしょうか。
まだまだ経験不足の所は多々あります。

大分長くなってしまったので今日はこの辺で。ではでは。
スポンサーサイト

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (1)

 

茂木健一郎とかも似たようなこと言ってましたね。
心=脳によって作られたもの
っていう一元的な考え方は、
宗教によってはダメらしいデス。

  by handyman

Comment-WRITES

go page top

Posted on 01:58:03 «edit»

Category:レーシング

サーキットビューワーを作ってみた 

こんばんは。Signalです。
今日はセンター試験の模試を受けに行ってきました。結果は良好。どうやら問題自体も簡単だったみたいですね。
後1年。。

さて、前回仕様決めを行いましたが、結局あれから決まったことはほとんどありません。
その代り、モデラーさんの「サーキットを確認したい」という要望に答えるために、以前作った(http://frontiersman.blog61.fc2.com/blog-entry-186.html)FPSのコードを引き継ぐ形でサーキットビューワーを作成しました。

するとあら不思議。ゲームとしては空っぽなのに一気にゲーム画面らしくなりました。
サーキット01サーキット02

FPSの記事で解説したとおり、ナビゲーションメッシュの力を借りて坂を登っていきます。
サーキット03

大ジャンプ。トンネルに突撃します。
サーキット04

トンネル入り口~内部へ。壁はありませんがしっかりトンネルとして機能してくれます。
サーキット05サーキット06

出口。天球も貼ったのでそれらしいですね。
サーキット07

もっとも中身は本当に空っぽで、中央部の照準が残っていたりしますが、それでも形になると嬉しいものですね。
ずいぶん久しぶりにプログラムは楽しいと実感しました。
とはいえ、このままでは何かするたびにコードを書き変えないといけないので、プログラム屋以外の人でも触れるように外部ファイルを利用してみようと考えています。頑張りたいですね。

ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

Posted on 03:34:31 «edit»

Category:レーシング

仕様固め 

相変わらず10時半くらいに起きて午前4時に寝る生活を続けています。Signalです。
そういえば最近アイフォンを親を説得して手に入れました。
タッチパネル、非常に便利で何より部室で調べ物ができるのは感動ものなのですが、如何せん操作になれません。PCを触り始めた年齢が早かったがゆえのジェネレーションギャップみたいなもんです。

さて、マルコシアスのプログラムがひと段落ついたので、レースゲーム制作をいよいよ開始しました。
今日は仕様固めの第1回目を行いました。
もちろんゲーム制作なんて言うものは流動的なものなので、あまり仕様をきっちり定める必要性はないのですが、制作メンバーが少ないので(プログラム1人、3Dモデル・テクスチャ1人、(デザイン1人、音楽1人))、必然的にゲームの限界というものが出てきます。前回のゲームの反省を生かして、この辺りは出来る限り丁寧にやっていきたいところです。

今回のレースゲームのコンセプトは「車好きへの橋渡しとなるゲーム」です。
どんな人でも楽しめて、かつ車の世界に引き込んでいけるようなものになるのが理想ですね。
一応文化祭向けではあるので(予定ですが)1レース3LAP、登場台数8台程度の小規模なゲームになるつもりです。

他に今回盛り込むポイントとしては、
・スピード感の表現
・前後の荷重移動を利用して簡易的に車をシミュレートする
・ブースト機能(前方に車にハンディ、後方の車にボーナスを与えて差を縮める機能)を強く設定して順位変動をおこしやすくする

といった所が主なものでしょうか。

もっとも、やはり1からの制作となるので、果たしてゲームの形となるのかさえ疑問ですが、こんな感じのゲームを一貫して目指していきたいと思います。

眠くていつ意味不明な文章を書くかわからないので今日はこの辺で。
詳しくは別の機会にしましょう。
ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

Posted on 02:20:24 «edit»

Category:Project MARCHOSIAS

マルコシアス2開発中 

(もう7日ですが)
明けましておめでとうございます。今年も宜しくお願いします。Signalです。
ここ最近寒いですね。寒いと思考が鈍るので電気ヒーターなどでとにかくしのいでいます。

昨年度中に信長の野望が完成したので、現在はレーシングと並行してProject MARCHOSIAS 2の制作を行ってます。
信長の野望は気が向けば動画で上げる。。かもしれません。未定。

↓対してマルコシアスの方はこんな感じ
マルコシアス2開発中

プログラムの方は結局難易度調整くらいしか言うことがないのですが、デザインはグレードアップ、背景もグレードアップ&フォグ実装とあって前より大分良くなっています。
ちなみに難易度は打ち返し弾解禁により格差が増大。最低難易度がより初心者向けになったのに対し最高難易度はさらに厳しさを増しました。

閃光弾
こちらは新実装の閃光弾。近づくと起爆します(背景がないのは見なかったことに)
あまり手を入れてない割にはなかなかトリッキーな攻撃に仕上がりました。満足。

とまぁこんなところです。素材が完成次第またお知らせすると思います。

今日は時間も遅いのでこの辺で。
次回からはレーシング開発を中心に記事を書いていきます。
ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。