![見出し画像](https://assets.st-note.com/production/uploads/images/86920461/rectangle_large_type_2_ecfbd61c25d37c03a52aa8911cc4c26f.png?width=1200)
【pyxel 1.5】pyxelで2Dアクションを作ってみる(4)
前回に引き続き、タイトル画面を作成します。今回も作業量としては少なめですがお付き合いください。
前回までの進行具合は以下のnoteをご参照ください。
![](https://assets.st-note.com/img/1663205366151-r7nBZukijE.png?width=1200)
さて、前回は上のようなタイトル画面を作り、プレイするマップを選択できるようにしました。しかしこれではあまりに味気ないし、マップ選択も数字が変わるだけで何が何やらといった感じです。
そこで今回はマップ選択時に全体像をみせ、これから遊ぶステージが分かるようにしてみます。
それではとりあえず完成形を。
![](https://assets.st-note.com/img/1663205539190-8Vn8xpxt2d.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/86909921/picture_pc_e88fbc6ca681d1da3f4f0b3d5323b664.gif)
コードとしてはタイルマップを検査するモジュール「mapScan」を新規作成し、描画用の配列を作成しています。
# -*- coding: utf-8 -*-
import pyxel
def map_scan(tile):
map_data = []
data_raw = []
x = 30
y = 30
for y1 in range(y):
for x1 in range(x):
data = pyxel.tilemap(tile).pget(x1, y1)
if data == (0, 6):
d = 0
elif data == (0, 0) or data == (1, 0):
d = 1
else:
d = 2
data_raw.append(d)
map_data.append(data_raw)
data_raw = []
return map_data
▲mapScanモジュールです。map_scan関数が定義されています。そしてこの関数は0~7のどのタイルマップを使うかという情報を引数tileとして受け取ります。
その後は引数で選択されたタイルマップを2重ループで検査していき、タイルの種類を判定します。通路だったら0、壁は1、敵は2といった形で置き換えて最終的に新たな配列map_dataにしています。これを関数の戻り値として設定。
これで関数map_scanを呼び出すと指定したタイルマップのデータを通路・壁・敵の3種類に区分した分かりやすい形で返してくれます。
実際に本体側で呼び出す際はこんな感じになります。
if pyxel.btnp(pyxel.KEY_RIGHT):
if self.tile < 2:
self.tile += 1
self.map_data = []
self.map_data = mS.map_scan(self.tile)
▲これはタイトル画面で右キーを押した際の動きですがself.tileの値を操作し、map_scan関数に渡しています。その戻り値を新たにself.map_dataに格納しています。
これで編集されたマップ配列のself.map_dataができました。これをもとに描画を行えばOKです。マップの配列をfor文でループさせながら壁は青の四角、敵は赤の四角…というように処理していきます。
![](https://assets.st-note.com/img/1663217193267-14PumipbDF.png)
今回はここまでとします。
タイトル画面の作成ばかりしていてゲーム本体の方があまり進んでいないので、次回はそちらに手を入れようと思います。
読んでいただきありがとうございました。
この記事が参加している募集
ここまで読んでいただきありがとうございます!