
自分は高校生で、昔からゲームやそれの販売サイトを作ってみたいと思っていて、
入門書を調べているのですが、なかなかよさげなのが見つからず、
とりあえずこのレビューが良さそうなのを見つけました。
ゲーム作りで学ぶ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で質問しましょう!
似たような質問が見つかりました
- Java キー入力について 1 2023/06/03 11:04
- 人事・法務・広報 ショボい実務経験と趣味で凄いスキル、どちらを評価しますか? 1 2023/12/06 18:17
- Java mac mini 2009 でのmac OS における Java の入れ替えについて 1 2022/12/27 19:23
- オンラインゲーム 質問です。 好きなYouTuberがGT5を配信してて面白そうだから、最近PS4でGTA5を購入した 2 2023/08/27 23:13
- デスクトップパソコン パソコン 2 2023/01/10 02:18
- Java JavaでWebページ作成 7 2023/07/21 21:09
- その他(コンピューター・テクノロジー) ショッピングセンターのパソコン教室の謎 5 2024/02/22 23:53
- Java プログラミングのプの字も知りませんが、プログラミングを勉強したいです。とりあえず、学ぶものを決めない 3 2022/11/04 13:10
- 携帯型ゲーム機 23年9月時点 任天堂のゲーム本体主流は? 1 2023/09/13 13:58
- Java javaについて 1 2023/12/06 20:08
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
食材の期限を管理するためにGASを利用しようとしたのですがうまく動作してくれません
JavaScript
-
-
4
プログラミングを学ぼうと思います。 1ヶ月程度である程度習得できる言語は何ですか?ブラウザ上でアプリ
その他(プログラミング・Web制作)
-
5
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
6
インターフェースとトレイトってどっちが正義なんですか? インターフェースを利用するとそのクラスのよう
その他(プログラミング・Web制作)
-
7
プログラムの実行時に'<'でリダイレクトする場合でも、キーボードからの入力を受け取られる件について
C言語・C++・C#
-
8
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
9
プログラミングの雑談がしたいのですがどこで出来ますか?
その他(プログラミング・Web制作)
-
10
エディターで以下のような色になるエディターは解りますか?
その他(プログラミング・Web制作)
-
11
ビデオのJSについて
JavaScript
-
12
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
13
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
14
Pythonでの文字列からfloatへの変換エラー
その他(プログラミング・Web制作)
-
15
パソコン
C言語・C++・C#
-
16
htmlが簡単に作成できるアプリについて
HTML・CSS
-
17
C言語について。
C言語・C++・C#
-
18
プログラミング 学習
JavaScript
-
19
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
20
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
ゲームの開発言語(1980~2010年)
-
ゲームプログラマーとシステム...
-
ゲームを日本語化しようとする...
-
格闘ゲーム製作ツールもしくは言語
-
C、C++でもぐらたたき
-
C言語、C+、C++、C#の違い
-
COBOLでのNOT = の AND条件
-
C言語とhtmlの違いを どな...
-
リピート再生が出来ません
-
【Cか】ノベルゲーム【Jav...
-
VBSでDim、Private、Publicの違い
-
HOLONついて教えてください。
-
VCとVC++
-
プログラムに書かれる"%"記号の...
-
TANDEM言語ってあるんですか?
-
スクリーンセイバーの作り方
-
PL/Iについて
-
VBScriptで引数を省略したい場合
-
Excel VBAで文字化けする (英語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
ゲームの開発言語(1980~2010年)
-
Now Loadingについて
-
ノベルゲームを作ろうとおもっ...
-
フリーゲームを解析したい
-
C言語でのsleep機能について
-
ゲームを日本語化しようとする...
-
ゲームプログラマーとシステム...
-
物理演算エンジンをつくる会社...
-
C言語で簡単なゲームを作る方法
-
javaFXで機能的にゲームを作る...
-
Unityでブラックジャックゲーム
-
物理エンジンの自作はできるの...
-
3dと2dを混合したゲームをUnity...
-
箱庭ゲームの壁すり抜けの疑問
-
DirectXを使用したゲームでの画...
-
VisualC++でアニメーションgif...
-
シーケンス制御を用いたゲーム...
-
Javascriptでpk戦のゲームを...
-
画像を差し替えるだけでオリジ...
おすすめ情報