Pyxelに入門したので、オリジナルゲームをGitHubに公開した。
前回から少し間が空きましたが、Pyxelは触り続けていました。
uuc1h.hatenablog.jp
具体的には、サンプルである「02_jump_game.py」のソースコードを解読していました。
github.com
私はPythonをあまり触ったことがないので、学ぶことが非常に多かったです。
自分用メモとして、学んだことをいくつか挙げていきます。
タプルのリスト作成
サンプルに以下コードがありました。
self.floor = [(i * 60, pyxel.rndi(8, 104), True) for i in range(4)]
初見時は何をやっているのか理解できませんでしたが、Chat GPTに教えてもらうとリストにタプル要素を格納しているとのことでした。
タプルとは、複数の要素が決まった順番にならんだ値を指します。
私は、配列の一種とイメージしています。ただ、値としては違う型同士を集めている際にタプルを使うようです。
サンプルコードに戻りますが、(i * 60, pyxel.rndi(8, 104), True)のタプルを、for i in range(4)で4つ生成しリストに格納しています。
よってself.floorには、次のようなリストが格納されています。
(0, 8~104までのランダム値, True), (60, 8~104までのランダム値, True), (120, 8~104までのランダム値, True), (180, 8~104までのランダム値, True),
self.floorとは足場オブジェクトで、1つ目の要素は足場のX値、2つ目の要素は足場のY値、3つ目の要素は表示可能状態を表しています。
enumerate()関数
次はこのコードです。
for i, v in enumerate(self.floor): self.floor[i] = self.update_floor(*v)
enumerate関数で、i:インデックス番号、v:self.floorの要素を取得しfor文で回しています。
self.floorとはタプルのリスト作成時に、(i * 60, pyxel.rndi(8, 104), True)のタプルを、for i in range(4)で4つ生成しリストに格納しています。
よって、i:インデックス番号は0~3、要素は(i * 60, pyxel.rndi(8, 104), True)のタプルを取得できます。
取得した要素はself.update_floo(*v)関数に渡しています。
update_floor関数の引数はupdate_floor(self, x, y, is_alive)となっているので、*vとすることでタプルを展開して渡しています。
update_floor関数では足場の位置を更新するので、更新した足場をself.floor[i]に戻します。
作ったゲーム

この2点が分かれば、全体のコードが読み解けました。
コードはただ読んだだけでは身につかないので、このコードをもとにして自分なりにアレンジしたゲームを作ってみました。
それがこちらです。
https://hirokiueda.github.io/jump_game/pyxel.html
いきなりゲームが始まりますが、スペースキーでプレイヤーをジャンプさせます。←→でも動かせます。
とこんな感じで、Pyxelの勉強を進めています。
ゲームの公開方法にかなり躓いたので、今度はその方法をブログにまとめます。