※当サイトのリンクには広告が含まれています。

【Pyxelでゲーム開発】サンプルのソースコードからPyxelを知る2(02_jump_game.pyの解説)

Pyxel

Pyxelは9個のサンプルが用意されています。

これらのサンプルのソースコードを見ることで、Pyxelでのゲーム開発をどのようにすれば良いのかを解説していきます。

※サンプルは2021年2月6日時点のものを使っています。
 サンプルの内容は今後変更になるかもしれません。

前回は、1つ目のサンプル(01_hello_pyxel.py)について解説しました。
今回は、2つ目のサンプルについて解説します。

スポンサーリンク

02_jump_game.pyはどんなサンプル?

前回のサンプルは文字とロゴが表示されるサンプルだったので、ゲームっぽくはありませんでしたが、今回のサンプルはアクションゲームになっています。

02_jump_game.pyを実行すると下のサンプルが起動します。

キャラクターを左右のキーで操作して、下に落ちないようにフルーツを取って、得点を稼ぐゲームになっています。

bgmや効果音もあるので、『ゲーム』って感じがしますよね。

スポンサーリンク

02_jump_game.pyのソースコード解説

では、ソースコードの解説をしていきます。

ソースコード全部はここに載せないので、各自エディタなどで確認してください。

またこれまでに解説した内容については割愛することもあります。

02_jump_game.pyの構成について

公式サイトの推奨通り、AppクラスでPyxelの処理をラップする形になっています。

今回のサンプルは、前回の01_hello_pyxel.pyでは、Appクラス内のメソッドはコンストラクタである__init__とupdateとdrawの基本的な3つでしたが、今回の02_jump_game.pyでは、さらにプレイヤーと床とフルーツに関するメソッドが追加された形になっています。

1つずつのメソッドの処理は大きくないので、プログラミングが苦手な方でもわかりやすいと思います。

import

1行目

from random import randint

ランダムでフルーツや床を発生させる必要があるので、ランダムを使用するためのモジュールをインポートしています。

__init__メソッド(コンストラクタ)

9行目

pyxel.load("assets/jump_game.pyxres")

今回のサンプルでは、プレイヤー、フルーツなどの画像とbgmが使われています。
Pyxelの大きな特徴として、画像や音楽をPyxeleditorというツールを使用して作成することができます。
作成した画像や音楽はpyxresファイルにまとめられています。
この9行目のコードは、その作成したpyxresファイルをロードする処理になります。
引数にpyxresファイルが置いている場所のパスを指定します。

12行目~21行目

ここでは変数の初期化をしています。
各変数の説明を簡単にしておきます。

変数説明
score得点
プレイヤーが下に落ちると0に戻る
player_xプレイヤーのx座標(横位置)
player_yプレイヤーのy座標(縦位置)
player_vyプレイヤーの縦方向の速度
player_is_aliveプレイヤーの生存フラグ
生きている間はTrue
far_cloud遠くに見える雲
near_cloud近くに見える雲
floor
fruitフルーツ
プレイヤーが取ると得点アップ

23行目

pyxel.playm(0, loop=True)

10行目でロードしたpyxresファイルからbgm再生する処理です。

第1引数の0は0番の音楽を再生するという設定です。
第2引数は音楽のループ再生設定になります。
Trueに設定することで、ループ再生します。

updateメソッド

updateメソッドにプレイヤー、床、フルーツの処理をすべて書かず、それぞれさらに関数化しています。

update_playerメソッド

プレイヤー情報を更新するメソッドになります。

40行目~41行目

if pyxel.btn(pyxel.KEY_LEFT) or pyxel.btn(pyxel.GAMEPAD_1_LEFT):
            self.player_x = max(self.player_x - 2, 0)

キーボードの左キー、またはゲームパッドの左ボタンを押した時のプレイヤーの移動処理です。
Pyxelはキーボード操作だけでなく、ゲームパッドにも対応しているのは便利ですね。

x座標について簡単に説明します。
左端を0とし、右にいくにつれて大きくなっていきます。

41行目では、プレイヤーが画面の左端からさらに左にいって見えなくならないように、最小で0で止まる処理をしています。

46行目

self.player_y += self.player_vy

プレイヤーの縦方向の位置の処理です。
縦方向の速度を足し合わせることで、縦方向の位置を更新しています。

y座標についても簡単に説明します。
上端を0とし、下にいくにつれて大きくなっていきます。

47行目

self.player_vy = min(self.player_vy + 1, 8)

プレイヤーの縦方向の速度の更新処理です。
下に落ちる方向速度が8よりも大きくならない処理が入っています。

49行目~59行目

プレイヤーが下に落ちてしまった時の処理になります。

52行目の

pyxel.play(3, 5)

では、落ちた時の効果音を出しています。

55行目~59行目のスコアなどの初期化は、プレイヤーが落ちた後少し時間をあけて復活する時間をつくるために54行目のように条件判定をつけています。

update_floorメソッド

is_activeという変数が出てきます。
床はプレイヤーに踏まれると下に落ちて行くようになっているのですが、プレイヤーに踏まれていない床はTrueになっています。
プレイヤーが床を踏むと、プレイヤーがジャンプするように上方向に速度を設定し、is_activeをFalseして床が落ちるように処理しています。
さらにスコアが10プラスされて、効果音が鳴るようになっています。

またxとyという変数も出てきますが、これは床のx座標、y座標になります。

update_fruitメソッド

フルーツは床と処理の内容は似ています。
フルーツは床と違って数種類あるので、kindという変数が使われています。

drawメソッド

updateで更新した内容を基に、描画する処理になります。

前回の01_hello_pyxel.pyと同様に画像データはblt関数を使って呼び出しています。

スポンサーリンク

まとめ

今回は、アクションゲームである02_jump_game.pyについて解説しました。

ここに書かれているソースコードが理解できれば、これに似たアクションゲームは自作できるようになるでしょう。

まずは、ソースコードを理解し、そのソースコードをいろいろと変更してみて自分なりのゲームを作っていくのがおススメです。

※サンプル3つ目の解説記事も作りました。

Pyxel
スポンサーリンク
toniemonをフォローする

コメント