From 9fe278675d359f62f438de23afcc2287fbae753c Mon Sep 17 00:00:00 2001 From: Giovani Date: Mon, 28 Jul 2025 16:17:54 -0400 Subject: [PATCH] feat: make it web/pygbag deploy compatible --- README.md | 22 ++--- build.py | 75 ------------------ config.yaml => data/config.yaml | 26 +++--- .../image/press-start-2p-font.bmp | Bin {resource => data}/image/tetris_icon.png | Bin {resource => data}/image/title_screen.png | Bin .../sound/four_lines_complete.ogg | Bin {resource => data}/sound/game_over.ogg | Bin {resource => data}/sound/level_up.ogg | Bin {resource => data}/sound/line_complete.ogg | Bin data/sound/option_change.ogg | Bin 0 -> 5989 bytes {resource => data}/sound/piece_rotate.ogg | Bin {resource => data}/sound/piece_set.ogg | Bin .../sound/theme_music_multi.ogg | Bin .../sound/theme_music_single.ogg | Bin {resource => data}/sound/you_win.ogg | Bin main.py | 7 +- requirements.txt | 11 ++- resource/sound/option_change.wav | Bin 188544 -> 0 bytes tetri5/game.py | 2 +- tetri5/online.py | 5 +- tetri5/util.py | 7 +- 22 files changed, 39 insertions(+), 116 deletions(-) delete mode 100644 build.py rename config.yaml => data/config.yaml (75%) rename {resource => data}/image/press-start-2p-font.bmp (100%) rename {resource => data}/image/tetris_icon.png (100%) rename {resource => data}/image/title_screen.png (100%) rename {resource => data}/sound/four_lines_complete.ogg (100%) rename {resource => data}/sound/game_over.ogg (100%) rename {resource => data}/sound/level_up.ogg (100%) rename {resource => data}/sound/line_complete.ogg (100%) create mode 100644 data/sound/option_change.ogg rename {resource => data}/sound/piece_rotate.ogg (100%) rename {resource => data}/sound/piece_set.ogg (100%) rename {resource => data}/sound/theme_music_multi.ogg (100%) rename {resource => data}/sound/theme_music_single.ogg (100%) rename {resource => data}/sound/you_win.ogg (100%) delete mode 100644 resource/sound/option_change.wav diff --git a/README.md b/README.md index 28011f3..fb4e0c8 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,10 @@

- +

A full featured game of falling shapes using python's pygame library.

-

- - looks good to me - - - - - - - -



