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

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

Pyxel

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

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

本記事では、そのサンプルについて解説しています。

今回は、9個目のサンプルについて解説します。
今回がラストのサンプル解説記事になります。

スポンサーリンク

09_shooter.pyはどんなサンプル?

09_shooter.pyは縦スクロールのシューティングゲームです。

キーボードの矢印キーで戦闘機を操作し、スペースキーでタコみたいなエイリアンを攻撃するゲームになります。

エイリアンを倒すごとにスコアが加算されていき、エイリアンにぶつかるまで倒し続けるというルールです。

bgmはありませんが、ビームの発射音がビームがエイリアンにヒットした時の効果音はあります。

スポンサーリンク

09_shooter.pyのソースコード解説

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

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

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

09_shooter.pyの構成

09_shooter.pyは下記6つのクラスから構成されています。

  • Background
  • Player
  • Bullet
  • Enemy
  • Blast
  • App

また外部関数として、下記の3つが定義されています。

  • update_list
  • draw_list
  • cleanup_list

では、順番に解説していきます。

Backgroundクラス

宇宙空間を移動しているように見せるために、上から下へ動く星のクラスです。

処理は星をランダムで発生させた後、位置情報の更新を行い、描画するという簡単な処理になります。

星の遠近感を出すために、星ごとに速度もランダムに設定しています。

生成された星はリストで管理して、制御しています。

Playerクラス

自機となる戦闘機のクラスです。

updateメソッドでは、キーボードの押したキーによって戦闘機が移動したり、ビームを発射したりするための処理を行い、drawメソッドで描画しています。

Bulletクラス

戦闘機から打ち出されるビームのクラスです。

updateメソッドで位置情報の更新、ビームの消失処理などを行い、drawメソッドで描画する形になります。

Enemyクラス

タコのような敵キャラのクラスです。

updateメソッドでは、まっすぐでなくクネクネしながら下に向かってくるような処理をして、drawメソッドで描画する形になります。

Blastクラス

ビームで敵キャラを倒したとき、あるいは敵キャラにぶつかった時の爆発のクラスになります。

爆発みたいに見せるために、中心から外側にむかって広がる処理がされています。

Appクラス

ゲーム本体のクラスです。

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

自機や敵キャラのグラフィックは、pyxel.image(0).set()の部分で設定されています。
pyxel.image(0).set(0,0,[])が自機で、pyxel.image(0).set(8,0,[])が敵キャラになります。

またビーム発射の効果音や爆発の効果音は、pyxel.sound(0).set()で設定されています。

updateメソッド

画面がタイトル画面、ゲームプレイ画面、ゲームオーバー画面の3種類を切り替えられるようになっています。
このupdateメソッドでは、self.sceneの値によって条件判定を行い、処理の詳細は各画面のメソッドに実装されています。

update_title_sceneメソッド

タイトル画面のメソッドです。
キーボードのエンターキーを押すと、ゲームプレイ画面に遷移するようになっています。

update_play_sceneメソッド

ゲームプレイの処理です。

敵キャラの生成や、敵キャラとビームの当たり判定、敵キャラと自機の当たり判定をしています。

update_gameover_sceneメソッド

ゲームオーバー時の処理です。

drawメソッド

updateメソッドと同じように画面ごとに処理が実行されるように条件判定があります。

draw_title_scene

タイトル画面の描画です。

draw_play_scene

ゲームプレイ画面の描画です。

draw_gameover_scene

ゲームオーバー画面の描画です。

スポンサーリンク

まとめ

ひとつひとつのクラス、メソッドの処理として、そんなに大きい規模のものはないので、わかりやすいと思います。

今回のサンプルは、画面構成がタイトル画面、ゲームプレイ画面、ゲームオーバー画面に分かれていて、それぞれにメソッドが定義されている形になります。

updateの方とdrawの方でちゃんと結びつくように把握しておくことが大切です。

ある程度細かく区切って処理を定義した方がメンテナンスがしやすいので、このサンプルを参考にしてみてはいかがでしょうか。

本格的なシューティングゲームなので、これを改良していくことでオリジナルシューティングゲームも簡単に作れると思うので、ぜひチャレンジしてみてください。

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

コメント