こんにちは!今回はゲームプログラミングについてです。
よくプログラミングを学び始めた方に向けて、
「まずは自分で何か作ってみるのが一番勉強になるよ」
といっています。これはもちろん事実です。ただ言われた側のことを考えると、何作ればいいんだよってなるのもわかります。
そんな中でよく聞くのが、ゲームを作ってみたいという意見です。
これはとてもお勧めです。ゲームを作ることができると自分の中のモチベーションがとても上がります。
どんな内容の学習も同じですが、やはり継続が一番大事で一番難しいんです。
自分の作りたいものを作ることができれば、楽しんで継続することができます。
なので今回はRPGをPythonで作ることを目標に、RPG作成の考え方を解説します!
初めに
この記事では以下の内容を解説します。
- PythonでRPGを作るための準備
- RPG作成の手順、考え方
実際のコードはこの記事では解説しません。
⇩の記事でソースコードを全公開しているのでこちらも合わせて見ていただけると嬉しいです!
こんな感じの作ってます。
PythonでRPGを作成する準備
早速準備から解説していきます。最初は開発環境を用意しましょう!
開発環境の構築
この記事ではPythonでの開発を想定して解説をします。なのでまずはPythonをインストールします。
Pythonのインストール
Pythonは公式サイトから最新版をダウンロードしてインストールしてください。
エディタのインストール
コードを書くためのエディタをインストールします。これは本当になんでもいいですが、プログラム初心者の方などはVSCodeを入れておけば問題ないと思います。
VSCodeのダウンロードサイト : https://code.visualstudio.com
ちなみに僕はneovim使ってます
https://neovim.io
ライブラリインストール
ここまででPythonは使えるようになっているので環境構築は終わりですが、pygameを使って開発していくのでpygameのインストールまでやってしまいましょう。
ターミナル(コマンドプロンプト)を開いて
pip install pygame
を実行してください。これでpygameが使えます。
VSCode使ってる人は、開発用のディレクトリでCtrl + @でターミナルを開くことも可能です。
開発環境の確認
ここまでの作業ができているか確認しましょう。
test.pyというファイルを作成して、次の内容を書いてみてください。
import pygame
print("開発環境の準備が完了しました!")
保存できたらターミナルで、
python test.py
と実行して見ましょう。pythonのバージョンによってはpython3 test.pyの可能性もあるので試してください。
実行して、ターミナルに”開発環境の準備が完了しました!”と出力されれば成功です。
RPG作成
ここからRPG作成の流れを説明していきます。冒頭でも言いましたが、この記事ではコードを実際に書いて説明はしません。
最初に何を作って、次に何を作って、、のような流れの説明をします。
何度も宣伝して申し訳ないですが、以下の記事では実際のコードを全部公開してRPGを作成しています。
こちらもぜひ読んで見てください!
①ゲームウィンドウを描画する
まずはゲームウィンドウを描画する作業が一番最初です。ゲームウィンドウとはプログラムを実行した時に表示されるウィンドウです。
このウィンドウの中でマップを描画したりキャラを描画したりしてRPGを作成します。
なのでどんなサイズの画面でゲームをプレイするかによってこのウィンドウサイズを決めていきます。
②マップを描画する
次はマップを描画します。基本的にはタイルと呼ばれる小さい画像を並べることでマップを作成していきます。
例えば、ウィンドウサイズが640×640の場合、64×64のタイルを縦横に10枚ずつ並べてマップを描画するということです。
マップ中に岩だったり木だったり、何かオブジェクトを描画したい場合はそれぞれのタイルを用意します。
タイルは自分で作成してもいいですし、公開してくれているものを利用するのでもOKです。
ネット上に公開されているものを利用する場合はその規約はしっかりと読んでから利用しましょう。
③キャラクターの描画
次はマップ上にキャラクターを描画しますy。キャラクターもタイルと同じサイズで用意しておくと便利です。
キャラクターの描画自体は簡単で、画像を読み込んで座標を指定すればマップ上に表示されます。
ただキャラクターは移動できる必要があるので、移動処理の実装が必要です。
移動処理もキー入力を受け取ってその方向に応じて座標を再計算する感じです。もちろん画面の端っこを超えて移動できない、障害物の上は移動できないなど制限があると思うのでそこは工夫する必要があります。
(応用)マップスクロール
ここは飛ばしても大丈夫です。
マップスクロールを実装すると、キャラの動きに合わせてマップが移動します。
どういうことかというと、ウィンドウサイズは640×640、マップサイズは1280×1280ということが可能になります。
表示されるマップのサイズは変えずに、マップ全体のサイズを大きくすることができます。
例えば、キャラクターが右に進にしたがってマップの視点も右に動くこと最初は隠れていて見えなかったマップに移動します。
よくあるRPGを想像して貰えば大丈夫です。実装的に少しだけ難易度が上がるので飛ばしても大丈夫ですが、あるとより楽しいと思います。
④敵の描画
次は敵を登場させます。描画方法はキャラクターと同じです。同じ敵キャラを何体か出したい場合は配列を使って実現します。
この配列には敵の情報を保持しておきます。
敵は自動で動いて欲しいのでその処理も追加します。
ここまでで自分のキャラを自由に動かすことができて、マップ上には敵がランダムに動いている状態です。これだけでもRPGっぽいです。
⑤衝突判定
次は衝突判定の実装です。キャラクターと敵が衝突したら戦闘にしたいので衝突判定が必要です。
いろんな方法がありますが、座標で判定するのが基本的です。
⑥戦闘
次は戦闘の実装です。どんな戦闘ロジックにするかは自分で決める必要がありますが、衝突判定時にコールされる関数を作成します。
この関数内で戦闘画面を表示する処理を書きます。また戦闘ロジックに必要な関数も定義して戦闘中に呼び出します。
関数の呼び方などは、実装するロジックによって異なってきます。
⑦セーブとロード
ここら辺からは自分の好きな順番で実装していっていいと思いますが、僕の開発の進め方で説明します。
次に実装するのはセーブとロード機能です。
セーブ機能がつくとこの後の開発でのテストがしやすいのでいつもこの段階で実装しています。
ただ、あまりに早すぎる段階で実装しない方がいいです。例えば主人公だけ実装した段階でセーブ機能を作ると、そのセーブ機能には主人公の情報しか保持できていません。
敵が増えたりすると敵の情報も保持する必要があり、その度にセーブ機能を書き換える必要があります。
それが面倒なのであまりに早い段階での実装はお勧めしません。
本題ですが、セーブ機能はセーブしたい情報を保存します。当たり前のことを言ってます。
基本的にはデータベースに保存して、ロードの時に読み出すというのが流れです。
ただプログラムを始めたばっかりで、まずは何かを作りたい!という段階の方はJSONファイルにセーブ情報を保持するのが簡単なのでお勧めです。
もちろんセキュリティの観点からJSONファイルにセーブデータを保持する設計のゲームを公開するのはやめた方がいいですが。
自分で遊ぶ分には全く問題ないのでまずはJSONで保持するのがお勧めです。
セーブ時には保持したい変数の値、例えばプレイヤーの位置、プレイヤーのHPなどを保存しておきます。
ロード時にはこのデータを読み込んで、プログラム中で変数の値をこのデータに書き換えます。
これでセーブ時の状態からゲームをプレイできるようになります。
⑧別マップの追加
やはり別マップに移動できた方がゲームとしては楽しいので、作ります。
別マップは簡単で、マップの配列をもう一つ用意してマップを切り替える時に参照する配列を変更するだけです。
マップの切り替えのトリガーは好きに設定指定ですが、例の一つとしてマップ上に階段を配置しておいて、そこにいくと別のマップに切り替わるなどがあります。
ここからは自由!
この先は自分が実装したいものを自由に入れていきます!ゲーム開発で一番楽しいのは自分の好きなようにゲームを作れることです。
普段ゲームで遊んでいて、ここにこういう機能があったらいいのになって思う機能を実装しちゃえばいいんです。
もちろん自分のpやりたいことを全部実装するにはそれなりの技術が必要です。
でもそれがプログラミング勉強のモチベーションになります。
ぜひ自分なりのゲームを作って見てください!
コメント