【Python】波動を撃つ空手家【Pyxel】
レトロゲームエンジンPyxelで作ってみた波動を撃つ空手家です。
ムエタイの帝王とかを敵として出したかったんですが、そこまで作る気力はありませんでした…。
#波動を放つ空手家
import pyxel
class App:
def __init__(self):
self.move_r = 0 #右移動フラグ
self.move_l = 0 #左移動フラグ
self.atk_flug = 0 #攻撃フラグ
self.atk_count = 0 #攻撃硬直時間
self.Player = Player(15, 19) #空手家初期位置
self.Hadou = []
pyxel.init(70,35)
#ドット絵を読み込む
pyxel.load('C:/pyxel/image/sf.pyxel')
pyxel.run(self.update, self.draw)
pyxelをインポートして初期設定をします。各動作にフラグを持たせて、空手家のオブジェクトを作成。波動はリストとして、空で作っておきます。
ドット絵を読み込んで、runで起動します。
def update(self):
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
if self.atk_flug == 0: #攻撃硬直でない場合動作可能
if pyxel.btnp(pyxel.KEY_SPACE): #スペースで攻撃
if (self.move_r == 0 )and(self.move_l == 0):
if len(self.Hadou) < 1: #画面に表示できる波動は1個まで
#攻撃フラグとカウントを立て、Hadouのオブジェクトを作成する
self.atk_flug = 1
self.atk_count = 1
new_Hadou = Hadou(self.Player.player_x + 8,
self.Player.player_y + 3)
self.Hadou.append(new_Hadou)
if pyxel.btn(pyxel.KEY_RIGHT): #右移動
if self.Player.player_x < 58:
self.move_r = 1
self.Player.update(self.Player.player_x + 0.5,
self.Player.player_y)
else:
self.move_r = 0
if pyxel.btn(pyxel.KEY_LEFT): #左移動
if self.Player.player_x > 0:
self.move_l = 1
self.Player.update(self.Player.player_x - 0.5,
self.Player.player_y)
else:
self.move_l = 0
else: #攻撃硬直中の場合
self.atk_count = self.atk_count + 1 #硬直フレーム数をカウントアップ
if self.atk_count > 18: #18フレで解除
self.atk_flug = 0
self.atk_count = 0
if len(self.Hadou) >= 1: #波動を進める処理
if self.Hadou[0].hadou_x < 70:
x = self.Hadou[0].hadou_x + 1.5
y = self.Hadou[0].hadou_y
self.Hadou[0].update(x, y)
else:
del self.Hadou[0]
atk_flugで攻撃の硬直を実装しています。硬直中でない場合は左右移動と攻撃ができます。
波動が存在している場合は画面端まで進めていきます。同時に1つしか存在できないようにしています。
def draw(self):
pyxel.cls(6)
#空手家の描画
if self.move_r == 1:
pyxel.blt(self.Player.player_x,self.Player.player_y,0,0,16,16,16,3)
elif self.move_l == 1:
pyxel.blt(self.Player.player_x,self.Player.player_y,0,16,16,16,16,3)
elif self.atk_flug == 1:
pyxel.blt(self.Player.player_x,self.Player.player_y,0,16,0,16,16,3)
else:
pyxel.blt(self.Player.player_x,self.Player.player_y,0,0,0,16,16,3)
#波動の描画
if len(self.Hadou) >= 1:
pyxel.blt(self.Hadou[0].hadou_x,self.Hadou[0].hadou_y,0,32,0,8,8,3)
class Player:
def __init__(self, x, y):
self.player_x = x
self.player_y = y
def update(self, x, y):
self.player_x = x
self.player_y = y
class Hadou:
def __init__(self, x, y):
self.hadou_x = x
self.hadou_y = y
def update(self, x, y):
self.hadou_x = x
self.hadou_y = y
App()
update()で計算した座標やフラグをもとに描画をしていきます。
空手家と波動のクラスを書いて、APP()で起動させます。
もう少し何とかなりそうですが、今回はここまで。対空攻撃が欲しいところです。
ここまで読んでいただきありがとうございます!