Admin * New entry * Up load * All archives 

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

 

旧 ゲーム的な何か。

04«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.»06
カテゴリー「プログラミングとか」の記事一覧

    n e x t »

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:20:55 «edit»

Category:プログラミングとか

あちゃー 

v1.40で思わぬミスを発見。ボスがでない。。
すぐに差し替えます。しばしお待ちを。

修正終わりました。この間にダウンロードしてくださった約1名の方、ごめんなさい。再ダウンロードをお願いします。

↓ダウンロードはコチラ
http://www1.axfc.net/uploader/Sc/so/151524.zip

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

Posted on 00:41:46 «edit»

Category:プログラミングとか

今さら更新ですが Project MARCHOSIAS v1.40 

完成から既に1年近くが経ちますが、続編を作るにあたりまして今まで放置されていたハイスコア関係のバグを修正しました。多分これで忌わしいバグとはおさらば。。

どうやらスペースの扱いでミスがあったようです。確かによく考えてみりゃスペース=NULLのはずはありませんもんね。

↓ダウンロードはコチラ
http://www1.axfc.net/uploader/Sc/so/151524.zip


ちなみに、公開から10カ月ほど経ちますが、これまでに、
v1.10 http://www1.axfc.net/uploader/He/so/244927.zip 54回
v1.20 http://www1.axfc.net/uploader/Sc/so/54938.zip 40回
合計 94回
ダウンロードしていただきました。みなさん本当にありがとうございます。

次回作ではこの数字を越えられるよう努力したいと思います。
ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

Posted on 23:18:09 «edit»

Category:プログラミングとか

よしやるぞ 

ついに地獄のパンフ制作が終わりました。夏休みが残念なことに。Signalです。
やっとプログラミングできるようになったので、文化祭まで期間も短いのですがあがいてみようと思います。

一応今年の文化祭に向けて
・Project MARCHOSIAS Second Editon(PMSE)
・レースゲーム(タイトル:Formula K(仮))
を出そうともくろんでます。
完成度は残念ながら0%ですが。。何とかします。

実はなんだかんだでFPSのときに作ったハイトマップが役に立ったり、PMSEも去年作ったPMのマイナーチェンジなのでなんとかなると思ってはいます。

一応出来る限り進捗は書いていこうとは思いますので、改めまして宜しくお願いします。

ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (0)

go page top

Posted on 22:14:55 «edit»

Category:プログラミングとか

ようやく浮上 

 お久しぶりです。Signalです。もう見てる人もそういないとは思いますが、今までずっと沈んでました。
FPSの制作ですが、マップを作る担当がどうにも動いてくれそうになかったので、時期を見て打ち切りにしました。
自分としてもコードを組む気を半ば失っていたのでここで打ち切ったのは正解だったかもしれません。

 そこで、1週間ほどまえから文化祭に向けてレースゲームの制作を開始しました。メンバーも多少入れ替えて再発進です。
 やはり一番手間がかかるのがプログラムになってしまうので、すぐに動き始めています。一応FPS制作のときに組んだコードの出来は悪くはなかったので、8割方移植してとりあえず画像表示が出来るようにはなりました。ただ、タスクシステムのコードが非常に扱いづらかったので、これから全面的に組みなおす予定です。

 前回(最初)の作品である「Project MARCHOSIAS」は、あるタスクに対し、すべてのタスクに存在する変数と、タスクごとに自由に変数を宣言出来るワークスペースを設けるというものでした。C言語であったということと、2Dシューティングゲームで構造が単純であったため、さほど問題もなく使えていたのですが、FPSにはプレイヤー、敵のほかに銃、マップ、AIなどの要素がかかわり、言語もC++になったことで全体が複雑化し、ちょっとコードに手を加えるだけでも一苦労、という状況に陥っていました。
 特にこのタスクシステムは変数を種類の違うタスクで共有するということが非常に難しく、ステータス変数を基底クラスに近い部分に追加し続けるという状況でした。
 そこで今回作るデータ管理システムはタスク間のデータの共有が楽なシステムに組もうと考えているのですが、如何せん知識不足できつい状況です。今までデザインパターンの存在自体知りませんでした。やはりC++は奥が深いですね。

何がともあれ、ようやく新学年にも慣れ、制作意欲が戻ってきたので、文化祭に間に合うように作っていくつもりです。近いうちに作るレースゲームの詳細を載せるつもりです。

ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

tb: (0)     com: (2)

 Re: ようやく浮上

おかえりなさい、先生♪

自分は、ずっと見てましたよ。
流石に毎日ではないですが(笑

自分的だとC言語でタスクシステムを作るより、
C++の方が作りやすいと感じてます。

特にタスクを作る場合はVC++だとSTLが標準でついているので、
リストを1から作る必要がなく、タスクの操作に集中できたりしますし。

それにループもIteratorを使えば簡単♪

開発がんばってください^^

  by ディムRP

 Re: ようやく浮上

>ディムRPさん
お久しぶりです。そこまで定期的に見てくださっているとは。。不精してすみませんでした。

FPSで初めてC++を扱ったものですから、最初の頃はソースを読むだけでも精一杯でしたけど、最近ようやく慣れてきた、といった感じですね。
まずとっかかりとしてデザインパターンやSTLで扱いやすいシステムを作ってみたいと思います。

ディムさんは相変わらず複数の分野を同時に手掛けていて、流石だなと思います。そちらも頑張ってください。特にゲームライブラリの方、期待してます。もしできたらすぐ見に行きますね。

  by Signal

Comment-WRITES

go page top

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