自分は高校生で、昔からゲームやそれの販売サイトを作ってみたいと思っていて、
入門書を調べているのですが、なかなかよさげなのが見つからず、
とりあえずこのレビューが良さそうなのを見つけました。
ゲーム作りで学ぶ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を使って教えてください。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
【お題】 ・西暦2100年の「小学生のなりたい職業ランキング」で1位になった職業は何か教えてください
-
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
食材の期限を管理するためにGASを利用しようとしたのですがうまく動作してくれません
JavaScript
-
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
-
4
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
5
Python、プログラミングについて質問です
C言語・C++・C#
-
6
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
7
インターフェースとトレイトってどっちが正義なんですか? インターフェースを利用するとそのクラスのよう
その他(プログラミング・Web制作)
-
8
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
9
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
10
プログラミングを学ぼうと思います。 1ヶ月程度である程度習得できる言語は何ですか?ブラウザ上でアプリ
その他(プログラミング・Web制作)
-
11
プログラムの実行時に'<'でリダイレクトする場合でも、キーボードからの入力を受け取られる件について
C言語・C++・C#
-
12
プログラミングの雑談がしたいのですがどこで出来ますか?
その他(プログラミング・Web制作)
-
13
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
14
エディターで以下のような色になるエディターは解りますか?
その他(プログラミング・Web制作)
-
15
ビデオのJSについて
JavaScript
-
16
パソコン
C言語・C++・C#
-
17
Pythonでの文字列からfloatへの変換エラー
その他(プログラミング・Web制作)
-
18
めちゃきれい
CGI
-
19
C言語について。
C言語・C++・C#
-
20
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲームの開発言語(1980~2010年)
-
ニンテンドーDSのソフト作成に...
-
箱庭ゲームの壁すり抜けの疑問
-
ゲーム開発の入門書を探しています
-
javaでゲームを作りたいです。...
-
一番簡単にトランプゲームを作...
-
Now Loadingについて
-
UNITY Float型の接尾辞fって
-
PostManはいずこ
-
プログラムに書かれる"%"記号の...
-
C言語でメモ帳のようなソフト...
-
Iria→Irvineの後継って何でした...
-
フォートランでいいのか?
-
Win32APIは覚えて損する?
-
DelphiでVB用のDLLを使えないで...
-
自作ソフトウェアの販売方法
-
動的計画法を記述する言語とは?
-
exeファイルを作ったり改造した...
-
FORTRANと他の言語(c、c++、ba...
-
Emacsは時代遅れ?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
ゲームプログラマーとシステム...
-
フリーゲームを解析したい
-
ゲームの開発言語(1980~2010年)
-
abnormal program termination
-
C#で音楽の2曲同時再生の仕方
-
Now Loadingについて
-
このゲームって楽しいと思いま...
-
ゲーム開発の入門書を探しています
-
ゲームを日本語化しようとする...
-
高校生むけC++参考書
-
格闘ゲーム製作ツールもしくは言語
-
1日1回だけ遊べるゲームの作り...
-
Javaでゲーム
-
unityかvisual studio でC++を...
-
ノベルゲームを作ろうとおもっ...
-
一番簡単にトランプゲームを作...
-
ハイスコア
-
物理演算エンジンをつくる会社...
-
ゲームの作り方について
おすすめ情報