【pyxel 1.5】pyxelで3D迷路を作ってみる(5)
今回は短めですが、敵のグラフィックを試作してみた話になります。
前回までの進行具合は以下のnoteをご参照ください。
さて、前回までで迷路としての体裁はある程度できたので、要素を追加してゲームらしくしていきます。具体的には「敵から逃げながら」「何かを成し遂げて」「ゴールに到着」という形を想定しています。
敵の見た目ですが、前回泡のグラフィックを作ったので「海っぽいもの」。画面は基本黒だから「深海」。という感じで作ってみました。
それではコードに移っていきます。
#Draw enemy-------------------------------------------------------------
if pyxel.btn(pyxel.KEY_1):
#Pos 1------------------------------------------------------------------
ex = 117
ey = 75
pyxel.circ(ex, ey, 1, 9)
pyxel.circ(ex - 1, ey + 1, 1, 9)
pyxel.circ(ex + 16, ey, 1, 9)
pyxel.circ(ex + 16 + 1, ey + 1, 1, 9)
elif pyxel.btn(pyxel.KEY_2):
#Pos 2------------------------------------------------------------------
ex = 114
ey = 70
pyxel.circ(ex, ey, 2, 9)
pyxel.circ(ex - 1, ey + 1, 2, 9)
pyxel.circ(ex + 26, ey, 2, 9)
pyxel.circ(ex + 26 + 1, ey + 1, 2, 9)
elif pyxel.btn(pyxel.KEY_3):
#Pos 3-------------------------------------------------------------------
ex = 109
ey = 65
pyxel.circ(ex, ey, 3, 9)
pyxel.circ(ex - 1, ey + 1, 3, 9)
pyxel.circ(ex + 36, ey, 3, 9)
pyxel.circ(ex + 36 + 1, ey + 1, 3, 9)
pyxel.circ(ex - 1, ey + 1, 2, 10)
pyxel.circ(ex + 36 + 1, ey + 1, 2, 10)
#teeth 1----------------------------------------------------------------
x = 105
x2 = 110
y = 100
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 4.3
vy = i * 5
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
#teeth 2-----------------------------------------------------------------
x = 145
x2 = 150
y = 100
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 4.3
vy = i * 5
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
#teeth 3----------------------------------------------------------------
x = 105
x2 = 110
y = 87
x3 = x + ((x2 - x) / 2)
y3 = 97
for i in range(5):
vx = i * 4.3
vy = i * -5
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
#teeth 4----------------------------------------------------------------
x = 145
x2 = 150
y = 87
x3 = x + ((x2 - x) / 2)
y3 = 97
for i in range(5):
vx = i * 4.3
vy = i * -5
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
#------------------------------------------------------------------------
elif pyxel.btn(pyxel.KEY_4):
#Pos 4-------------------------------------------------------------------
ex = 85
ey = 40
pyxel.circ(ex, ey, 4, 9)
pyxel.circ(ex - 1, ey + 1, 4, 9)
pyxel.circ(ex + 80, ey, 4, 9)
pyxel.circ(ex + 80 + 1, ey + 1, 4, 9)
pyxel.circ(ex + 80 + 1, ey + 1, 3, 10)
pyxel.circ(ex - 1, ey + 1, 3, 10)
#teeth 1----------------------------------------------------------------
x = 75
x2 = 85
y = 110
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * 8
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
#teeth 2-----------------------------------------------------------------
x = 165
x2 = 175
y = 110
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * 8
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
#teeth 3----------------------------------------------------------------
x = 75
x2 = 85
y = 64
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * - 8
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
#teeth 4----------------------------------------------------------------
x = 165
x2 = 175
y = 64
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * - 8
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
#------------------------------------------------------------------------
▲描画のコード部分。今回はテスト用に1・2・3・4のキーを押すと各距離でのイメージが表示されます。
if pyxel.btn(pyxel.KEY_1):
#Pos 1------------------------------------------------------------------
ex = 117
ey = 75
pyxel.circ(ex, ey, 1, 9)
pyxel.circ(ex - 1, ey + 1, 1, 9)
pyxel.circ(ex + 16, ey, 1, 9)
pyxel.circ(ex + 16 + 1, ey + 1, 1, 9)
▲一番遠い距離の場合。pyxel.circで丸を描いて、2つずらしてつなげることで楕円っぽくします。
elif pyxel.btn(pyxel.KEY_2):
#Pos 2------------------------------------------------------------------
ex = 114
ey = 70
pyxel.circ(ex, ey, 2, 9)
pyxel.circ(ex - 1, ey + 1, 2, 9)
pyxel.circ(ex + 26, ey, 2, 9)
pyxel.circ(ex + 26 + 1, ey + 1, 2, 9)
▲1段階近づいた状態。先ほどとほぼ同じです。
elif pyxel.btn(pyxel.KEY_3):
#Pos 3-------------------------------------------------------------------
ex = 109
ey = 65
pyxel.circ(ex, ey, 3, 9)
pyxel.circ(ex - 1, ey + 1, 3, 9)
pyxel.circ(ex + 36, ey, 3, 9)
pyxel.circ(ex + 36 + 1, ey + 1, 3, 9)
pyxel.circ(ex - 1, ey + 1, 2, 10)
pyxel.circ(ex + 36 + 1, ey + 1, 2, 10)
#teeth 1----------------------------------------------------------------
x = 105
x2 = 110
y = 100
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 4.3
vy = i * 5
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
#teeth 2-----------------------------------------------------------------
x = 145
x2 = 150
y = 100
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 4.3
vy = i * 5
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
#teeth 3----------------------------------------------------------------
x = 105
x2 = 110
y = 87
x3 = x + ((x2 - x) / 2)
y3 = 97
for i in range(5):
vx = i * 4.3
vy = i * -5
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
#teeth 4----------------------------------------------------------------
x = 145
x2 = 150
y = 87
x3 = x + ((x2 - x) / 2)
y3 = 97
for i in range(5):
vx = i * 4.3
vy = i * -5
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
#------------------------------------------------------------------------
▲さらに近づいた段階。目のほかに牙の描画も増えて一気にごちゃつきます。牙はfor文で繰り返しつつ、座標を移動して表示しています。
elif pyxel.btn(pyxel.KEY_4):
#Pos 4-------------------------------------------------------------------
ex = 85
ey = 40
pyxel.circ(ex, ey, 4, 9)
pyxel.circ(ex - 1, ey + 1, 4, 9)
pyxel.circ(ex + 80, ey, 4, 9)
pyxel.circ(ex + 80 + 1, ey + 1, 4, 9)
pyxel.circ(ex + 80 + 1, ey + 1, 3, 10)
pyxel.circ(ex - 1, ey + 1, 3, 10)
#teeth 1----------------------------------------------------------------
x = 75
x2 = 85
y = 110
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * 8
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
#teeth 2-----------------------------------------------------------------
x = 165
x2 = 175
y = 110
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * 8
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
#teeth 3----------------------------------------------------------------
x = 75
x2 = 85
y = 64
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * - 8
pyxel.tri(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 7)
pyxel.trib(x+vx, y+vy, x2+vx, y+vy, x3+vx, y3+vy, 1)
#teeth 4----------------------------------------------------------------
x = 165
x2 = 175
y = 64
x3 = x + ((x2 - x) / 2)
y3 = 90
for i in range(5):
vx = i * 10
vy = i * - 8
pyxel.tri(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 7)
pyxel.trib(x-vx, y+vy, x2-vx, y+vy, x3-vx, y3+vy, 1)
#------------------------------------------------------------------------
▲最も接近した状態。コードは先ほどとほぼ同じ。
とりあえず目と口を作ってみました。実は体もちょっと手を付けたのですが、ない方が見た目に統一感があるのでこれで行こうと思います。ほら、深海って真っ暗だから目とかしか見えないってことで。
コードやpyxresファイル、モジュールファイルはGitHubの方に置いてあります。
▲リポジトリがごちゃごちゃしてきたので、各ゲームごとに切り分けました。
今回はここまで。
読んでいただきありがとうございました。
ここまで読んでいただきありがとうございます!