
自分は高校生で、昔からゲームやそれの販売サイトを作ってみたいと思っていて、
入門書を調べているのですが、なかなかよさげなのが見つからず、
とりあえずこのレビューが良さそうなのを見つけました。
ゲーム作りで学ぶJavaプログラミング入門 Java7版
新人君! RPGの世界でJavaを学ぼう
なぜか古いのばかりなんですが、マイクラとかが好きなので、
Javaにこだわっているわけではありませんが、
この言語のものを調べているわけです。
Javaですが、ゲームのプラットフォームはスマートフォンではなく、
パソコンでリリースしたいと思っています。
ゲームは完成次第スチーム等で販売する予定です。
そのほかおすすめの本などがありましたら是非、教えていただけると幸いです。
パソコンはWindows11の64bit版です。
No.3ベストアンサー
- 回答日時:
まずは概要から。
どんな「ソフトウェア」(ゲームを含み)でも押さえておかなきゃならない基本概念にRead-Eval-Print Loop(略してREPL)と言うモノがある。
REPLってのはインタプリタの設計技法なんだけど、極論、どんなソフトウェアだろうとREPLなんだよ。だからREPLと言う「組み立て方」をまずは把握するのが重要。
REPLとは
・読み込み部
・評価部
・出力部
ってパーツを別々に作っておいて、それらを組み合わせてループさせろ、って事だ。
この基本構造からは例えばExcelとかのソフトウェアも逃げられない。
ゲームなんかはグラフィックスが絡むし、ついついそっちに意識を持っていかれるけど、実はこの「REPLと言う構成」を意識するだけでだいぶ視界は開けるんだ。
GUIなんかの設計法にMVC(Model-View-Controller)なんつーものもあるんだけど、実はこれも名前が変わってるだけで、基本的なアイディアはやっぱりREPLなんだ。REPLって設計方法を理解してるかどうか、ってのはかなりの違いを生む。
ぶっちゃけ「ゲームの書き方を教えます!」的なサイトもちらほらあるけど、その「REPL観点」を持ってるトコはほぼない。テクニカルな枝葉末節にこだわってて(確かにそのテの「テクニカルな話題」は重要ではあるんだけど)、「ゴチャゴチャなコード」を提示してる例が多いんだ。
いずれにせよ、「骨太の設計方針」を取るならREPL、って設計法は欠かせない、んだ。そしてREPLを理解するとある意味「プログラムを組む」と言う行為は「ワンパターン」へと落とし込まれる。
なお、ザックリ言うと、ビデオゲームの成立は2系統あって、一つはゲームセンターでのアーケードゲーム(アクションゲームとかシューティングゲームとか)、もう一つが(北米の)大学のメインフレームで成立したゲーム(アドベンチャーゲームとかRPGとか)があるんだ。エロゲのルーツを辿ってくと大学のミニコンとかで動いてたゲームだった、ってのが笑っちゃうんだけど(笑)、いずれにせよ、アドベンチャーゲームとかRPGとかはモロにREPLを含む大学のコンピュータサイエンスの授業/宿題的なプログラム構成法の応用で始まったんだ(RPGそのものは元々ボードゲームなんで、ボードゲームであるTRPGの「規則」をインタプリタ的な「評価部」に当てはめるように実装した、って言って良い)。
一方、ゲーセンのゲームはテクニカルな意味だと「企業秘密」で発展してきた背景があるんで、一般論、っつーかノウハウは公開されてきてないトコがあるわけね。
だからアクションゲームとかシューティングゲームは「纏まった一般ノウハウがない」前提なんで、作るのは難しいんだ。ノウハウがない、って事は徒手空拳で作らなアカン、って事になる。
いずれにせよ、RPG作成でも基本的なトコでは、「大学の宿題」的なインタプリタ作成法の影響が元々大きいジャンルなんだよ。
注: 実際、古典的なテキストアドベンチャーゲームのゲームエンジンはほぼ「インタプリタそのもの」を実装してたり、あるいはコンパイラを書いてるのに等しかったりする。
とまぁ、それが概要だ。
さて、「ゲーム作成法」に関する書籍だと、多分一番有名なのはソフトバンクのシリーズなんじゃなかろうか。WindowsでC++前提になる、って言う縛りにはなるけどね。
アドベンチャーゲームプログラミング:
https://www.sbcr.jp/product/4797320273/
ロールプレイングゲームプログラミング 2nd Edition:
https://www.sbcr.jp/product/4797339616/
ダンジョンゲームプログラミング:
https://www.sbcr.jp/product/4797346282/
アクションゲームプログラミング:
https://www.sbcr.jp/product/4797335971/
シューティングゲーム プログラミング:
https://www.sbcr.jp/product/4797337214/
ご回答いただきありがとうございます。
初めて聞いたREPLですが、インタプリタを知れば理解できるんですね。
ゲームを作る前に勉強しておいたほうが良さそうなので、
回答者様(神)のようなプログラマーになるためにもここは押さえておくべきだと思いました。
以前知恵袋でも同じような質問をしたのですが、
あなたのようなまともな回答はなく、
逆に否定的な回答がつくことがあったので、
教えてgooに引っ越してきてよかったと思っております(関係ないけど)。
No.6
- 回答日時:
あ、ゴメン。
ソフトバンクの本のシリーズに抜けがあったわ。こんな本もある。
3D格闘ゲームプログラミング:
https://www.sbcr.jp/product/4797341805/
いずれにせよ、Windows + C++限定、かな。
No.5
- 回答日時:
「ゲーム」って言っても、その内容によって、
準備するべきものや、やるべきことは全く違うんじゃないの?
あなたが具体的にどんなものを作りたいのかによって
話は違ってくる。あなたの「ゲームを作りたい」が
岸田の「首相になりたい」と同種のものだったとしたら、
あまりにも無意味というか...
No.4
- 回答日時:
ついでに参考まで、に、一体REPLと言う「インタプリタ作成法」で極簡単なゲームをJavaで書くとどうなるのか、ってのを見せてみよう。
繰り返すが、全てのソフトウェアは極論インタプリタなんだ。「言語インタプリタ」って枠組みが実は「ソフトウェアを書く基本」になってるんだけど、大学とかで教える側も教わる側もあまりそれを取り上げる「理由」が分かってない、って言う残念な事実があるんだ。
だからそこが強調されない。
実は「言語インタプリタを作る」って事はなんかエラソーな「アカデミズム」が理由じゃないんだよ。色んなソフトウェア制作に応用出来る「基礎的な考え方」だから取り上げてる、ってのが本当の理由なんだ。
最近のトレンドだと、「最初に紹介するプログラム」が「Hello, World!」って表示するだけのバカなプログラムじゃなくって、「数当てゲーム」を採用してるケースが増えてきている。
数当てゲーム、ってのはコンピュータ側が乱数で1〜100のうちのテキトーな数を選び、プレイヤーがその数を当てる、っつー至極つまらん(笑)ゲームだ。
でも「つまらん」って事は「実装が簡単だ」って事を意味するんで、それを「プログラミング入門」の最初のテーマに使ってる事例が増えている。
個人的にはJavaが苦手なんだけど(Javaは専門じゃない・笑)、REPLの考え方を使って「数当てゲーム」を書けば、次のようになるんじゃないか。
数当てゲーム:
https://paiza.io/projects/uaf8FH6taTSZJaATwTd0hA
Paiza.ioではエラーが出てるが、こちらの環境ではコンパイルは通ってる。っつーか、Paiza.ioでの「入力」が独特なんでエラーが出ているだけ、だ。
繰り返すけど、僕個人はJavaは専門じゃないんで、Javaプログラミングの「スタイル」として妥当なプログラムになっているかどうかは知らない。あくまで「理論的な話」なんで、それもあって「参考程度に」ってこった。
Javaのテクニシャンならもっとキレイでマトモなプログラムを書いてくれるだろう。
Javaだと1クラス = 1ファイルって縛りがあるんで、総計3つのファイルにまとめてある。
それはこれらだ。
・Main.java
・Env.java
・Messages.java
Main.javaはプログラムのエントリポイントになる。要は「ここからプログラムが呼び出される」わけで、他の2つのソースコードから作られたクラスファイルも全部Mainクラスから呼び出される。
まぁ、これはJavaの基本だよな。
次に、先にMessage.javaから説明すると、これは本当にプログラムで表示されるメッセージを独立させて作ったクラスになっている。
今の国際化の時代だと、例えばOyama77氏がゲームを作ってSteamで売出して、外人さんがキョーミを持ってくれたのに「英語化するのが難しい」とかなれば困るだろ、って話になる。
結果、今のトレンドだと、「メッセージ関連」とか、あるいはそれこそ「RPGのシナリオ/セリフ」なんかは別ファイルに纏めてる例が多い。
そうすればソースコードを全部探し回らなくても、一箇所だけ「改変」すれば外国語化が可能になる。そのためにメッセージ関連は別にしてまとめておくわけだ。
実際には、別にテキストファイルをまた用意しておいて、Messages.javaみたいなクラスへと「読み込む」みたいなシステムになるんじゃないか。いずれにせよ、「メッセージ関連は別分けにして纏めておく」ってのが21世紀的なスタイルだと思う。
これを「メッセージ分離方式」と呼ぶ。
今回のプログラムで中心的役割を担うのがEnv.javaだ。これはゲームの環境データを司るクラスだ。かなり端折ってるけどな(笑)。
Envってのは「環境」から名付けたわけだけど、基本的に「全てのゲーム進行にまつわるデータ」を詰め込む為の場所だ。今回はsecretNumber(答え)、guess(ユーザーから受けた入力)、cmp(入力値が答えより大きい/小さい、あるいは同じかのデータ)、あとはEnvクラスから取ってきたメッセージ情報の4つしかないけど、RPGだったらマップデータとかパーティメンバーデータ、敵のデータ、とか自分等が今どこにいるのか、とか様々なデータを詰め込む事となる。必要に応じて、データ作成の為の別のクラス(例えば勇者クラスとかモンスタークラスとか)を作ってここに取り込む事もあるだろう。いや、確実にある(笑)。
いずれにせよ、環境データ、と言うのはゲーム進行に対して「プロセス対象」のデータだ、と言う事だ。そしてプログラムを書く、と言う事でまず重要、あるいは最初にしなければならないのは「データ設計」なんだ。環境データをどう作るのか、がプログラムを書く上で非常に重要で、また「プログラミングのやりやすさ」にモロ影響を与える。下手なデータ設計をすれば下手なプログラムになる、ってこった。
ぶっちゃけ、この辺、実は分かってない質問者が多い。「こんなプログラムを作りたい」とか言う思いがあっても、最初にやらなアカンのは「データ設計なんだ」ってのを大学とかで教わってない可能性が高いんだよ。
プログラミングが上手いヤツはデータ設計が上手い。そうじゃないヤツはそれなりに、なんだ。
要は「データ設計」さえ何とかなれば「プログラミング」の難易度は下がる、んだ。
また、環境データは「ゲーム進行にまつわる全データを詰め込んだモノ」って言った。言い換えるとこの部分を「ファイルに書き出せば」セーブが成立する。書き出した環境データを「読み込めば」ロードが成立する、って事だ。
さて、端折ったのはread、eval、printと言うのを全部Envのメソッドにしちまった辺りだ。本当ならJavaならそれぞれクラスにして・・・ってのが必要だろうけど、一つはそれぞれがこのゲームでは単純なのでわざわざクラスにする必要が無い事、クラスファイルをあまり増やしたくなかった事、そして敢えてREPLを強調する為に、ってぇんでこうした。
そしてJavaは不可思議な事に、フツーの言語に存在する「関数」がないんだ。何でもクラスで書かなアカンので、この辺面倒くさい事になる言語になっている。
Main.javaで次のような記述をしてる。
// Read-Eval-Print Loop(REPL)
env = env.read().eval().print();
言っちゃえばここがこのプログラムの実行本体、で、この書き方を成立させる為「だけ」にreadもevalもprintもEnvのメソッドにしてる。ここはインスタンス変数をreadで加工してそのままevalに渡し、そこでも加工してprintに手渡し、「それらの結果」をインスタンス変数envに再代入してる。
これを「メソッドチェーン」と呼ぶ、んだ。
繰り返すけど、メソッドチェーンを成立させるが為にreadもevalもprintもEnvのメソッドになっていて、それぞれは自分自身、つまりthisを返すように書いている。
readメソッドはユーザー入力を受け取り、Envのインスタンス変数guessにその値を代入する為だけ、にある(ちとこの辺の設計に文句がある人もいると思う・笑)。そしてreturn thisする。
printメソッドは基本的にインスタンス変数cmpを表示するためだけ、にある。そしてreturn thisする。
evalはゲーム進行を司るキモ、でここが「プログラム上の処理」では一番重要だ。ユーザー入力を代入したインスタンス変数guessと答えであるインスタンス変数secretNumberを比較して、適した文字列をmessagesから引っこ抜いてきてインスタンス変数cmpに代入する。結果cmpがそのターンの「結果」を保持することになるわけだ。
そしてやっぱり最後にreturn thisする。
繰り返すが、評価器(eval)がゲーム進行を司る部分になる。場合によってはまた別に「小さな部品」をクラスで作ってevalで呼び出す事もあるだろうけど、いずれにしても、これがRead-Eval-Print LoopのJavaによる「簡単な」説明になる。
で、大掛かりなプログラムになってもこの「構造」は基本的には変わらないんだよ。
と言うわけで、簡単なREPLの説明はここまで、としよう。
あとは専門的にインタプリタの作り方を書いてる本とか、あるいはWeb検索で調べてみて欲しい。
以上。
No.2
- 回答日時:
No.1です。
> コーディング本なら…、それがまた難しくて、
これは、目的が無いまま覚えるだけ、と言う事になるので、
難しく感じるだけです。
ここでは、基本的なコマンドと記述の仕方、
ぐらいを覚えればよいと思います。
> ゲーム開発の本自体…、初心者にはむずかしそうだな~と
先の本で基本的なコマンドと記述の仕方を覚えた後であれば、
ゲーム開発本では、目的を持った実践を学ぶ本なので、
覚えること自体に楽しさが加わるはずです。
ただ、先に書いた、ゲームの原作を作ると言う学びではないので、
それはまた別なお勉強になるかと思います。
No.1
- 回答日時:
ゲーム開発は、ゲームの筋書きを考える、それをプログラミングする、
と言う2段階になります。
これを一人で行う、筋書きを考えながらプログラミングする、
各々を専門化が行う、
等の制作方法があります。
ゲームの筋書きを考える、という入門書は無いと思います。
プログラミング(コーディング)するという入門書は、
プログラム言語ごとに専門書が本屋さんに並んでいるので、
お好みでどうぞ。
ご回答いただきありがとうございます。
コーディング本ならもうすでに買っていて、
それがまた難しくて、ゲーム開発をしながら学べる本というのを探していたんですね。
ですがゲーム開発の本自体コーディングの本であるということなので、
初心者にはむずかしそうだな~と思っています(-_-;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プログラミングを学ぼうと思います。 1ヶ月程度である程度習得できる言語は何ですか?ブラウザ上でアプリ
その他(プログラミング・Web制作)
-
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
Pythonでの文字列からfloatへの変換エラー
その他(プログラミング・Web制作)
-
-
4
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
5
パソコン
C言語・C++・C#
-
6
htmlが簡単に作成できるアプリについて
HTML・CSS
-
7
プログラミング言語について
その他(プログラミング・Web制作)
-
8
プログラマーに向いている人の特徴や性格は何がありますか?
その他(プログラミング・Web制作)
-
9
OSS(オープンソースソフトウェア)のライセンスについて簡易に書かれている本やサイトについて
オープンソース
-
10
プログラミングについて プログラミングの練習(勉強)ができるようなサイトなどありませんか? あれば教
その他(プログラミング・Web制作)
-
11
python エラー
その他(プログラミング・Web制作)
-
12
複数のパソコンの中の1つのパソコンのアパッチドキュメントルートをインターネットブラウザで見れるように
PHP
-
13
プログラミングの進学について
その他(プログラミング・Web制作)
-
14
c++の勉強方法を教えてくださいプログラミングをやった事がなく1から勉強を始めようと思います1日1時
C言語・C++・C#
-
15
Javascript で条件分岐を使い共通コードをまとめる方法が分かりません
JavaScript
-
16
覚えることが少ないプログラミング言語を教えて下さい。
その他(プログラミング・Web制作)
-
17
HTML CSSの勉強のポートフォリオを作りたいんですが、どうしたらいいですか?
HTML・CSS
-
18
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
19
以下の技能を無料で受講できるというところがあるのですが、それぞれどんな仕事に役に立ちますか? (どん
その他(プログラミング・Web制作)
-
20
VBAでクイズゲームの作り方
AJAX
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フリーゲームを解析したい
-
乱数について(Rnd関数)
-
ニンテンドーDSのソフト作成に...
-
シーケンス制御を用いたゲーム...
-
ノベルゲームを作ろうとおもっ...
-
プログラムの繰り返し実行
-
ゲームプログラムを組むのに必...
-
OpenGLでの3Dモデルの使用について
-
DirectX9を勉強できるサイトを...
-
C言語、C+、C++、C#の違い
-
Cプログラミングでハングマンゲ...
-
HOLONついて教えてください。
-
天文ソフト(星図ソフト)を作...
-
プログラムに書かれる"%"記号の...
-
録音済の音楽用CD-Rのファイナ...
-
近年誕生したプログラミング言語
-
PHPの入門
-
まったくの経験0から独学でC...
-
VBScriptで引数を省略したい場合
-
プログラムからアイコンファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
フリーゲームを解析したい
-
ゲームを日本語化しようとする...
-
abnormal program termination
-
ゲームの開発言語(1980~2010年)
-
DirectXを使用したゲームでの画...
-
VisualC++でアニメーションgif...
-
ゲーム制作にかかる手間について
-
モンスターハンターフロンティ...
-
ポトリスのようなゲームを作り...
-
プログラマの方に質問です
-
乱数について(Rnd関数)
-
Now Loadingについて
-
JavaScriptを使ったゲームがお...
-
シーケンス制御を用いたゲーム...
-
JavaScriptで作れるゲームの限界
-
ゲームのソースコードを解析し...
-
Lispでゲーム制作
-
ゲームプログラミングを勉強し...
-
androidアプリプログラミングに...
おすすめ情報