0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Pyxel】スマホ向け縦型ミニゲーム作ってみた

Posted at

はじめに

こんにちは。@tdtigerです。
この記事は、はじめてのアドベントカレンダー Advent Calendar 2025のシリーズ6、2日目の記事です。

今回は、Python用レトロゲームエンジンであるPyxelを使ってスマホ向けのミニゲーム"Takigyo Sim"を作ってみたので、それについての記事を書いてみることにしました。

※Pyxelについて

Pyxelはすでに述べたようにPython向けのレトロゲームエンジンであり、北尾 崇さんによって開発されたものです。
こちらの詳細については、北尾さん本人が解説記事を執筆されていますので、興味が湧いたという方はご一読してみてはいかがでしょうか。

完成品

IMG_2565.jpg
プレイはこちらから
(タイトルには「スマホ向け」と書いていますが、PCでも遊べます。)

遊び方

画面上部から降ってくる丸太に当たらないように修行僧を動かしながら、煩悩(金、愛)をタップして砕き、徳(スコア)を積んでいきます。
画面右側にあるゲージが満タンになっている時に上スワイプすると、修行僧が少しの間だけ無敵になります。
ただし、煩悩をタップできずに画面外へ流れていってしまうと、ゲージが減ってしまいます。

ちなみに友人からプレイした感想が送られてきたのですが、「丸太の落下速度が早すぎ」とのことだったので調整しました。テストプレイ感謝。

技術スタック

  • 言語: Python
  • ライブラリ: Pyxel
  • デプロイ: GitHub Pages

実装ポイント

スマホ操作への最適化

最初はタップした位置に修行僧が移動するようにしていましたが、これだと

  • 修行僧がワープしてしまう
  • 指で隠れてしまう

という問題があったため、タップ開始地点から指を動かした分だけ移動するというロジックに変更しました。

    #左クリックされた時、あるいは画面がタップされた時の処理
    elif pyxel.btn(pyxel.MOUSE_BUTTON_LEFT):
        #タップ位置の移動距離から、修行僧の位置を更新
        delta_x = pyxel.mouse_x - self.last_mouse_x
        self.player_x += delta_x
        self.player_x = max(0, min(self.player_x, SCREEN_WIDTH - PLAYER_W))

        delta_y = pyxel.mouse_y - self.last_mouse_y
        if delta_y < -10 and self.spirit >= self.max_spirit:
            self.vanish_timer = 120
            self.spirit = 0

        #最終タップ位置を更新
        self.last_mouse_x = pyxel.mouse_x
        self.last_mouse_y = pyxel.mouse_y

煩悩タップの処理から分岐しているためelifから始まってしまっていますが、その直下の部分が修行僧の移動処理で、その下のブロックが無敵化の処理です。

これにより、画面のどこをタップしても自然な移動ができるようになりました。

イラスト、効果音

今回使用したPyxelの特徴の一つとして、プログラム内で使用するイラストや効果音を作成できるエディタが同梱されていることが挙げられます。このゲーム内の修行僧や丸太のイラスト、BGM、効果音などは全てそのエディタを使用して自作しました。
といっても、特別素養がある訳ではないので簡単なものですが。

editor.png

丸太、もはやカルパスじゃないか。

Xへの投稿機能(仮)

スコア自慢をするために、ゲームオーバー画面にはXへの投稿ボタンをつけてみました。
webbrowserモジュールを使って、openメソッドでXへのリンクを開いています。
投稿文には日本語が含まれているため、エンコードにはurllib.parseモジュールを使いました。

    text = f"滝行シミュレータで徳を積みました!\nスコア:{self.score}\nレベル:{self.level + 1}"
    encoded_text = urllib.parse.quote(text)
    hashtags = "Takigyosim,Pyxel"
    url = "https://tdtiger.github.io/Takigyo/app/takigyo.html"
    share_url = f"https://twitter.com/intent/tweet?text={encoded_text}&hashtags={hashtags}&url={url}"

    webbrowser.open(share_url)

IMG_2566.jpg

おわりに

結構サクッと遊べるゲームを作れたのではないかと思います。
しかもPyxelには作ったPythonプログラムをアプリ化したりWebブラウザで動くようにhtml化したりする機能までついており、共有まで簡単にできるのが素晴らしいなと思いました。

pyxel package . main.py
pyxel app2html takigyo.pyxapp

たったこれだけでOK。

 
今後も暇な時にアップデートしていきたいなと思っています。
もし興味が湧いたという方は、遊んでくれると嬉しいです。
プレイはこちらから(再掲)

ここまで読んでくださりありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?