質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

6回答

7346閲覧

ゲーム作りでずっと疑問に思うこと

question_april

総合スコア90

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

8クリップ

投稿2015/10/21 14:32

こんにちは

自分にとってずっと解決されない疑問があります。
それは、if文や配列を何度勉強してもゲーム制作につながりそうにないということです。

私の目標は一人でゲーム(白猫プロジェクトのようになにかしら動くゲーム)を作ることなのですが、コンソール画面に配列結果などを出し続けてもゲームにはなりませんよね。。
漠然と、「ゲームはどうやってつくられているのか」になってしまうのですが、それだと回答が無限にあってしまうので、再度自分に問いかけて、今聞きたい疑問をかなり大きく分けて4つに絞りました。


①どういう種類のファイルが必要なのか

②どのようなクラスが必要なのですか?
③動きを出すためのメソッドやライブラリがあるのですか?
④また、上記①、②、③をどうやって連動させるのですか?


このうちのどれかでも有難いので回答お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

ゲームの中身はif文や配列でできています。

例えば、RPGを題材に上げると、アイテム欄や特技などは配列で保存されます。
戦闘に入ったら、攻撃時にランダムで生成した値が閾値を超えたら
クリティカルヒットなどの処理をif文で実装します。

という風に内部的にどうするのか。というロジック処理にプログラムは使われるわけです。

①どういう種類のファイルが必要なのか

こちら、どういうゲームを作りたいかによるのですが、
・プログラム
・画像
・音楽

が、少なくとも必要でしょうね。

②どのようなクラスが必要なのですか?
④また、上記①、②、③をどうやって連動させるのですか?

こちらも設計思想によるのですが、よくあるのはMVCというアーキテクチャで製造されるケースです。
型(Model)・見た目部分(View)・ロジック部分(Controller) という意味です。
更に加えてデータベースでしょうか。

型(モデル)というのは、例えるならばクッキーの型のようなものです。
星形クッキーを作る型であっても、入力するお菓子の生地を変えれば、
数種類のクッキーが作れますよね?
それと同じことをプログラムでも行っています。クッキーの型がモデルで、
入力する生地がデータベースを指します。

そして、そのようにして作成したモデルをどのようにして動かすのか・・・
それを定めるのがロジック部分です。
Aボタンを押したらジャンプする、Bボタンを押したら走る。。など、
プログラム全体の処理の内容を決めています。

見た目ですが、こちらはロジックで定めた部分をどのように表現するかを
決定する部分です。
例えば、ロジック部分で横線一本を引くことを決めた。
しかし、それを何色で、どのくらいの太さで絵画するのか?
そういったことを決めます。

③動きを出すためのメソッドやライブラリがあるのですか?

あります。
自分で作ることも可能ですが、ゲームのような特殊性の高いプログラムを作るときは、
フレームワークと呼ばれるでき合わせのプログラムの断片が
たくさん入った辞書を使います。それによって、一から自分で作れなくても、
再利用するだけで機能を実装できたりします。

ただ、これらの機能を利用するためには、基礎的な知識を身につけて
少なくともプログラムが読める必要があります。
そういった前提を構築するために、今はif文や配列を勉強なさっているのだと思います。

しかし、それも全てを知っている必要はなく、
作りたいゲームのレベルに合わせて知っていれば良いと思います。
全部勉強し終わる前に作りたいゲームが作れそうなら、
そちらを優先した方が楽しいですし、学びも効率的だと思いますよ。

勉強がんばってくださいね。

投稿2015/10/21 15:00

SKYYFISH

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/21 15:19

回答ありがとうございます ゲームの中身はif文と配列をつかっているのですか!具体例を挙げてくださったことでイメージが浮かびました。目から鱗です また、クラス分けの例もだしてくださり、こちらもイメージすることが簡単にできて理解しました。 ここまで詳しく知ってらっしゃるということは、プロのプログラマーの方なんだろうなと勝手に思って喜んでおります。すみません。 そして、動きを出すためのものも別途あったのですね! 「フレームワーク」!今から調べてみます!ありがとうございます また、フレームワークを使いこなすには基礎がかなり重要なのですね。がんばります。 最後に、励ましのお言葉を有難うございます とてもためになりました
guest

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/23 04:22

わわわありがとうございます!!! とても詳しく書いてくださって! 今時間がないので後でゆっくり拝読させていただきます!
guest

0

最近のゲーム制作ではフルスクラッチではなく、ゲームエンジンを利用することが多いです。
有名なところではUnity5Unreal 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
shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/21 15:22

回答ありがとうございます! そして、Unityは有名ですね! ただ、IDEなしで作れるようになりたいと考えております。 故に、 >>・HTML5でゲーム開発。JavaScriptゲームフレームワークまとめ ・Top 10 HTML5, JavaScript 3D Game Engines and Frameworks のURLがとてもありがたいです!! 勉強します! ありがとうございました
guest

0

自分は趣味でゲーム作りをしており、unityしか使った事がないので、その知識で質問に答えます。

①どのようなファイルが必要なのか
・白猫のような3Dゲームが作りたいのであれば3Dモデルが必要ですよね
Unutyの場合、やり方次第でMMDモデルを使うことができるのでMMDモデルデータが必要です。

②どのようなクラスが必要なのか?
・仕様と作り方によるのではないでしょうか

③動きを出すためのメソッドやライブラリがあるのでしょうか?
・unityでアニメーション遷移用のファイルを作り、その遷移用のファイルで設定した値をスクリプトで変更する事で動きを出す事ができます。

④連動させているのですか?
・モデルにスクリプトを当てて、どの動作をしたときにどのアニメーションをモデルにさせるかというのをスクリプトで書いて実行している感じです。

if文や配列がどのようにゲーム作成につながるか?
というよりゲームなんてほとんどがrandomとif文と配列の塊だと私は思います。

一度、実装したいゲームの仕様を神に書き出し、擬似コードにしてみてください。
「~だったら」という言葉が出てきたらif文の登場です。
例)
hpが0以下だったら
ボタンが押されたときに0~100までのランダムの値が74以上だったら

こんな感じです。興味があればunityで調べてみる事をお勧めします。
if文と配列が分かっていれば他に覚える事は少ないと思いますので

投稿2015/10/21 15:21

animeing

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/21 15:30

回答ありがとうございます! やはりUnityのかたおおいのですね!
guest

0

まずは、なんでも1つゲームを作ってみると良いとおもいます。
ドットインストール
で、自分にあっていそうなレッスンをみつけ、それを視聴して実際にプログラムを作成してみるとよいとです。
(ここに自分の好みのものがなければ、 web 上や書店で ゲーム作成例はたくさん見つけることができます)

投稿2015/10/21 15:14

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/21 15:29

回答ありがとうございます! ドットインストールさんは本当に有名ですよね! インストール方法などでお世話になったことがあります。 ただ、私にはついていけないことも多かったので先へ進めない場合が多かったのですが、やはり有名でありますし、前よりも力が付いたと思いますので、再チャレンジしてみようと思います! ありがとうございました
guest

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
argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

question_april

2015/10/21 15:26

回答ありがとうございます! >>まずは開発言語やフレームワークをひとつに絞って調べてみると良いでしょう。 そのアドバイスで今気づきました。私は一通りの言語を覚えて行こうと最初からおもっていましたが、そうすると効率が悪いですよね。。 そして、 >><ゲームを作ろう!>超初心者のためのプログラミング入門 - 楽しい趣味のプログラミング - すばらしいURLをありがとうございます! 私の検索方法が悪いせいか、いつも核心をついた結果が得られずにいました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問