Crypt of Sokoban - update mcrfpy API usage to recent changes

This commit is contained in:
John McCardle 2025-11-27 07:43:03 -05:00
parent bbc744f8dc
commit bfadab7486
3 changed files with 34 additions and 28 deletions

View File

@ -14,7 +14,7 @@ class COSEntity(): #mcrfpy.Entity): # Fake mcrfpy.Entity integration; engine bu
def __init__(self, g:mcrfpy.Grid, x=0, y=0, sprite_num=86, *, game): def __init__(self, g:mcrfpy.Grid, x=0, y=0, sprite_num=86, *, game):
#self.e = mcrfpy.Entity((x, y), t, sprite_num) #self.e = mcrfpy.Entity((x, y), t, sprite_num)
#super().__init__((x, y), t, sprite_num) #super().__init__((x, y), t, sprite_num)
self._entity = mcrfpy.Entity((x, y), t, sprite_num) self._entity = mcrfpy.Entity(grid_pos=(x, y), texture=t, sprite_index=sprite_num)
#grid.entities.append(self.e) #grid.entities.append(self.e)
self.grid = g self.grid = g
#g.entities.append(self._entity) #g.entities.append(self._entity)
@ -47,7 +47,7 @@ class COSEntity(): #mcrfpy.Entity): # Fake mcrfpy.Entity integration; engine bu
e = self.grid.entities[i] e = self.grid.entities[i]
if e == self._entity: if e == self._entity:
#if e == self: #if e == self:
self.grid.entities.remove(i) self.grid.entities.pop(i)
break break
else: else:
print(f"!!! {self!r} wasn't removed from grid on call to die()") print(f"!!! {self!r} wasn't removed from grid on call to die()")

View File

@ -105,7 +105,7 @@ class Level:
self.height = height self.height = height
#self.graph = [(0, 0, width, height)] #self.graph = [(0, 0, width, height)]
self.graph = RoomGraph( (0, 0, width, height) ) self.graph = RoomGraph( (0, 0, width, height) )
self.grid = mcrfpy.Grid(width, height, t, (10, 5), (1014, 700)) self.grid = mcrfpy.Grid(grid_size=(width, height), texture=t, pos=(10, 5), size=(1014, 700))
self.highlighted = -1 #debug view feature self.highlighted = -1 #debug view feature
self.walled_rooms = [] # for tracking "hallway rooms" vs "walled rooms" self.walled_rooms = [] # for tracking "hallway rooms" vs "walled rooms"
@ -182,7 +182,7 @@ class Level:
self.grid.at((self.width-1, y)).walkable = False self.grid.at((self.width-1, y)).walkable = False
def dig_path(self, start:"Tuple[int, int]", end:"Tuple[int, int]", walkable=True, color=None, sprite=None): def dig_path(self, start:"Tuple[int, int]", end:"Tuple[int, int]", walkable=True, color=None, sprite=None):
print(f"Digging: {start} -> {end}") #print(f"Digging: {start} -> {end}")
# get x1,y1 and x2,y2 coordinates: top left and bottom right points on the rect formed by two random points, one from each of the 2 rooms # get x1,y1 and x2,y2 coordinates: top left and bottom right points on the rect formed by two random points, one from each of the 2 rooms
x1 = min([start[0], end[0]]) x1 = min([start[0], end[0]])
x2 = max([start[0], end[0]]) x2 = max([start[0], end[0]])

View File

