マップ強制スクロールゲー
https://gyazo.com/602a9d906111d957e0b395d82f75085d
code:scroll.py
import pyxel
R = 0 # routeの略
W = 1 # wallの略
class App:
WIDTH = 200
HEIGHT = 200
CELL_SIZE = 20
FIELD_SCROLL_COUNT = 30
class Character:
def __init__(self):
self.x = 5
self.y = 0
def update(self, field):
current_map = field.current_map()
if pyxel.btnp(pyxel.KEY_W):
self.y -= 1
if pyxel.btnp(pyxel.KEY_A):
self.x -= 1
if pyxel.btnp(pyxel.KEY_S):
self.y += 1
if pyxel.btnp(pyxel.KEY_D):
self.x += 1
def draw(self):
pyxel.rect(self.x * App.CELL_SIZE, self.y * App.CELL_SIZE,
App.CELL_SIZE, App.CELL_SIZE, 4)
class Field:
MAX_HEIGHT = 10
def __init__(self):
self.position = 0
self.map = []
def increment(self, character):
self.position += 1
# 画面がスクロールした結果、キャラクターが壁にめり込んでしまった
character.y -= 1
# mapが終了してしまったらTrueを返す
return self.position + App.Field.MAX_HEIGHT > len(self.map)
def current_map(self):
# 画面に描画する分(self.position行目から、self.position + 画面描画する行数)を取り出す
def draw(self):
for y in range(0, App.Field.MAX_HEIGHT):
for x in range(0, len(self.mapy)): if cell == W:
# 壁は白で描画
pyxel.rect(x * App.CELL_SIZE, y * App.CELL_SIZE,
App.CELL_SIZE, App.CELL_SIZE, 7)
def __init__(self):
pyxel.init(App.WIDTH, App.HEIGHT, caption="Map Scroll Game")
# 地図を描画
self.field = App.Field()
self.character = App.Character()
# ゲーム関連の変数
self.counter = 0
self.game_clear = False
pyxel.run(self.update, self.draw)
def update(self):
self.counter += 1
if self.should_iterate_map():
self.counter = 0
map_finished = self.field.increment(self.character)
if map_finished:
self.game_clear = True
self.character.update(self.field)
def should_iterate_map(self):
return self.counter > App.FIELD_SCROLL_COUNT
def draw(self):
if not self.game_clear:
# 背景は黒で塗りつぶす
pyxel.cls(0)
# self.map の全行、列を取り出して画面として描画する
self.field.draw()
self.character.draw()
else:
pyxel.cls(7)
pyxel.text(0, 100, "GAME CLEAR", 0)
App()