見出し画像

【pyxel 1.5】pyxelで2Dアクションを作ってみる(4)

前回に引き続き、タイトル画面を作成します。今回も作業量としては少なめですがお付き合いください。

前回までの進行具合は以下のnoteをご参照ください。

さて、前回は上のようなタイトル画面を作り、プレイするマップを選択できるようにしました。しかしこれではあまりに味気ないし、マップ選択も数字が変わるだけで何が何やらといった感じです。
そこで今回はマップ選択時に全体像をみせ、これから遊ぶステージが分かるようにしてみます。
それではとりあえず完成形を。

▲選択したマップの全体像が見えます。
▲動かすとこんな感じ。きちんとマップ内容が変わっています。

コードとしてはタイルマップを検査するモジュール「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文でループさせながら壁は青の四角敵は赤の四角…というように処理していきます。

▲マップの全体像が表示されました。

今回はここまでとします。
タイトル画面の作成ばかりしていてゲーム本体の方があまり進んでいないので、次回はそちらに手を入れようと思います。

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

この記事が参加している募集

つくってみた

ここまで読んでいただきありがとうございます!