スポンサーサイト

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

現在のゲーム製作状況とか 1/9版

とりあえず現状報告。

~もくじ~
【1】C++とDirectXで製作しているゲームについて。
【2】iPhoneアプリについて。



【1】C++とDirectXで製作しているゲームについて。
こっちのほうは、
---------------------------
・自動アップデート機能
・外部ファイル読み込み機能

---------------------------
を色々と調整中。

外部ファイル読み込みの部分に関しては、
まず外部ファイルを全部int型の変数に変更。


【変更前】
VecNum FileName  SizeX  SizeY SplitX  SplitY
0   Sample.png  512  512   8    8

【変更後】
VecNum FileNo  SizeX  SizeY SplitX  SplitY
0     1  512  512   8    8


何でこうしたかというと、パラメータにint型とか、string型とかが混ざってると、
(読み込むファイルの種類ごとに、固有のフォーマットが定義されていると)
読み込みクラスを派生しないといけないのですよ。
-----------------------------------------
・CLoaderBase
・CTextureLoader  ←派生クラス
・CMoverLoader  ←派生クラス
・CAnimationDataLoader  ←派生クラス
-----------------------------------------
派生しすぎて酷い事になったので、(クラスが増加しすぎて見づらい)
もう全部int型にしようと思ったのでした。

全部int型の場合、
Loaderクラスは、「毎フレームint型のデータを●個読み込む」とだけ指定すればいいので、
もう派生する必要が無くなるのです。
--------------------------------------------------------
・CFileLoader(100) ←クラスは一個だけ。引数だけが違う。
・CFileLoader(250) ←1フレームあたり、250個までLoad
・CFileLoader(300) ←1フレームあたり、300個までLoad
・CFileLoader(10)  //以下略
--------------------------------------------------------

現在の大まかな流れは下記の通り。
① Loaderクラスで、int型の変数読み込み、int型のvector配列にpush_buck。
② int型のvector配列を、CDataFactoryクラスに渡す。
③ CDataFactoryクラスにて、switchを用いて生成する方法を分岐
※int型の羅列として渡されるので、何番目のint型が何を意味するのか?を
うまく処理してやらないといけない。
例:
switch( t_FileType ){
  case CREATE_TEXTURE: t_VecNum = t_Vec[ 0 ];
          t_FileNum = t_Vec[ 1 ];break;
  case CREATE_LOADER: t_FileNo = t_Vec[ 0 ];
          t_LoadNumPerFrame = t_Vec[ 1 ];
}

④ 各Managerクラスに登録


=====================================
開発に関しては上記のような感じ。

で、色んな本も参考に読んでみたのですが、
下記の本に「効率的な開発をするのなら、
データとメソッドを外部に出そう」



みたいな事が書いてありました。

確かにその通りである。
現在、データのみの外部への追い出しはやっているんですが、
メソッドの部分(関数での処理とか)は依然、コード内にあります。

下記の様に、細かい動作内容は
CMoverBaseの派生クラスで対応させているのですが
------------------------------------
・CMoverBase
・CMoverPazzleGame ←派生クラス
・CMoverTitleScene ←派生クラス
・CMoverAnimation ←派生クラス
・CMoverPlayer ←派生クラス

std::list< CMoverBase > m_MoverList
it->Move();
------------------------------------
関数内での動作部分すらも、
外部ファイルにする事が出来たら最強
なのではないかと思った。

コレをうまく実装できれば、
もう「パッチファイルを当てる」だとか、「新しい.exeファイルをダウンロードして下さい」とか、
そういうのが無くなります。

ネット上に、データおよび動作をも定義したテキストファイル等をアップロードして、
後は、それをInternetReadFile関数で読み込んでやれば終了です。

という訳で、動作部分を外部ファイルに出す実験をしてみます。
(コレ、なかなか難題のような気がする。)



【2】iPhoneアプリについて。

iPhoneアプリの方ですが、
せっかくなのでIDとPassによるユーザー認証とか、
通信対戦だとか、そういうのも実装したいと思ってます。

で、調べてみたんですが、
どうやらサーバサイドスクリプトとかを使うみたいですね。

■サーバサイドスクリプト----------------------------------------
Webサーバ上で動作し、Webサーバ上でプログラムの実行が要求されるたびに、
結果をウェブブラウザに対して送信するようなプログラムのこと。

