歩くノイズをクリックするの続き。いろいろと参考にした結果、前回(どうにかしてくれ - とりあたまの日々)から改良したのが以下である。
ランダムにノイズを描画、COUNTはノイズの数、クリックして全て滅したらゲームクリアとなる。
from enum import Enum, auto
from collections import deque, namedtuple
import pyxel
import random
WINDOW_H = 120
WINDOW_W = 160
class GAMEMODE(Enum):
Title = auto()
Noise = auto()
class Noise:
def __init__(self):
self.IMG_ID0 = 0
self.x = 0
self.y = 56
self.vx = 1
self.pos = -32
self.exists = True
def update(self):
self.x += self.vx
if self.x < 0:
self.x = 0
self.vx *= -1
self.pos = -32
if self.x > pyxel.width - 32:
self.x = pyxel.width -32
self.vx *= -1
self.pos = 32
def checkHit(self, x, y):
left = self.x
top = self.y
right = self.x + 32
bottom = self.y + 32
if left <= x <= right:
if top <= y <= bottom:
return True
return False
def draw_noise(self):
pyxel.blt(self.x, self.y, self.IMG_ID0, 0, 32*(pyxel.frame_count % 4), self.pos, 32, 7)
class App:
def __init__(self):
pyxel.init(WINDOW_W, WINDOW_H, caption="noise", fps=12)
pyxel.load("assets\walk.pyxres")
self.noise_list = []
self.count_noise = 3
for i in range(self.count_noise):
noise = Noise()
noise.x = random.randint(32, pyxel.width-32)
self.noise_list.append(noise)
self.my_gamemode = GAMEMODE.Title
pyxel.run(self.update, self.draw)
def update(self):
if self.my_gamemode == GAMEMODE.Title:
self.update_title()
elif self.my_gamemode == GAMEMODE.Noise:
self.update_noise()
pyxel.mouse(True)
def update_title(self):
if pyxel.btnp(pyxel.KEY_SPACE):
self.my_gamemode = GAMEMODE.Noise
def update_noise(self):
for noise in self.noise_list:
if noise.exists:
if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
if noise.checkHit(pyxel.mouse_x, pyxel.mouse_y):
noise.exists = False
self.count_noise -= 1
if noise.exists:
noise.update()
def draw(self):
pyxel.cls(0)
if self.my_gamemode == GAMEMODE.Title:
self.draw_title()
elif self.my_gamemode == GAMEMODE.Noise:
self.draw_noise()
def draw_title(self):
pyxel.text(52, 50, "WALK ONLY NOISE", 7)
pyxel.text(60, 60, "PUSH, SPACE", 7)
def draw_noise(self):
for noise in self.noise_list:
if noise.exists:
noise.draw_noise()
pyxel.text(60, 0, "CLICK NOISE!", 7)
pyxel.text(0, 0, "COUNT: %d" %(self.count_noise), 7)
pyxel.bltm(0, 88, 0, 0, 0, 24, 16)
is_wiped = True
for noise in self.noise_list:
if noise.exists:
is_wiped = False
if is_wiped:
pyxel.text(60, 50, "GAME CLEAR", 7)
App()
ノイズの数が増えたことによって、より存在感が際立った。ノイズの種類を増やすとか、クリックで消滅ではなく響の攻撃で滅するとか、まだ改造できそうだ。
あとは、BGMとかも付けたいところだ。また何か調べていこう。