@@ -90,3 +76,9 @@ Pull requests are welcome. For major changes, please open an issue first to disc ## License [MIT](https://choosealicense.com/licenses/mit/) + + +```TODO +pip install --target __pypackages__/3.12/lib/ websockets==15.0.1 +pip install --target __pypackages__/3.12/lib/ PyYAML==6.0.2 +``` \ No newline at end of file diff --git a/build.py b/build.py deleted file mode 100644 index d36dd78..0000000 --- a/build.py +++ /dev/null @@ -1,75 +0,0 @@ -from cx_Freeze import setup, Executable -import sys - -base = None -if sys.platform == 'win32': - base = "Win32GUI" - -shortcut_table = [ - ("DesktopShortcut", # Shortcut - "DesktopFolder", # Directory_ - "Tetri5", # Name - "TARGETDIR", # Component_ - "[TARGETDIR]main.exe", # Target - None, # Arguments - None, # Description - None, # Hotkey - None, # Icon - None, # IconIndex - None, # ShowCmd - 'TARGETDIR' # WkDir - ) - ] - -msi_data = {"Shortcut": shortcut_table} -bdist_msi_options = {'data': msi_data} - -setup( - name="Tetri5", - version="1.0.0", - description="A full featured tetris game using python's pygame library. https://github.com/gio101046/tetri5", - options={ - "bdist_msi": bdist_msi_options, - "build_exe": { - "packages": [ - "pygame", - "typing", - "types", - "copy", - "yaml", - "random", - "sys", - "asyncio", - "websockets", - "json", - "queue", - "uuid", - "threading", - "tetri5.entity", - "tetri5.game", - "tetri5.modal", - "tetri5.online", - "tetri5.scene", - "tetri5.util" - ], - "include_files": [ - ("config.yaml", "config.yaml"), - ("resource/image/press-start-2p-font.bmp", "resource/image/press-start-2p-font.bmp"), - ("resource/image/tetris_icon.png", "resource/image/tetris_icon.png"), - ("resource/image/title_screen.png", "resource/image/title_screen.png"), - ("resource/sound/four_lines_complete.ogg", "resource/sound/four_lines_complete.ogg"), - ("resource/sound/game_over.ogg", "resource/sound/game_over.ogg"), - ("resource/sound/level_up.ogg", "resource/sound/level_up.ogg"), - ("resource/sound/line_complete.ogg", "resource/sound/line_complete.ogg"), - ("resource/sound/option_change.wav", "resource/sound/option_change.wav"), - ("resource/sound/piece_rotate.ogg", "resource/sound/piece_rotate.ogg"), - ("resource/sound/piece_set.ogg", "resource/sound/piece_set.ogg"), - ("resource/sound/theme_music_multi.ogg", "resource/sound/theme_music_multi.ogg"), - ("resource/sound/theme_music_single.ogg", "resource/sound/theme_music_single.ogg"), - ("resource/sound/you_win.ogg", "resource/sound/you_win.ogg") - ] - } - }, - executables=[Executable("main.py", base=base)] -) - diff --git a/config.yaml b/data/config.yaml similarity index 75% rename from config.yaml rename to data/config.yaml index ac00579..90b6f98 100644 --- a/config.yaml +++ b/data/config.yaml @@ -4,21 +4,21 @@ window: title: "Tetri5" sound: - theme-music-single: "resource/sound/theme_music_single.ogg" - theme-music-multi: "resource/sound/theme_music_multi.ogg" - option-change: "resource/sound/option_change.wav" - piece-rotate: "resource/sound/piece_rotate.ogg" - piece-set: "resource/sound/piece_set.ogg" - line-complete: "resource/sound/line_complete.ogg" - four-lines-complete: "resource/sound/four_lines_complete.ogg" - level-up: "resource/sound/level_up.ogg" - game-over: "resource/sound/game_over.ogg" - you-win: "resource/sound/you_win.ogg" + theme-music-single: "data/sound/theme_music_single.ogg" + theme-music-multi: "data/sound/theme_music_multi.ogg" + option-change: "data/sound/option_change.ogg" + piece-rotate: "data/sound/piece_rotate.ogg" + piece-set: "data/sound/piece_set.ogg" + line-complete: "data/sound/line_complete.ogg" + four-lines-complete: "data/sound/four_lines_complete.ogg" + level-up: "data/sound/level_up.ogg" + game-over: "data/sound/game_over.ogg" + you-win: "data/sound/you_win.ogg" image: - title-screen: "resource/image/title_screen.png" - window-icon: "resource/image/tetris_icon.png" - font: "resource/image/press-start-2p-font.bmp" + title-screen: "data/image/title_screen.png" + window-icon: "data/image/tetris_icon.png" + font: "data/image/press-start-2p-font.bmp" position: # title scene diff --git a/resource/image/press-start-2p-font.bmp b/data/image/press-start-2p-font.bmp similarity index 100% rename from resource/image/press-start-2p-font.bmp rename to data/image/press-start-2p-font.bmp diff --git a/resource/image/tetris_icon.png b/data/image/tetris_icon.png similarity index 100% rename from resource/image/tetris_icon.png rename to data/image/tetris_icon.png diff --git a/resource/image/title_screen.png b/data/image/title_screen.png similarity index 100% rename from resource/image/title_screen.png rename to data/image/title_screen.png diff --git a/resource/sound/four_lines_complete.ogg b/data/sound/four_lines_complete.ogg similarity index 100% rename from resource/sound/four_lines_complete.ogg rename to data/sound/four_lines_complete.ogg diff --git a/resource/sound/game_over.ogg b/data/sound/game_over.ogg similarity index 100% rename from resource/sound/game_over.ogg rename to data/sound/game_over.ogg diff --git a/resource/sound/level_up.ogg b/data/sound/level_up.ogg similarity index 100% rename from resource/sound/level_up.ogg rename to data/sound/level_up.ogg diff --git a/resource/sound/line_complete.ogg b/data/sound/line_complete.ogg similarity index 100% rename from resource/sound/line_complete.ogg rename to data/sound/line_complete.ogg diff --git a/data/sound/option_change.ogg b/data/sound/option_change.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5e70f26e1c5e6a2c4bceb3feee15ed304f468cc1 GIT binary patch literal 5989 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 XPL7hp`3=X3=7+M;T_(nszrXw+v{R3Q literal 0 HcmV?d00001 diff --git a/resource/sound/piece_rotate.ogg b/data/sound/piece_rotate.ogg similarity index 100% rename from resource/sound/piece_rotate.ogg rename to data/sound/piece_rotate.ogg diff --git a/resource/sound/piece_set.ogg b/data/sound/piece_set.ogg similarity index 100% rename from resource/sound/piece_set.ogg rename to data/sound/piece_set.ogg diff --git a/resource/sound/theme_music_multi.ogg b/data/sound/theme_music_multi.ogg similarity index 100% rename from resource/sound/theme_music_multi.ogg rename to data/sound/theme_music_multi.ogg diff --git a/resource/sound/theme_music_single.ogg b/data/sound/theme_music_single.ogg similarity index 100% rename from resource/sound/theme_music_single.ogg rename to data/sound/theme_music_single.ogg diff --git a/resource/sound/you_win.ogg b/data/sound/you_win.ogg similarity index 100% rename from resource/sound/you_win.ogg rename to data/sound/you_win.ogg diff --git a/main.py b/main.py index 394244b..5e544b3 100644 --- a/main.py +++ b/main.py @@ -3,17 +3,18 @@ https://strategywiki.org/wiki/Tetris/Getting_Started https://tetris.com/play-tetris ''' - +import asyncio from tetri5.game import Game from tetri5.util import ConfigurationManager -def main() -> None: +async def run_game(): ConfigurationManager.init() Game.init() while True: Game.update() Game.draw() + await asyncio.sleep(0) # yield control to browser if __name__ == "__main__": - main() \ No newline at end of file + asyncio.run(run_game()) diff --git a/requirements.txt b/requirements.txt index 56e05c1..2e4af92 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ -cx-Freeze==6.7 -importlib-metadata==4.6.1 -pygame==2.0.1 -PyYAML==5.4.1 -websockets==9.1 -zipp==3.5.0 +asarPy==1.0.1 +pygame==2.5.2 +pygbag==0.9.2 +PyYAML==6.0.2 +websockets==15.0.1 diff --git a/resource/sound/option_change.wav b/resource/sound/option_change.wav deleted file mode 100644 index 5e74ae13a2e1705b65c1deccf7bccb0e617c0fcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188544 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 z0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;a zDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-? zpaLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO z0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;a zDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-? zpaLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO z0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;a zDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-? zpaLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO z0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;a zDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-? zpaLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO z0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLqO0xF;aDxd-?paLrJ=N0&G DtX+LH diff --git a/tetri5/game.py b/tetri5/game.py index af2d92c..9b4ec48 100644 --- a/tetri5/game.py +++ b/tetri5/game.py @@ -52,7 +52,7 @@ class Game: cls._current_scene.draw(cls.screen) # update display - pygame.display.update() + pygame.display.flip() @classmethod def change_scene(cls, scene: Scene) -> None: diff --git a/tetri5/online.py b/tetri5/online.py index d9b804f..07fedfa 100644 --- a/tetri5/online.py +++ b/tetri5/online.py @@ -1,5 +1,8 @@ -import asyncio +import sys +sys.path.append("__pypackages__/3.12/lib/") import websockets + +import asyncio import json import queue # refer to https://docs.python.org/3/library/queue.html for cross threading communication import uuid diff --git a/tetri5/util.py b/tetri5/util.py index fc4747b..13461c4 100644 --- a/tetri5/util.py +++ b/tetri5/util.py @@ -1,4 +1,7 @@ -import yaml +import sys +sys.path.append("__pypackages__/3.12/lib/") +import yaml # non-native package + import pygame from typing import Tuple @@ -7,7 +10,7 @@ from typing import Tuple """ class ConfigurationManager: - CONFIG_FILE_LOCATION = "config.yaml" + CONFIG_FILE_LOCATION = "data/config.yaml" _configuration = [] @classmethod