PHP、 Perl、Python、Rubyなどがある。
------------------------------------------------------------


顧客情報や、ゲーム内のアイテムリストなどはMySQLなどの
データベース管理システムを使うようです。

【参考URL】ソーシャルゲームのためのデータベース設計
【参考URL】そーだったのか?ソーシャルゲームの作り方

現場の人が言ってるんだから間違いない。

なので、現在
PHPとMySQLを用いてデータ管理を実装してみようと思ってます。

そしてPHPもMySQLも使える
"ToyPark"という無料レンタルサーバ
があるっぽいので、
早速登録しました。

【参考URL】Toypark無料ホームページホスティング


で、PHPの動作も簡単に確認してみました。
確認した方法は下記の通り。
-----------------------------------------------------------
1)任意のフォルダに、HTMLとPHPをアップロード
※HTML側には、submitタイプのボタンを配置しておき、
 ボタンをクリックした際に、該当のPHPファイルを実行するようにしておく
※PHPの方は、$_POSTとかいうデータを受け取る予め決められた連想配列があるようなので、
 その連想配列でデータを受け取り、任意の動作(表示など)をするようにしておく

2)HTMLファイルをURL指定でアクセス
3)テキスト入力欄に任意の文字列を入力して、ボタンをクリック
4)phpのページに移動して、テキスト入力欄の文字が表示される事を確認

-----------------------------------------------------------

■Test.html
<form action="Test.php" method="POST">
<input type="text" name="input1">
<input type="submit" value="送信">
</form>

■Test.php
<?php
print $_POST["input1"];
?>

で、例を書いといて何なんですが、上記のサンプルは
セキュリティ的に危険
なので一般公開するのは止めましょう。

※ちょっとだけ解説。
まず「Hello PHP!」と書いてボタンをクリックすると下記の様になります。
phpSample.jpg

何も問題ないですね。
テキスト入力欄に入力した文字を、そのままphpが表示してくれてます。

では次に、「<BUTTON type="reset">クリックすると死ぬ</BUTTON>と入力してみます。

phpSample2.jpg

はい、なんと、
文字列ではなく、「クリックすると死ぬ」ボタンが生成されてしまいました。

このように、ちゃんと"ただの文字列"だと認識させてあげないと、
"意味のある文字列"だと判断され、
対応するオブジェクトを生成したりしてしまう
のです。

これインジェクション攻撃と呼ばれたりします。
ここら辺のセキュリティ関連の対策も、おいおい解説記事として纏めたいと思ってます。


ちょっと余談になりましたが、
今やってることを纏めると下記になります!(`・ω・´)

・動作部分の外部ファイル化
・PHP、MySQLとの連携によるデータベース設計
( しかし。覚えるべきことが一杯ありますね。DirectXも最新版はDirectX11だとか。。
 WindowsXPしかないので放置してたが、DirectX最新版の仕様も覚えてた方が良さそう。 )
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

いつも楽しく見させていただいています

「効率的な開発をするのなら、データとメソッドを外部に出そう」
というのは、conioさんが言うようなリリース後の話というよりは、
ゲーム(レベル)デザイン部分を使用する部分をスクリプトにすれば
コンパイルする必要がなくなるし、
スクリプトはデザイナの人にやらせれば、開発効率上がるぜ!ってことだと思いますよ。
(ノベルゲームで考えると分かりやすいかも。
演出等のスクリプトはプログラマーじゃなくても出来る。)

まあ、何はともわれ個人的にも例のゲームを待っていますので
頑張ってください。ではでは~。

Re: いつも楽しく見させていただいています

ありがとうございます!
体験版公開が遅くなっており、申し訳ありません(_ _;)

ちょっとコードの効率云々は置いておいて、
先に体験版を出してみようかなとか思ってます。
(あくまで"体験版"なので、機能追加やアップデートの為のプログラム構造は必須では無いため。)


スクリプトに関してですが、
(個人的に) ありがたい仕組みが"アップデート後の機能追加/アップデート"だったので、
ちょっと、参考書の説明文の解釈を誤っておりました。

正しくは開発中の際の作業効率化になりますねe-444
(プログラマの負担を減らしたりする。)

引き続き、体験版と開発環境の構築を急いで行ってまいりますので、
よろしくお願いいたしますe-267
コメントの投稿
管理者にだけ表示を許可する



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