pyxelでRPGを作ってみよう! 第4章 画面の表示とついでに遷移も

皆さんこんにちは、cacaponです。

一週間開いてしまいましたが、
いよいよプログラミング部分に手を入れていきたいと思います。

本日作るのは、ずばり画面遷移です。

画面遷移って?

ゲームについての考え方の一つだと思いますが、
ゲームは複数の場面(シーンといったりゲームレベルといったり)に分かれています。
それぞれの場面ごとに作ることで、そのシーンに集中できたり、
他のシーンに悪影響を与えにくくなるので、
分けて作ると後でメンテナンスしやすかったりと色々とメリットがあります。

詳しくは過去に記事をまとめたことがあるので、参考にいただければと思います。
cacapon.hatenablog.com

今回の記事ではとりあえずコードをコピーして、
各項目をどのように作っていくか説明していきたいと思います。

今回はどんな画面がいる?

今まで考えた内容から、下記の画面が必要かとピックアップしました。

  • タイトル画面
  • 謁見の間画面
  • 洞窟の探索画面

この三つを作っていくことになりますが、
まずは簡単なサンプルを見ていくことにしましょう。

では、画面を表示する部分を作りたいと思います。
過去記事に書いた画面遷移用のやつをそのままコピーします

過去記事の画面遷移用のサンプル

プログラムに触れる方は何が何だか…という可能性がありますので、
各項目を説明していきます…分かりにくかったらスミマセン

GAMESCENEクラス

ここでは、画面遷移で扱う名前を定義します。
この時はスタート画面、メインのゲーム画面、ゲームオーバーの画面
この三つを想定して作ったので、三つの名前が定義されています。

Enumというのは、私の解釈だと名前の一覧に数字を割り当てていくイメージです。
コンピュータは数字の方が扱いが得意ですが、人にとっては名前の方が分かりやすい…
このジレンマを解決するためにできたようなもの…だと思っています。
今回のように、たくさんの要素から何かを選ぶという時に結構便利なのでcacaponは良く使います。

後で、戦闘シーンとか追加する時も、Buttleみたいなものをここで定義すればOKです。

Appクラス

ゲームのメインの処理が書かれています。 大きく分けて、初期化処理の __init__、更新処理のupdate, 描画処理のdraw に分かれています。

__init__

これはpythonのクラスを生成したときに呼ばれる特殊な関数になります。
前準備がしたいときにここに書いていきます。

オブジェクト指向を勉強されている方は
コンストラクタと理解頂ければ分かりやすいかと思います。

今回のゲームでは、pyxel自体の初期化処理のためにpyxel.init()を呼び出し、
最初のシーンを設定したいので、変数を定義。
そして、ゲームを実行するpyxel.run()でゲームを実行しています。

pyxel.init(200,200)は画面の大きさを指定しています。
画面が大きすぎたり、小さすぎたりしたら、数字を変えてみてください。

pyxel.run()は、中に定義した関数を永遠にひたすら呼び出すといった感じだと、
cacaponは理解しています。
因みにこの構造はどのゲームでもほとんど同じらしいので、覚えておくといいかもです。

update

ここでは、内部的に処理を行う内容を記述していきます。
ここで行っているのは、スペースキーが押されたら次の画面に遷移する
という単純なものです。

今回のゲームでは、キー入力を受け付けや、
キーを受け付けた後の主人公の位置などを管理する予定ですので、
そう言った裏方でやっている処理をこちらに記述していくことになるでしょう。

draw

ここでは、画面に表示する部分を書いていきます。
サンプルでは、単純な文字しか表示しておりませんが、
前回作った謁見の間や、洞窟、動く主人公などはここで呼び出す処理を書いていくことになります。

因みに、このサンプルを動かすとこんな形で動きます。
コードをコピーしましたら python <自分でつけたファイル名>.py で試しに動かしてみましょう。

f:id:cacapon:20191017002239g:plain


今回は、画面の表示の部分を作りました。
一応各項目について出来る限り分かりやすく説明したつもりですが、
分かりにくかったらゴメンナサイ、コメントでご指摘いただけると嬉しいです。

今回は、実質コピペでお終いだったので、
次回はこれを元にちょっと弄ってRPG用にカスタマイズしていく予定です。

それではまたお会いしましょう!