@ -45,9 +45,9 @@ class Crypt:
mcrfpy.createScene("play") mcrfpy.createScene("play")
self.ui = mcrfpy.sceneUI("play") self.ui = mcrfpy.sceneUI("play")
entity_frame = mcrfpy.Frame(815, 10, 194, 595, fill_color = frame_color) entity_frame = mcrfpy.Frame(pos=(815, 10), size=(194, 595), fill_color=frame_color)
inventory_frame = mcrfpy.Frame(10, 610, 800, 143, fill_color = frame_color) inventory_frame = mcrfpy.Frame(pos=(10, 610), size=(800, 143), fill_color=frame_color)
stats_frame = mcrfpy.Frame(815, 610, 194, 143, fill_color = frame_color) stats_frame = mcrfpy.Frame(pos=(815, 610), size=(194, 143), fill_color=frame_color)
#self.level = cl.Level(30, 23) #self.level = cl.Level(30, 23)
self.entities = [] self.entities = []
@ -71,42 +71,42 @@ class Crypt:
} }
# empty void for the player to initialize into # empty void for the player to initialize into
self.headsup = mcrfpy.Frame(10, 684, 320, 64, fill_color = (0, 0, 0, 0)) self.headsup = mcrfpy.Frame(pos=(10, 684), size=(320, 64), fill_color=(0, 0, 0, 0))
self.sidebar = mcrfpy.Frame(860, 4, 160, 600, fill_color = (96, 96, 160)) self.sidebar = mcrfpy.Frame(pos=(860, 4), size=(160, 600), fill_color=(96, 96, 160))
# Heads Up (health bar, armor bar) config # Heads Up (health bar, armor bar) config
self.health_bar = [mcrfpy.Sprite(32*i, 2, t, 659, 2) for i in range(10)] self.health_bar = [mcrfpy.Sprite(x=32*i, y=2, texture=t, sprite_index=659, scale=2) for i in range(10)]
[self.headsup.children.append(i) for i in self.health_bar] [self.headsup.children.append(i) for i in self.health_bar]
self.armor_bar = [mcrfpy.Sprite(32*i, 42, t, 659, 2) for i in range(10)] self.armor_bar = [mcrfpy.Sprite(x=32*i, y=42, texture=t, sprite_index=659, scale=2) for i in range(10)]
[self.headsup.children.append(i) for i in self.armor_bar] [self.headsup.children.append(i) for i in self.armor_bar]
# (40, 3), caption, font, fill_color=font_color # (40, 3), caption, font, fill_color=font_color
self.stat_captions = mcrfpy.Caption((325,0), "HP:10\nDef:0(+0)", font, fill_color=(255, 255, 255)) self.stat_captions = mcrfpy.Caption(text="HP:10\nDef:0(+0)", pos=(325,0), font=font, fill_color=(255, 255, 255))
self.stat_captions.outline = 3 self.stat_captions.outline = 3
self.stat_captions.outline_color = (0, 0, 0) self.stat_captions.outline_color = (0, 0, 0)
self.headsup.children.append(self.stat_captions) self.headsup.children.append(self.stat_captions)
# Side Bar (inventory, level info) config # Side Bar (inventory, level info) config
self.level_caption = mcrfpy.Caption((5,5), "Level: 1", font, fill_color=(255, 255, 255)) self.level_caption = mcrfpy.Caption(text="Level: 1", pos=(5,5), font=font, fill_color=(255, 255, 255))
self.level_caption.font_size = 26 self.level_caption.font_size = 26
self.level_caption.outline = 3 self.level_caption.outline = 3
self.level_caption.outline_color = (0, 0, 0) self.level_caption.outline_color = (0, 0, 0)
self.sidebar.children.append(self.level_caption) self.sidebar.children.append(self.level_caption)
self.inv_sprites = [mcrfpy.Sprite(15, 70 + 95*i, t, 659, 6.0) for i in range(5)] self.inv_sprites = [mcrfpy.Sprite(x=15, y=70 + 95*i, texture=t, sprite_index=659, scale=6.0) for i in range(5)]
for i in self.inv_sprites: for i in self.inv_sprites:
self.sidebar.children.append(i) self.sidebar.children.append(i)
self.key_captions = [ self.key_captions = [
mcrfpy.Sprite(75, 130 + (95*2) + 95 * i, t, 384 + i, 3.0) for i in range(3) mcrfpy.Sprite(x=75, y=130 + (95*2) + 95 * i, texture=t, sprite_index=384 + i, scale=3.0) for i in range(3)
] ]
for i in self.key_captions: for i in self.key_captions:
self.sidebar.children.append(i) self.sidebar.children.append(i)
self.inv_captions = [ self.inv_captions = [
mcrfpy.Caption((25, 130 + 95 * i), "x", font, fill_color=(255, 255, 255)) for i in range(5) mcrfpy.Caption(text="x", pos=(25, 130 + 95 * i), font=font, fill_color=(255, 255, 255)) for i in range(5)
] ]
for i in self.inv_captions: for i in self.inv_captions:
i.font_size = 16 i.font_size = 16
self.sidebar.children.append(i) self.sidebar.children.append(i)
liminal_void = mcrfpy.Grid(1, 1, t, (0, 0), (16, 16)) liminal_void = mcrfpy.Grid(grid_size=(1, 1), texture=t, pos=(0, 0), size=(16, 16))
self.grid = liminal_void self.grid = liminal_void
self.player = ce.PlayerEntity(game=self) self.player = ce.PlayerEntity(game=self)
self.spawn_point = (0, 0) self.spawn_point = (0, 0)
@ -252,7 +252,7 @@ class Crypt:
self.entities.sort(key = lambda e: e.draw_order, reverse=False) self.entities.sort(key = lambda e: e.draw_order, reverse=False)
# hack / workaround for grid.entities not interable # hack / workaround for grid.entities not interable
while len(self.grid.entities): # while there are entities on the grid, while len(self.grid.entities): # while there are entities on the grid,
self.grid.entities.remove(0) # remove the 1st ("0th") self.grid.entities.pop(0) # remove the 1st ("0th")
for e in self.entities: for e in self.entities:
self.grid.entities.append(e._entity) self.grid.entities.append(e._entity)
@ -401,6 +401,9 @@ class Crypt:
self.level = new_level self.level = new_level
self.grid = self.level.grid self.grid = self.level.grid
self.grid.zoom = 2.0 self.grid.zoom = 2.0
# Center the camera on the middle of the grid (pixel coordinates: cells * tile_size / 2)
gw, gh = self.grid.grid_size
self.grid.center = (gw * 16 / 2, gh * 16 / 2)
# TODO, make an entity mover function # TODO, make an entity mover function
#self.add_entity(self.player) #self.add_entity(self.player)
self.player.grid = self.grid self.player.grid = self.grid
@ -410,7 +413,7 @@ class Crypt:
# reform UI (workaround to ui collection iterators crashing) # reform UI (workaround to ui collection iterators crashing)
while len(self.ui) > 0: while len(self.ui) > 0:
try: try:
self.ui.remove(0) self.ui.pop(0)
except: except:
pass pass
self.ui.append(self.grid) self.ui.append(self.grid)
@ -433,24 +436,24 @@ class SweetButton:
# box w/ drop shadow # box w/ drop shadow
self.shadow_offset = shadow_offset self.shadow_offset = shadow_offset
self.base_frame = mcrfpy.Frame(x, y, box_width+shadow_offset, box_height, fill_color = (0, 0, 0, 255)) self.base_frame = mcrfpy.Frame(pos=(x, y), size=(box_width+shadow_offset, box_height), fill_color=(0, 0, 0, 255))
self.base_frame.click = self.do_click self.base_frame.click = self.do_click
# drop shadow won't need configured, append directly # drop shadow won't need configured, append directly
if shadow: if shadow:
self.base_frame.children.append(mcrfpy.Frame(0, 0, box_width, box_height, fill_color = shadow_color)) self.base_frame.children.append(mcrfpy.Frame(pos=(0, 0), size=(box_width, box_height), fill_color=shadow_color))
# main button is where the content lives # main button is where the content lives
self.main_button = mcrfpy.Frame(shadow_offset, shadow_offset, box_width, box_height, fill_color = box_color) self.main_button = mcrfpy.Frame(pos=(shadow_offset, shadow_offset), size=(box_width, box_height), fill_color=box_color)
self.click = click self.click = click
self.base_frame.children.append(self.main_button) self.base_frame.children.append(self.main_button)
# main button icon # main button icon
self.icon = mcrfpy.Sprite(0, 3, btn_tex, icon, icon_scale) self.icon = mcrfpy.Sprite(x=0, y=3, texture=btn_tex, sprite_index=icon, scale=icon_scale)
self.main_button.children.append(self.icon) self.main_button.children.append(self.icon)
# main button caption # main button caption
self.caption = mcrfpy.Caption((40, 3), caption, font, fill_color=font_color) self.caption = mcrfpy.Caption(text=caption, pos=(40, 3), font=font, fill_color=font_color)
self.caption.font_size = font_size self.caption.font_size = font_size
self.caption.outline_color=font_outline_color self.caption.outline_color=font_outline_color
self.caption.outline=font_outline_width self.caption.outline=font_outline_width
@ -497,6 +500,9 @@ class MainMenu:
self.demo = cl.Level(20, 20) self.demo = cl.Level(20, 20)
self.grid = self.demo.grid self.grid = self.demo.grid
self.grid.zoom = 1.75 self.grid.zoom = 1.75
# Center the camera on the middle of the grid (pixel coordinates: cells * tile_size / 2)
gw, gh = self.grid.grid_size
self.grid.center = (gw * 16 / 2, gh * 16 / 2)
coords = self.demo.generate( coords = self.demo.generate(
[("boulder", "boulder", "rat", "cyclops", "boulder"), ("spawn"), ("rat", "big rat"), ("button", "boulder", "exit")] [("boulder", "boulder", "rat", "cyclops", "boulder"), ("spawn"), ("rat", "big rat"), ("button", "boulder", "exit")]
) )
@ -546,21 +552,21 @@ class MainMenu:
# title text # title text
drop_shadow = mcrfpy.Caption((150, 10), "Crypt Of Sokoban", font, fill_color=(96, 96, 96), outline_color=(192, 0, 0)) drop_shadow = mcrfpy.Caption(text="Crypt Of Sokoban", pos=(150, 10), font=font, fill_color=(96, 96, 96), outline_color=(192, 0, 0))
drop_shadow.outline = 3 drop_shadow.outline = 3
drop_shadow.font_size = 64 drop_shadow.font_size = 64
components.append( components.append(
drop_shadow drop_shadow
) )
title_txt = mcrfpy.Caption((158, 18), "Crypt Of Sokoban", font, fill_color=(255, 255, 255)) title_txt = mcrfpy.Caption(text="Crypt Of Sokoban", pos=(158, 18), font=font, fill_color=(255, 255, 255))
title_txt.font_size = 64 title_txt.font_size = 64
components.append( components.append(
title_txt title_txt
) )
# toast: text over the demo grid that fades out on a timer # toast: text over the demo grid that fades out on a timer
self.toast = mcrfpy.Caption((150, 400), "", font, fill_color=(0, 0, 0)) self.toast = mcrfpy.Caption(text="", pos=(150, 400), font=font, fill_color=(0, 0, 0))
self.toast.font_size = 28 self.toast.font_size = 28
self.toast.outline = 2 self.toast.outline = 2
self.toast.outline_color = (255, 255, 255) self.toast.outline_color = (255, 255, 255)