こんにちは
自分にとってずっと解決されない疑問があります。
それは、if文や配列を何度勉強してもゲーム制作につながりそうにないということです。
私の目標は一人でゲーム(白猫プロジェクトのようになにかしら動くゲーム)を作ることなのですが、コンソール画面に配列結果などを出し続けてもゲームにはなりませんよね。。
漠然と、「ゲームはどうやってつくられているのか」になってしまうのですが、それだと回答が無限にあってしまうので、再度自分に問いかけて、今聞きたい疑問をかなり大きく分けて4つに絞りました。
①どういう種類のファイルが必要なのか
②どのようなクラスが必要なのですか?
③動きを出すためのメソッドやライブラリがあるのですか?
④また、上記①、②、③をどうやって連動させるのですか?
このうちのどれかでも有難いので回答お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
ゲームの中身はif文や配列でできています。
例えば、RPGを題材に上げると、アイテム欄や特技などは配列で保存されます。
戦闘に入ったら、攻撃時にランダムで生成した値が閾値を超えたら
クリティカルヒットなどの処理をif文で実装します。
という風に内部的にどうするのか。というロジック処理にプログラムは使われるわけです。
①どういう種類のファイルが必要なのか
こちら、どういうゲームを作りたいかによるのですが、
・プログラム
・画像
・音楽
が、少なくとも必要でしょうね。
②どのようなクラスが必要なのですか?
④また、上記①、②、③をどうやって連動させるのですか?
こちらも設計思想によるのですが、よくあるのはMVCというアーキテクチャで製造されるケースです。
型(Model)・見た目部分(View)・ロジック部分(Controller) という意味です。
更に加えてデータベースでしょうか。
型(モデル)というのは、例えるならばクッキーの型のようなものです。
星形クッキーを作る型であっても、入力するお菓子の生地を変えれば、
数種類のクッキーが作れますよね?
それと同じことをプログラムでも行っています。クッキーの型がモデルで、
入力する生地がデータベースを指します。
そして、そのようにして作成したモデルをどのようにして動かすのか・・・
それを定めるのがロジック部分です。
Aボタンを押したらジャンプする、Bボタンを押したら走る。。など、
プログラム全体の処理の内容を決めています。
見た目ですが、こちらはロジックで定めた部分をどのように表現するかを
決定する部分です。
例えば、ロジック部分で横線一本を引くことを決めた。
しかし、それを何色で、どのくらいの太さで絵画するのか?
そういったことを決めます。
③動きを出すためのメソッドやライブラリがあるのですか?
あります。
自分で作ることも可能ですが、ゲームのような特殊性の高いプログラムを作るときは、
フレームワークと呼ばれるでき合わせのプログラムの断片が
たくさん入った辞書を使います。それによって、一から自分で作れなくても、
再利用するだけで機能を実装できたりします。
ただ、これらの機能を利用するためには、基礎的な知識を身につけて
少なくともプログラムが読める必要があります。
そういった前提を構築するために、今はif文や配列を勉強なさっているのだと思います。
しかし、それも全てを知っている必要はなく、
作りたいゲームのレベルに合わせて知っていれば良いと思います。
全部勉強し終わる前に作りたいゲームが作れそうなら、
そちらを優先した方が楽しいですし、学びも効率的だと思いますよ。
勉強がんばってくださいね。
投稿2015/10/21 15:00
総合スコア654
0
もう解決されたことかとは思いますが,蛇足的に回答させていただきます.
暇つぶしにでも読んでください,私もterataill復帰がてらの回答です.
まずゲームつくりおよび,タグのC++からみて,C++での開発も視野に入れて質問されているのだと予想します.今の流行は前述の回答者の通り,C#ですが,性能を求める,iosやandroidなどのwindows製品以外でゲーム開発をおこなう,このような用途ではC++も現役と言えるでしょう.UEもblueprintだとかいう機能があったと思いますが,基本的にはC++での開発になるはずですし.
というわけで自分は低水準よりであるC++を例として回答させていただきます.IDEを使わずに開発したいという話にもかかわってくるでしょうし.
さて,皆様のおっしゃる通り,基本的にはあるプログラミング言語に最初から備わっているもの,俗にいう標準ライブラリだけでは絵のあるゲームを作ることは困難だと思います(というかC/C++のような言語ではたぶん無理だと思います).javaようなインタプリタ言語は例外ですが.こいつらは自前の仮想マシンを持っているので描画機能も自前で用意することができます.javaなら,ほかにもあるでしょうが,ライブラリの中のawtがそうであるはずです.
ではC++ではどうやって絵のあるゲームを作るのか?
まずグラフィカルな処理を行うには,コンピュータやゲーム機などの描画マシンにアクセスする必要があります.この描画マシンをグラフィックコントローラーといいます.
グラフィックコントローラーは,GPUとよばれるグラフィックスハードウェアや,グラフィックアクセラレータの総称です.総称といっても,1990年代にはすでにグラフィックアクセラレータはGPUにとってかわられているので,現在では描画マシンといえばGPUということになります.
このGPUに命令を行うためのライブラリ,printfのような関数らを,グラフィックライブラリ(グラフィックスAPI)などと呼ぶのですが,あるプログラミング言語で絵を表示させるにはこのAPIに対応していないといけません.そしてAPIですが,ゲーム機にもDSやPS3など様々な種類があるように,GPUにもさまざまな種類があるので,APIも種類があります.
Draw()とかけば絵を描いてくれるAPIもあれば,DrawPicture()と書かないと絵を描いてくれないAPIがあるわけです.
このさまざまなGPUを,ある一つのAPIで統一的に扱えるようにしようと考える動きがありました.そして誕生したこのAPIをOpenGLと呼びます.マインクラフトの(つまりjavaの)描画用APIなので聞いたことがあるのではないでしょうか.つまりOpenGLというAPIを使えば,これひとつで様々なGPUに命令ができるというわけです.たとえばprintfとかけば,macでもwindowsでもlinuxでも同じ動作をしてくれるのと同じです.わざわざマシンに合わせて書き換える必要がなくなります.
(とはいえ,実はウィンドウを表示するといったことはサポートされていないので,完全に一つのコードで再現できるというわけではなく,マシン依存のコードも出てくるのですが)
またwindowsでおなじみのmicrosoftは自社の製品にブランドを持たせるためだと思いますが,独自のAPIを実装しました.これをDirectXとよびます.DirextXはwindowsでしかあつかえないAPIなのですが,それゆえに大幅にAPIの仕様を変更しても,他の開発者から文句が出にくいという利点と,自分たち独自のGPUを生産できるという利点があり,多くのバージョンアップを行いました.結果として,DirextXならばより効率よくGPUの性能を引き出せるのでよりゲーム向きの開発ができるようになりました.
つまり現在の主流はPC開発で言えばOpenGLとDirextXということになります(コンシューマーゲーム開発はPS3ならPS3独自のプログラミングが必要だし,DSならDS独自のプログラミングが必要です.ハードの数だけあります).
OpenGLはmacでもwindowsでも同じコードでプログラミングできる,DirectXはwindows製品だけだがより強い機能を持っていてそれを利用したプログラミングができる,ということです.
そして絵を表示するには極論,この二つのAPIのどちらかに頼る必要があります.
ただしウィンドウを表示する部分だけは,残念ながらOS依存です.この部分はappleやmicosoftがあらかじめ用意してあるAPIを通じて処理させる必要があります.windowsを解説しますが,こちらではWindowsAPIの,有名なスケルトンコードを用いる必要があります.関数名を列挙すると,CreateWindow,RegisterClass,ShowWindow,UpdateWindowなどを利用しないといけません.
まとめると,絵のあるゲームを作るには以下が必要になります.
・OpenGLかDirextXか,はたまたハード独自のAPIか
・プラットフォーム依存のAPI
逆にいえばこれがあれば絵を出すことができます.コンソール画面に文字を表示するだけ,アスキーアートで絵を表現するだけ,といったプログラミングからは卒業です.
ちょっとまってください.じゃあ絵を出したはいいが動画とするにはどうしたらいいでしょうか.
まあDirextXにはDirectShowという機能があったと思いますが,基本的はある方法を利用します.これは方法なので完全にプログラミングテクニックであり,べつにAPIが必要とかそういう話ではありません.
それはメインループと呼ばれる,ループによる方式です.動画の基本原理もそうですが,人は一秒間に30回以上の静止画を立て続けに見せられると,その絵が動いて見えます.パラパラ漫画です.この単位を30fpsといいます.fpsはframe per secondの略で,frameとはメインループが何回ループしたかという単位です.
つまり30fpsとは一秒間に30回,メインループを回すことになります.これで動画を作成できます.
ちなみに人間が動画のちょうどよい早さを認識するのは60fpsまでといわれています.これ以上のfpsは無駄ですのでそれだけPC・ハード機の性能が有り余っているということです.というか早すぎると処理が一瞬で終わってしまいます.
コードで書けば以下のような感じです.
※わかりやすいように書いてます.しかもクラスの機能使ってないので実質C言語です.
.
.Data input;
.unsigned int current_time = 0;
.unsigned int previous_time = 0;
.
.while(true) // 永遠に回る
.{
. previous_time = current_time;
. current_time = time();
.
. // 1 / 60 = 0.01666・・・.unsigned intで計算したいので整数に
. if( (current_time - previous_time) > (1000 / 60) )
. {
. sleep(); // 60fps以上で暇なら寝る
. }
.
. draw();
. input = getUserInput(); // Data構造体(クラス)で状態を受け取る
. update( input ); // ここでキャラの状態やらステージを更新
.
. if( input.clear_flag || input.exit )
. {
. releaseResouce();
. closeWindow();
. break; // 終了
. }
.}
これは超単純なゲーム例ですが,突き詰めればゲームはこのような構造になっています.そしてdraw()の部分でAPIが必要になるわけです.
APIの入手についてですが,windowsならvisual studioを入れればDirectXおよびOpenGLが無料でついてきます.
あくまでもIDEに頼りたくない!というのであれば,Cygwinを導入するとインストール時に選択することでついてきます.
macの場合はわからないのですが,OpenGLしか選択肢がないのでたぶん開発環境さえ整っていいるのであれば最初から入っていると思います.
最後に本当にゲームを一人で作りたいのなら,「ゲームプログラマになる前に覚えておきたい技術」は買って損ないです.これは本当にGPUに頼るところ以外は自力でやらせてくれる本です.そのため,730ページくらいありますがw
一つ上げるとbitbltという,本来ならAPIを利用する機能を自分で実装します.
投稿2015/10/23 00:40
編集2015/10/23 04:58退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
最近のゲーム制作ではフルスクラッチではなく、ゲームエンジンを利用することが多いです。
有名なところではUnity5やUnreal Engine4などがありますが、開発PCはある程度のスペックが必要になります。
また、スペックが厳しいのならHTML5とJavaScriptも視野に入れることができます。
今時のブラウザは高機能で以下のように色々なフレームワークがあります。
・HTML5でゲーム開発。JavaScriptゲームフレームワークまとめ
・Top 10 HTML5, JavaScript 3D Game Engines and Frameworks
以上のようなゲームフレームワークが③の答えです。
そして①と②と④はゲームフレームワーク毎に異なりますので、それぞれの入門書やマニュアルで調べることになります。
たとえばUnity5ならば、ゲームロジックはC#で記述して、素材はアセットストアを利用することができます。ストアには無料のものもありますので、まずはそれで試してみるのがよいでしょう。
投稿2015/10/21 14:55
編集2015/10/21 15:17総合スコア1825
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/21 15:22
0
自分は趣味でゲーム作りをしており、unityしか使った事がないので、その知識で質問に答えます。
①どのようなファイルが必要なのか
・白猫のような3Dゲームが作りたいのであれば3Dモデルが必要ですよね
Unutyの場合、やり方次第でMMDモデルを使うことができるのでMMDモデルデータが必要です。
②どのようなクラスが必要なのか?
・仕様と作り方によるのではないでしょうか
③動きを出すためのメソッドやライブラリがあるのでしょうか?
・unityでアニメーション遷移用のファイルを作り、その遷移用のファイルで設定した値をスクリプトで変更する事で動きを出す事ができます。
④連動させているのですか?
・モデルにスクリプトを当てて、どの動作をしたときにどのアニメーションをモデルにさせるかというのをスクリプトで書いて実行している感じです。
if文や配列がどのようにゲーム作成につながるか?
というよりゲームなんてほとんどがrandomとif文と配列の塊だと私は思います。
一度、実装したいゲームの仕様を神に書き出し、擬似コードにしてみてください。
「~だったら」という言葉が出てきたらif文の登場です。
例)
hpが0以下だったら
ボタンが押されたときに0~100までのランダムの値が74以上だったら
こんな感じです。興味があればunityで調べてみる事をお勧めします。
if文と配列が分かっていれば他に覚える事は少ないと思いますので
投稿2015/10/21 15:21
総合スコア136
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/21 15:29
0
絵が動くゲームであれば、最小限、画像を表示して位置を変える、のような処理をすることが必要です。
ただ、その仕組みはプログラミング言語やフレームワーク、ゲームエンジン(shienaさんの回答が詳しいです)によってさまざまなので、まずは開発言語やフレームワークをひとつに絞って調べてみると良いでしょう。
①~④のところはそういうところを学んでいけば自然と分かってくるはずです。
それに動くメカニズムを完全に理解していなくてもゲームは作れます。
(ものすごく高度なことをするのであれば話は別ですが...)
例えば、Unityというゲームエンジンを使えば、簡単ではないですが、ビジュアル的にかなり凝ったゲームを作れます。プログラミング言語はC#またはJavaScriptが使えます。
ゲーム作成入門サイトというのもたくさんあります。
参考リンクがおすすめ、という訳ではありませんが、こういうサイトを見れば、どのようにゲームを作っていけば良いのかが分かってくるのではないでしょうか。
ゲームだと動画のほうが分かり易いこともあるでしょうから、YouTubeやニコニコ動画でゲーム作成入門の動画を探すのも良いでしょう。
「if文や配列を何度勉強しても」という点については、そういった開発をする中で、正しくかつ効率良くコードを書くための技術を練習するものなので、並行して学んでいく必要があります。
参考リンク:
<ゲームを作ろう!>超初心者のためのプログラミング入門 - 楽しい趣味のプログラミング -
http://www.gamecradle.net/document/main/content/doki/introduction.html
Pygameでゲームプログラミング入門
http://gamepro.blog.jp/python/pygame/%E5%85%A5%E9%96%80
初心者のためのCocos2d-xゲームプログラミング入門
http://libro.tuyano.com/index2?id=9486003
投稿2015/10/21 15:04
編集2015/10/21 15:17総合スコア9390
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/21 15:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/21 15:19