crystalwindow 1.4.9__tar.gz → 2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- crystalwindow-2.4/PKG-INFO +254 -0
- crystalwindow-2.4/README.md +234 -0
- crystalwindow-2.4/crystalwindow.egg-info/PKG-INFO +254 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/setup.py +5 -4
- crystalwindow-1.4.9/PKG-INFO +0 -77
- crystalwindow-1.4.9/README.md +0 -59
- crystalwindow-1.4.9/crystalwindow.egg-info/PKG-INFO +0 -77
- {crystalwindow-1.4.9 → crystalwindow-2.4}/MANIFEST.in +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/crystalwindow/Icons/default_icon.png +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/crystalwindow.egg-info/SOURCES.txt +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/crystalwindow.egg-info/dependency_links.txt +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/crystalwindow.egg-info/requires.txt +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/crystalwindow.egg-info/top_level.txt +0 -0
- {crystalwindow-1.4.9 → crystalwindow-2.4}/setup.cfg +0 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: crystalwindow
|
|
3
|
+
Version: 2.4
|
|
4
|
+
Summary: Easier Pygame!, Made by Crystal!!
|
|
5
|
+
Author: CrystalBallyHereXD
|
|
6
|
+
Author-email: mavilla.519@gmail.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.1
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: pygame>=2.3.0
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: classifier
|
|
15
|
+
Dynamic: description
|
|
16
|
+
Dynamic: description-content-type
|
|
17
|
+
Dynamic: requires-dist
|
|
18
|
+
Dynamic: requires-python
|
|
19
|
+
Dynamic: summary
|
|
20
|
+
|
|
21
|
+
# CRYSTALWINDOW!!!
|
|
22
|
+
|
|
23
|
+
A tiny but mighty Pygame framework that gives u a full window system, GUI magic, physics, and file power — all packed into one clean lil module. made by crystal
|
|
24
|
+
|
|
25
|
+
No setup pain. No folder chaos.
|
|
26
|
+
Just import it. Boom. Instant game window. 🎮
|
|
27
|
+
|
|
28
|
+
# Quick Start
|
|
29
|
+
pip install crystalwindow
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
then make a new .py file:
|
|
33
|
+
|
|
34
|
+
from crystalwindow import Window # imports everything from crystalwindow (in this case its Window)
|
|
35
|
+
|
|
36
|
+
win = Window(800, 600, "Crystal Demo") # setup: Window(width, height, name, icon=MyIcon.ico)
|
|
37
|
+
win.run() # runs the window loop
|
|
38
|
+
win.quit() # closes it (for RAM n CPU)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Run it. and boom, instant working window.
|
|
42
|
+
Yes, THAT easy.
|
|
43
|
+
|
|
44
|
+
# Easy crystalwindow window + Gui + Text file:
|
|
45
|
+
from crystalwindow import *
|
|
46
|
+
|
|
47
|
+
win = Window(800, 600, "CrystalWindowLib Mega Sandbox")
|
|
48
|
+
|
|
49
|
+
gui = GUIManager()
|
|
50
|
+
toggle1 = Toggle((50, 50, 100, 40), value=False)
|
|
51
|
+
slider1 = Slider((50, 120, 200, 30), min_val=0, max_val=100, value=50)
|
|
52
|
+
|
|
53
|
+
btn1 = Button(rect=(50, 200, 150, 50), text="Click Me!", color=random_color(),
|
|
54
|
+
hover_color=random_color(), callback=lambda: print("Button clicked!"))
|
|
55
|
+
lbl1 = Label((250, 50), "Hello GUI!", color=random_color(), size=24)
|
|
56
|
+
|
|
57
|
+
gui.add(toggle1)
|
|
58
|
+
gui.add(slider1)
|
|
59
|
+
gui.add(btn1)
|
|
60
|
+
gui.add(lbl1)
|
|
61
|
+
|
|
62
|
+
# --- Debug Overlay ---
|
|
63
|
+
debug = DebugOverlay()
|
|
64
|
+
|
|
65
|
+
# --- Camera Shake ---
|
|
66
|
+
shake = CameraShake(intensity=20)
|
|
67
|
+
|
|
68
|
+
# --- Main loop ---
|
|
69
|
+
def update(win):
|
|
70
|
+
gui.update(win)
|
|
71
|
+
gui.draw(win)
|
|
72
|
+
|
|
73
|
+
# --- draw text examples ---
|
|
74
|
+
win.draw_text_later("Normal Text", pos=(400, 50), size=18, color=random_color())
|
|
75
|
+
win.draw_text_later("Bold Text", pos=(400, 80), size=20, color=random_color(), bold=True)
|
|
76
|
+
win.draw_text_later("Italic Text", pos=(400, 110), size=20, color=random_color(), italic=True)
|
|
77
|
+
win.draw_text_later("Bold + Italic", pos=(400, 140), size=22, color=random_color(), bold=True, italic=True)
|
|
78
|
+
|
|
79
|
+
# --- draw toggle/slider values ---
|
|
80
|
+
win.draw_text_later(f"Toggle: {toggle1.value}", pos=(50, 90), size=18)
|
|
81
|
+
win.draw_text_later(f"Slider: {int(slider1.value)}", pos=(50, 160), size=18)
|
|
82
|
+
|
|
83
|
+
# --- draw gradient ---
|
|
84
|
+
gradient_rect(win, (50, 300, 200, 100), (255,0,0), (0,0,255))
|
|
85
|
+
|
|
86
|
+
# --- screen shake example (move a rectangle with shake) ---
|
|
87
|
+
shake.update()
|
|
88
|
+
x_off, y_off = shake.offset
|
|
89
|
+
win.draw_rect((0,255,0), (500+x_off, 300+y_off, 100, 50))
|
|
90
|
+
|
|
91
|
+
# --- draw random name + color ---
|
|
92
|
+
win.draw_text_later(f"Random Name: {random_name()}", pos=(50, 420), size=20, color=random_color())
|
|
93
|
+
|
|
94
|
+
# --- debug overlay ---
|
|
95
|
+
debug.draw(win, fps=int(win.clock.get_fps()))
|
|
96
|
+
|
|
97
|
+
win.run(update)
|
|
98
|
+
win.quit()
|
|
99
|
+
|
|
100
|
+
And now thats how you use it!
|
|
101
|
+
|
|
102
|
+
# Current Variables.
|
|
103
|
+
|
|
104
|
+
# Whats Inside
|
|
105
|
+
|
|
106
|
+
Built-in window manager
|
|
107
|
+
|
|
108
|
+
Built-in GUI (buttons, sliders, toggles, labels)
|
|
109
|
+
|
|
110
|
+
Built-in gravity + physics engine
|
|
111
|
+
|
|
112
|
+
Tilemap system (place & save blocks!)
|
|
113
|
+
|
|
114
|
+
Image loader (with default base64 logo)
|
|
115
|
+
|
|
116
|
+
Safe startup (works even inside PyInstaller)
|
|
117
|
+
|
|
118
|
+
No external dependencies (only pygame)
|
|
119
|
+
|
|
120
|
+
Works offline
|
|
121
|
+
|
|
122
|
+
Minimal syntax
|
|
123
|
+
|
|
124
|
+
Full debug overlay
|
|
125
|
+
|
|
126
|
+
# Window System
|
|
127
|
+
from crystalwindow import *
|
|
128
|
+
|
|
129
|
+
win = Window(800, 600, "My Game", icon="MyIcon.png")
|
|
130
|
+
|
|
131
|
+
def loop(win):
|
|
132
|
+
win.fill((10, 10, 30))
|
|
133
|
+
# draw or update stuff here
|
|
134
|
+
|
|
135
|
+
win.run(loop)
|
|
136
|
+
win.quit()
|
|
137
|
+
|
|
138
|
+
# Features
|
|
139
|
+
* handles events
|
|
140
|
+
* tracks keys + mouse
|
|
141
|
+
* supports fullscreen
|
|
142
|
+
* safe to close anytime
|
|
143
|
+
|
|
144
|
+
# Player Example
|
|
145
|
+
player = Player(100, 100)
|
|
146
|
+
|
|
147
|
+
def loop(win):
|
|
148
|
+
player.update(win.keys)
|
|
149
|
+
player.draw(win.screen)
|
|
150
|
+
move(dx, dy) -> moves player
|
|
151
|
+
take_damage(x) -> takes damage
|
|
152
|
+
heal(x) -> heals
|
|
153
|
+
draw(surface) -> renders sprite
|
|
154
|
+
|
|
155
|
+
# TileMap
|
|
156
|
+
tilemap = TileMap(32)
|
|
157
|
+
tilemap.add_tile(5, 5, "grass")
|
|
158
|
+
tilemap.save("level.json")
|
|
159
|
+
add_tile(x, y, type)
|
|
160
|
+
remove_tile(x, y)
|
|
161
|
+
draw(surface)
|
|
162
|
+
save(file) / load(file)
|
|
163
|
+
|
|
164
|
+
# GUI System
|
|
165
|
+
btn = Button(20, 20, 120, 40, "Click Me!", lambda: print("yo"))
|
|
166
|
+
gui = GUIManager()
|
|
167
|
+
gui.add(btn)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
Use built-in stuff like:
|
|
171
|
+
|
|
172
|
+
Button(x, y, w, h, text, onclick)
|
|
173
|
+
Label(x, y, text)
|
|
174
|
+
Toggle(x, y, w, h, text, default=False)
|
|
175
|
+
Slider(x, y, w, min, max, default)
|
|
176
|
+
|
|
177
|
+
# Gravity
|
|
178
|
+
g = Gravity(0.5)
|
|
179
|
+
g.update(player)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
makes objects fall realistically. ez.
|
|
183
|
+
|
|
184
|
+
# FileHelper
|
|
185
|
+
save_json("data.json", {"coins": 99})
|
|
186
|
+
data = load_json("data.json")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
Also supports:
|
|
190
|
+
|
|
191
|
+
save_pickle / load_pickle
|
|
192
|
+
|
|
193
|
+
FileDialog("save") (tkinter dialog popup)
|
|
194
|
+
|
|
195
|
+
# DrawHelper
|
|
196
|
+
DrawHelper.text(win.screen, "Hello!", (10,10), (255,255,255), 24)
|
|
197
|
+
DrawHelper.rect(win.screen, (100,0,200), (50,50,100,60))
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
perfect for ui & quick visuals
|
|
201
|
+
|
|
202
|
+
# Debug Tools
|
|
203
|
+
debug = DebugOverlay()
|
|
204
|
+
debug.toggle() # show or hide FPS
|
|
205
|
+
debug.draw(win.screen, {"hp": 100, "fps": win.clock.get_fps()})
|
|
206
|
+
|
|
207
|
+
# Example Game
|
|
208
|
+
from crystalwindow import *
|
|
209
|
+
|
|
210
|
+
win = Window(800, 600, "My Cool Game")
|
|
211
|
+
player = Player(100, 100)
|
|
212
|
+
gravity = Gravity()
|
|
213
|
+
|
|
214
|
+
def update(win):
|
|
215
|
+
win.fill((25, 25, 40))
|
|
216
|
+
player.update(win.keys)
|
|
217
|
+
gravity.update(player)
|
|
218
|
+
player.draw(win.screen)
|
|
219
|
+
|
|
220
|
+
win.run(update)
|
|
221
|
+
win.quit()
|
|
222
|
+
|
|
223
|
+
# Default Logo
|
|
224
|
+
|
|
225
|
+
There is a lil encoded PNG inside the file called:
|
|
226
|
+
|
|
227
|
+
DEFAULT_LOGO_BASE64
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
Its used when no icon is given.
|
|
231
|
+
Set ur own like:
|
|
232
|
+
|
|
233
|
+
Window(800, 600, "My Window", icon="MyIcon.png")
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
or do whatever you want.. i guess.
|
|
237
|
+
|
|
238
|
+
# Example Integration
|
|
239
|
+
from crystalwindow import Window
|
|
240
|
+
|
|
241
|
+
win = Window(800, 600, "My Window", icon="MyIcon.png")
|
|
242
|
+
|
|
243
|
+
while win.running:
|
|
244
|
+
win.check_events()
|
|
245
|
+
win.fill((10, 10, 20))
|
|
246
|
+
win.run()
|
|
247
|
+
win.quit()
|
|
248
|
+
|
|
249
|
+
# Credits
|
|
250
|
+
|
|
251
|
+
Made by: CrystalBallyHereXD
|
|
252
|
+
Framework: CrystalWindow
|
|
253
|
+
Powered by: Pygame
|
|
254
|
+
License: Free to use, modify, and vibe with it!
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# CRYSTALWINDOW!!!
|
|
2
|
+
|
|
3
|
+
A tiny but mighty Pygame framework that gives u a full window system, GUI magic, physics, and file power — all packed into one clean lil module. made by crystal
|
|
4
|
+
|
|
5
|
+
No setup pain. No folder chaos.
|
|
6
|
+
Just import it. Boom. Instant game window. 🎮
|
|
7
|
+
|
|
8
|
+
# Quick Start
|
|
9
|
+
pip install crystalwindow
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
then make a new .py file:
|
|
13
|
+
|
|
14
|
+
from crystalwindow import Window # imports everything from crystalwindow (in this case its Window)
|
|
15
|
+
|
|
16
|
+
win = Window(800, 600, "Crystal Demo") # setup: Window(width, height, name, icon=MyIcon.ico)
|
|
17
|
+
win.run() # runs the window loop
|
|
18
|
+
win.quit() # closes it (for RAM n CPU)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Run it. and boom, instant working window.
|
|
22
|
+
Yes, THAT easy.
|
|
23
|
+
|
|
24
|
+
# Easy crystalwindow window + Gui + Text file:
|
|
25
|
+
from crystalwindow import *
|
|
26
|
+
|
|
27
|
+
win = Window(800, 600, "CrystalWindowLib Mega Sandbox")
|
|
28
|
+
|
|
29
|
+
gui = GUIManager()
|
|
30
|
+
toggle1 = Toggle((50, 50, 100, 40), value=False)
|
|
31
|
+
slider1 = Slider((50, 120, 200, 30), min_val=0, max_val=100, value=50)
|
|
32
|
+
|
|
33
|
+
btn1 = Button(rect=(50, 200, 150, 50), text="Click Me!", color=random_color(),
|
|
34
|
+
hover_color=random_color(), callback=lambda: print("Button clicked!"))
|
|
35
|
+
lbl1 = Label((250, 50), "Hello GUI!", color=random_color(), size=24)
|
|
36
|
+
|
|
37
|
+
gui.add(toggle1)
|
|
38
|
+
gui.add(slider1)
|
|
39
|
+
gui.add(btn1)
|
|
40
|
+
gui.add(lbl1)
|
|
41
|
+
|
|
42
|
+
# --- Debug Overlay ---
|
|
43
|
+
debug = DebugOverlay()
|
|
44
|
+
|
|
45
|
+
# --- Camera Shake ---
|
|
46
|
+
shake = CameraShake(intensity=20)
|
|
47
|
+
|
|
48
|
+
# --- Main loop ---
|
|
49
|
+
def update(win):
|
|
50
|
+
gui.update(win)
|
|
51
|
+
gui.draw(win)
|
|
52
|
+
|
|
53
|
+
# --- draw text examples ---
|
|
54
|
+
win.draw_text_later("Normal Text", pos=(400, 50), size=18, color=random_color())
|
|
55
|
+
win.draw_text_later("Bold Text", pos=(400, 80), size=20, color=random_color(), bold=True)
|
|
56
|
+
win.draw_text_later("Italic Text", pos=(400, 110), size=20, color=random_color(), italic=True)
|
|
57
|
+
win.draw_text_later("Bold + Italic", pos=(400, 140), size=22, color=random_color(), bold=True, italic=True)
|
|
58
|
+
|
|
59
|
+
# --- draw toggle/slider values ---
|
|
60
|
+
win.draw_text_later(f"Toggle: {toggle1.value}", pos=(50, 90), size=18)
|
|
61
|
+
win.draw_text_later(f"Slider: {int(slider1.value)}", pos=(50, 160), size=18)
|
|
62
|
+
|
|
63
|
+
# --- draw gradient ---
|
|
64
|
+
gradient_rect(win, (50, 300, 200, 100), (255,0,0), (0,0,255))
|
|
65
|
+
|
|
66
|
+
# --- screen shake example (move a rectangle with shake) ---
|
|
67
|
+
shake.update()
|
|
68
|
+
x_off, y_off = shake.offset
|
|
69
|
+
win.draw_rect((0,255,0), (500+x_off, 300+y_off, 100, 50))
|
|
70
|
+
|
|
71
|
+
# --- draw random name + color ---
|
|
72
|
+
win.draw_text_later(f"Random Name: {random_name()}", pos=(50, 420), size=20, color=random_color())
|
|
73
|
+
|
|
74
|
+
# --- debug overlay ---
|
|
75
|
+
debug.draw(win, fps=int(win.clock.get_fps()))
|
|
76
|
+
|
|
77
|
+
win.run(update)
|
|
78
|
+
win.quit()
|
|
79
|
+
|
|
80
|
+
And now thats how you use it!
|
|
81
|
+
|
|
82
|
+
# Current Variables.
|
|
83
|
+
|
|
84
|
+
# Whats Inside
|
|
85
|
+
|
|
86
|
+
Built-in window manager
|
|
87
|
+
|
|
88
|
+
Built-in GUI (buttons, sliders, toggles, labels)
|
|
89
|
+
|
|
90
|
+
Built-in gravity + physics engine
|
|
91
|
+
|
|
92
|
+
Tilemap system (place & save blocks!)
|
|
93
|
+
|
|
94
|
+
Image loader (with default base64 logo)
|
|
95
|
+
|
|
96
|
+
Safe startup (works even inside PyInstaller)
|
|
97
|
+
|
|
98
|
+
No external dependencies (only pygame)
|
|
99
|
+
|
|
100
|
+
Works offline
|
|
101
|
+
|
|
102
|
+
Minimal syntax
|
|
103
|
+
|
|
104
|
+
Full debug overlay
|
|
105
|
+
|
|
106
|
+
# Window System
|
|
107
|
+
from crystalwindow import *
|
|
108
|
+
|
|
109
|
+
win = Window(800, 600, "My Game", icon="MyIcon.png")
|
|
110
|
+
|
|
111
|
+
def loop(win):
|
|
112
|
+
win.fill((10, 10, 30))
|
|
113
|
+
# draw or update stuff here
|
|
114
|
+
|
|
115
|
+
win.run(loop)
|
|
116
|
+
win.quit()
|
|
117
|
+
|
|
118
|
+
# Features
|
|
119
|
+
* handles events
|
|
120
|
+
* tracks keys + mouse
|
|
121
|
+
* supports fullscreen
|
|
122
|
+
* safe to close anytime
|
|
123
|
+
|
|
124
|
+
# Player Example
|
|
125
|
+
player = Player(100, 100)
|
|
126
|
+
|
|
127
|
+
def loop(win):
|
|
128
|
+
player.update(win.keys)
|
|
129
|
+
player.draw(win.screen)
|
|
130
|
+
move(dx, dy) -> moves player
|
|
131
|
+
take_damage(x) -> takes damage
|
|
132
|
+
heal(x) -> heals
|
|
133
|
+
draw(surface) -> renders sprite
|
|
134
|
+
|
|
135
|
+
# TileMap
|
|
136
|
+
tilemap = TileMap(32)
|
|
137
|
+
tilemap.add_tile(5, 5, "grass")
|
|
138
|
+
tilemap.save("level.json")
|
|
139
|
+
add_tile(x, y, type)
|
|
140
|
+
remove_tile(x, y)
|
|
141
|
+
draw(surface)
|
|
142
|
+
save(file) / load(file)
|
|
143
|
+
|
|
144
|
+
# GUI System
|
|
145
|
+
btn = Button(20, 20, 120, 40, "Click Me!", lambda: print("yo"))
|
|
146
|
+
gui = GUIManager()
|
|
147
|
+
gui.add(btn)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
Use built-in stuff like:
|
|
151
|
+
|
|
152
|
+
Button(x, y, w, h, text, onclick)
|
|
153
|
+
Label(x, y, text)
|
|
154
|
+
Toggle(x, y, w, h, text, default=False)
|
|
155
|
+
Slider(x, y, w, min, max, default)
|
|
156
|
+
|
|
157
|
+
# Gravity
|
|
158
|
+
g = Gravity(0.5)
|
|
159
|
+
g.update(player)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
makes objects fall realistically. ez.
|
|
163
|
+
|
|
164
|
+
# FileHelper
|
|
165
|
+
save_json("data.json", {"coins": 99})
|
|
166
|
+
data = load_json("data.json")
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
Also supports:
|
|
170
|
+
|
|
171
|
+
save_pickle / load_pickle
|
|
172
|
+
|
|
173
|
+
FileDialog("save") (tkinter dialog popup)
|
|
174
|
+
|
|
175
|
+
# DrawHelper
|
|
176
|
+
DrawHelper.text(win.screen, "Hello!", (10,10), (255,255,255), 24)
|
|
177
|
+
DrawHelper.rect(win.screen, (100,0,200), (50,50,100,60))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
perfect for ui & quick visuals
|
|
181
|
+
|
|
182
|
+
# Debug Tools
|
|
183
|
+
debug = DebugOverlay()
|
|
184
|
+
debug.toggle() # show or hide FPS
|
|
185
|
+
debug.draw(win.screen, {"hp": 100, "fps": win.clock.get_fps()})
|
|
186
|
+
|
|
187
|
+
# Example Game
|
|
188
|
+
from crystalwindow import *
|
|
189
|
+
|
|
190
|
+
win = Window(800, 600, "My Cool Game")
|
|
191
|
+
player = Player(100, 100)
|
|
192
|
+
gravity = Gravity()
|
|
193
|
+
|
|
194
|
+
def update(win):
|
|
195
|
+
win.fill((25, 25, 40))
|
|
196
|
+
player.update(win.keys)
|
|
197
|
+
gravity.update(player)
|
|
198
|
+
player.draw(win.screen)
|
|
199
|
+
|
|
200
|
+
win.run(update)
|
|
201
|
+
win.quit()
|
|
202
|
+
|
|
203
|
+
# Default Logo
|
|
204
|
+
|
|
205
|
+
There is a lil encoded PNG inside the file called:
|
|
206
|
+
|
|
207
|
+
DEFAULT_LOGO_BASE64
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Its used when no icon is given.
|
|
211
|
+
Set ur own like:
|
|
212
|
+
|
|
213
|
+
Window(800, 600, "My Window", icon="MyIcon.png")
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
or do whatever you want.. i guess.
|
|
217
|
+
|
|
218
|
+
# Example Integration
|
|
219
|
+
from crystalwindow import Window
|
|
220
|
+
|
|
221
|
+
win = Window(800, 600, "My Window", icon="MyIcon.png")
|
|
222
|
+
|
|
223
|
+
while win.running:
|
|
224
|
+
win.check_events()
|
|
225
|
+
win.fill((10, 10, 20))
|
|
226
|
+
win.run()
|
|
227
|
+
win.quit()
|
|
228
|
+
|
|
229
|
+
# Credits
|
|
230
|
+
|
|
231
|
+
Made by: CrystalBallyHereXD
|
|
232
|
+
Framework: CrystalWindow
|
|
233
|
+
Powered by: Pygame
|
|
234
|
+
License: Free to use, modify, and vibe with it!
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: crystalwindow
|
|
3
|
+
Version: 2.4
|
|
4
|
+
Summary: Easier Pygame!, Made by Crystal!!
|
|
5
|
+
Author: CrystalBallyHereXD
|
|
6
|
+
Author-email: mavilla.519@gmail.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.1
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: pygame>=2.3.0
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: classifier
|
|
15
|
+
Dynamic: description
|
|
16
|
+
Dynamic: description-content-type
|
|
17
|
+
Dynamic: requires-dist
|
|
18
|
+
Dynamic: requires-python
|
|
19
|
+
Dynamic: summary
|
|
20
|
+
|
|
21
|
+
# CRYSTALWINDOW!!!
|
|
22
|
+
|
|
23
|
+
A tiny but mighty Pygame framework that gives u a full window system, GUI magic, physics, and file power — all packed into one clean lil module. made by crystal
|
|
24
|
+
|
|
25
|
+
No setup pain. No folder chaos.
|
|
26
|
+
Just import it. Boom. Instant game window. 🎮
|
|
27
|
+
|
|
28
|
+
# Quick Start
|
|
29
|
+
pip install crystalwindow
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
then make a new .py file:
|
|
33
|
+
|
|
34
|
+
from crystalwindow import Window # imports everything from crystalwindow (in this case its Window)
|
|
35
|
+
|
|
36
|
+
win = Window(800, 600, "Crystal Demo") # setup: Window(width, height, name, icon=MyIcon.ico)
|
|
37
|
+
win.run() # runs the window loop
|
|
38
|
+
win.quit() # closes it (for RAM n CPU)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Run it. and boom, instant working window.
|
|
42
|
+
Yes, THAT easy.
|
|
43
|
+
|
|
44
|
+
# Easy crystalwindow window + Gui + Text file:
|
|
45
|
+
from crystalwindow import *
|
|
46
|
+
|
|
47
|
+
win = Window(800, 600, "CrystalWindowLib Mega Sandbox")
|
|
48
|
+
|
|
49
|
+
gui = GUIManager()
|
|
50
|
+
toggle1 = Toggle((50, 50, 100, 40), value=False)
|
|
51
|
+
slider1 = Slider((50, 120, 200, 30), min_val=0, max_val=100, value=50)
|
|
52
|
+
|
|
53
|
+
btn1 = Button(rect=(50, 200, 150, 50), text="Click Me!", color=random_color(),
|
|
54
|
+
hover_color=random_color(), callback=lambda: print("Button clicked!"))
|
|
55
|
+
lbl1 = Label((250, 50), "Hello GUI!", color=random_color(), size=24)
|
|
56
|
+
|
|
57
|
+
gui.add(toggle1)
|
|
58
|
+
gui.add(slider1)
|
|
59
|
+
gui.add(btn1)
|
|
60
|
+
gui.add(lbl1)
|
|
61
|
+
|
|
62
|
+
# --- Debug Overlay ---
|
|
63
|
+
debug = DebugOverlay()
|
|
64
|
+
|
|
65
|
+
# --- Camera Shake ---
|
|
66
|
+
shake = CameraShake(intensity=20)
|
|
67
|
+
|
|
68
|
+
# --- Main loop ---
|
|
69
|
+
def update(win):
|
|
70
|
+
gui.update(win)
|
|
71
|
+
gui.draw(win)
|
|
72
|
+
|
|
73
|
+
# --- draw text examples ---
|
|
74
|
+
win.draw_text_later("Normal Text", pos=(400, 50), size=18, color=random_color())
|
|
75
|
+
win.draw_text_later("Bold Text", pos=(400, 80), size=20, color=random_color(), bold=True)
|
|
76
|
+
win.draw_text_later("Italic Text", pos=(400, 110), size=20, color=random_color(), italic=True)
|
|
77
|
+
win.draw_text_later("Bold + Italic", pos=(400, 140), size=22, color=random_color(), bold=True, italic=True)
|
|
78
|
+
|
|
79
|
+
# --- draw toggle/slider values ---
|
|
80
|
+
win.draw_text_later(f"Toggle: {toggle1.value}", pos=(50, 90), size=18)
|
|
81
|
+
win.draw_text_later(f"Slider: {int(slider1.value)}", pos=(50, 160), size=18)
|
|
82
|
+
|
|
83
|
+
# --- draw gradient ---
|
|
84
|
+
gradient_rect(win, (50, 300, 200, 100), (255,0,0), (0,0,255))
|
|
85
|
+
|
|
86
|
+
# --- screen shake example (move a rectangle with shake) ---
|
|
87
|
+
shake.update()
|
|
88
|
+
x_off, y_off = shake.offset
|
|
89
|
+
win.draw_rect((0,255,0), (500+x_off, 300+y_off, 100, 50))
|
|
90
|
+
|
|
91
|
+
# --- draw random name + color ---
|
|
92
|
+
win.draw_text_later(f"Random Name: {random_name()}", pos=(50, 420), size=20, color=random_color())
|
|
93
|
+
|
|
94
|
+
# --- debug overlay ---
|
|
95
|
+
debug.draw(win, fps=int(win.clock.get_fps()))
|
|
96
|
+
|
|
97
|
+
win.run(update)
|
|
98
|
+
win.quit()
|
|
99
|
+
|
|
100
|
+
And now thats how you use it!
|
|
101
|
+
|
|
102
|
+
# Current Variables.
|
|
103
|
+
|
|
104
|
+
# Whats Inside
|
|
105
|
+
|
|
106
|
+
Built-in window manager
|
|
107
|
+
|
|
108
|
+
Built-in GUI (buttons, sliders, toggles, labels)
|
|
109
|
+
|
|
110
|
+
Built-in gravity + physics engine
|
|
111
|
+
|
|
112
|
+
Tilemap system (place & save blocks!)
|
|
113
|
+
|
|
114
|
+
Image loader (with default base64 logo)
|
|
115
|
+
|
|
116
|
+
Safe startup (works even inside PyInstaller)
|
|
117
|
+
|
|
118
|
+
No external dependencies (only pygame)
|
|
119
|
+
|
|
120
|
+
Works offline
|
|
121
|
+
|
|
122
|
+
Minimal syntax
|
|
123
|
+
|
|
124
|
+
Full debug overlay
|
|
125
|
+
|
|
126
|
+
# Window System
|
|
127
|
+
from crystalwindow import *
|
|
128
|
+
|
|
129
|
+
win = Window(800, 600, "My Game", icon="MyIcon.png")
|
|
130
|
+
|
|
131
|
+
def loop(win):
|
|
132
|
+
win.fill((10, 10, 30))
|
|
133
|
+
# draw or update stuff here
|
|
134
|
+
|
|
135
|
+
win.run(loop)
|
|
136
|
+
win.quit()
|
|
137
|
+
|
|
138
|
+
# Features
|
|
139
|
+
* handles events
|
|
140
|
+
* tracks keys + mouse
|
|
141
|
+
* supports fullscreen
|
|
142
|
+
* safe to close anytime
|
|
143
|
+
|
|
144
|
+
# Player Example
|
|
145
|
+
player = Player(100, 100)
|
|
146
|
+
|
|
147
|
+
def loop(win):
|
|
148
|
+
player.update(win.keys)
|
|
149
|
+
player.draw(win.screen)
|
|
150
|
+
move(dx, dy) -> moves player
|
|
151
|
+
take_damage(x) -> takes damage
|
|
152
|
+
heal(x) -> heals
|
|
153
|
+
draw(surface) -> renders sprite
|
|
154
|
+
|
|
155
|
+
# TileMap
|
|
156
|
+
tilemap = TileMap(32)
|
|
157
|
+
tilemap.add_tile(5, 5, "grass")
|
|
158
|
+
tilemap.save("level.json")
|
|
159
|
+
add_tile(x, y, type)
|
|
160
|
+
remove_tile(x, y)
|
|
161
|
+
draw(surface)
|
|
162
|
+
save(file) / load(file)
|
|
163
|
+
|
|
164
|
+
# GUI System
|
|
165
|
+
btn = Button(20, 20, 120, 40, "Click Me!", lambda: print("yo"))
|
|
166
|
+
gui = GUIManager()
|
|
167
|
+
gui.add(btn)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
Use built-in stuff like:
|
|
171
|
+
|
|
172
|
+
Button(x, y, w, h, text, onclick)
|
|
173
|
+
Label(x, y, text)
|
|
174
|
+
Toggle(x, y, w, h, text, default=False)
|
|
175
|
+
Slider(x, y, w, min, max, default)
|
|
176
|
+
|
|
177
|
+
# Gravity
|
|
178
|
+
g = Gravity(0.5)
|
|
179
|
+
g.update(player)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
makes objects fall realistically. ez.
|
|
183
|
+
|
|
184
|
+
# FileHelper
|
|
185
|
+
save_json("data.json", {"coins": 99})
|
|
186
|
+
data = load_json("data.json")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
Also supports:
|
|
190
|
+
|
|
191
|
+
save_pickle / load_pickle
|
|
192
|
+
|
|
193
|
+
FileDialog("save") (tkinter dialog popup)
|
|
194
|
+
|
|
195
|
+
# DrawHelper
|
|
196
|
+
DrawHelper.text(win.screen, "Hello!", (10,10), (255,255,255), 24)
|
|
197
|
+
DrawHelper.rect(win.screen, (100,0,200), (50,50,100,60))
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
perfect for ui & quick visuals
|
|
201
|
+
|
|
202
|
+
# Debug Tools
|
|
203
|
+
debug = DebugOverlay()
|
|
204
|
+
debug.toggle() # show or hide FPS
|
|
205
|
+
debug.draw(win.screen, {"hp": 100, "fps": win.clock.get_fps()})
|
|
206
|
+
|
|
207
|
+
# Example Game
|
|
208
|
+
from crystalwindow import *
|
|
209
|
+
|
|
210
|
+
win = Window(800, 600, "My Cool Game")
|
|
211
|
+
player = Player(100, 100)
|
|
212
|
+
gravity = Gravity()
|
|
213
|
+
|
|
214
|
+
def update(win):
|
|
215
|
+
win.fill((25, 25, 40))
|
|
216
|
+
player.update(win.keys)
|
|
217
|
+
gravity.update(player)
|
|
218
|
+
player.draw(win.screen)
|
|
219
|
+
|
|
220
|
+
win.run(update)
|
|
221
|
+
win.quit()
|
|
222
|
+
|
|
223
|
+
# Default Logo
|
|
224
|
+
|
|
225
|
+
There is a lil encoded PNG inside the file called:
|
|
226
|
+
|
|
227
|
+
DEFAULT_LOGO_BASE64
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
Its used when no icon is given.
|
|
231
|
+
Set ur own like:
|
|
232
|
+
|
|
233
|
+
Window(800, 600, "My Window", icon="MyIcon.png")
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
or do whatever you want.. i guess.
|
|
237
|
+
|
|
238
|
+
# Example Integration
|
|
239
|
+
from crystalwindow import Window
|
|
240
|
+
|
|
241
|
+
win = Window(800, 600, "My Window", icon="MyIcon.png")
|
|
242
|
+
|
|
243
|
+
while win.running:
|
|
244
|
+
win.check_events()
|
|
245
|
+
win.fill((10, 10, 20))
|
|
246
|
+
win.run()
|
|
247
|
+
win.quit()
|
|
248
|
+
|
|
249
|
+
# Credits
|
|
250
|
+
|
|
251
|
+
Made by: CrystalBallyHereXD
|
|
252
|
+
Framework: CrystalWindow
|
|
253
|
+
Powered by: Pygame
|
|
254
|
+
License: Free to use, modify, and vibe with it!
|
|
@@ -2,15 +2,16 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="crystalwindow", # this is the name ppl will pip install
|
|
5
|
-
version="
|
|
5
|
+
version="2.4", # update when u change stuff
|
|
6
6
|
packages=find_packages(include=["CrystalWindow", "CrystalWindow.*"]),
|
|
7
7
|
include_package_data=True,
|
|
8
|
-
install_requires=["pygame>=2.3.0"],
|
|
8
|
+
install_requires=["pygame>=2.3.0"],
|
|
9
9
|
author="CrystalBallyHereXD",
|
|
10
|
-
|
|
10
|
+
author_email="mavilla.519@gmail.com",
|
|
11
|
+
description="Easier Pygame!, Made by Crystal!!",
|
|
11
12
|
long_description=open("README.md").read(),
|
|
12
13
|
long_description_content_type="text/markdown",
|
|
13
|
-
python_requires='>=3.
|
|
14
|
+
python_requires='>=3.1',
|
|
14
15
|
classifiers=[
|
|
15
16
|
"Programming Language :: Python :: 3",
|
|
16
17
|
"Operating System :: OS Independent",
|
crystalwindow-1.4.9/PKG-INFO
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: crystalwindow
|
|
3
|
-
Version: 1.4.9
|
|
4
|
-
Summary: pygame but remade, easy window/player/tile handling
|
|
5
|
-
Author: CrystalBallyHereXD
|
|
6
|
-
Classifier: Programming Language :: Python :: 3
|
|
7
|
-
Classifier: Operating System :: OS Independent
|
|
8
|
-
Requires-Python: >=3.8
|
|
9
|
-
Description-Content-Type: text/markdown
|
|
10
|
-
Requires-Dist: pygame>=2.3.0
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: classifier
|
|
13
|
-
Dynamic: description
|
|
14
|
-
Dynamic: description-content-type
|
|
15
|
-
Dynamic: requires-dist
|
|
16
|
-
Dynamic: requires-python
|
|
17
|
-
Dynamic: summary
|
|
18
|
-
|
|
19
|
-
🧊 CrystalWindow (Single-File Edition)
|
|
20
|
-
|
|
21
|
-
A tiny but mighty Pygame framework that gives u a full window system, rendering, and GUI power — all packed into one file.
|
|
22
|
-
No setup pain. No folder chaos. Just import, and boom 💥, instant window.
|
|
23
|
-
|
|
24
|
-
🚀 Quick Start
|
|
25
|
-
pip install crystalwindow
|
|
26
|
-
|
|
27
|
-
Then in ur Python script:
|
|
28
|
-
|
|
29
|
-
from CrystalWindow import Window
|
|
30
|
-
|
|
31
|
-
# create window
|
|
32
|
-
win = Window(800, 600, "My Cool Game")
|
|
33
|
-
|
|
34
|
-
# main loop
|
|
35
|
-
while win.running:
|
|
36
|
-
win.check_events()
|
|
37
|
-
win.fill((0, 0, 50))
|
|
38
|
-
win.update()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
🌀 That’s it. Run it, and boom — instant working window.
|
|
42
|
-
|
|
43
|
-
🧩 Features
|
|
44
|
-
|
|
45
|
-
✅ Built-in window manager
|
|
46
|
-
✅ Built-in image & icon loader (with default base64 logo)
|
|
47
|
-
✅ File-safe startup (even inside PyInstaller)
|
|
48
|
-
✅ Works offline — no extra libs
|
|
49
|
-
✅ Minimal and clean syntax
|
|
50
|
-
|
|
51
|
-
💾 Default Logo
|
|
52
|
-
|
|
53
|
-
The file includes a variable named DEFAULT_LOGO_BASE64 — a lil encoded PNG used when no icon is found.
|
|
54
|
-
|
|
55
|
-
Use it like: Window(800, 600, "My Window", icon=MyIcon.png)
|
|
56
|
-
|
|
57
|
-
Boom 💥 — u can show it, set it as a window icon, or meme it if u want.
|
|
58
|
-
|
|
59
|
-
🧠Example Integration
|
|
60
|
-
|
|
61
|
-
You can use it as part of ur project (like a game, an editor, or a tool):
|
|
62
|
-
|
|
63
|
-
from CrystalWindow import Window
|
|
64
|
-
|
|
65
|
-
win = Window(800, 600, "My Window", icon=MyIcon.png)
|
|
66
|
-
|
|
67
|
-
while win.running:
|
|
68
|
-
win.check_events()
|
|
69
|
-
win.fill((10, 10, 20))
|
|
70
|
-
win.update()
|
|
71
|
-
|
|
72
|
-
🧊 Credits
|
|
73
|
-
|
|
74
|
-
💻 Made by: Crystal Friendo
|
|
75
|
-
🌀 Framework: CrystalWindow
|
|
76
|
-
🎨 Powered by: Pygame
|
|
77
|
-
✨ License: Free to use, modify, and vibe with
|
crystalwindow-1.4.9/README.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
🧊 CrystalWindow (Single-File Edition)
|
|
2
|
-
|
|
3
|
-
A tiny but mighty Pygame framework that gives u a full window system, rendering, and GUI power — all packed into one file.
|
|
4
|
-
No setup pain. No folder chaos. Just import, and boom 💥, instant window.
|
|
5
|
-
|
|
6
|
-
🚀 Quick Start
|
|
7
|
-
pip install crystalwindow
|
|
8
|
-
|
|
9
|
-
Then in ur Python script:
|
|
10
|
-
|
|
11
|
-
from CrystalWindow import Window
|
|
12
|
-
|
|
13
|
-
# create window
|
|
14
|
-
win = Window(800, 600, "My Cool Game")
|
|
15
|
-
|
|
16
|
-
# main loop
|
|
17
|
-
while win.running:
|
|
18
|
-
win.check_events()
|
|
19
|
-
win.fill((0, 0, 50))
|
|
20
|
-
win.update()
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
🌀 That’s it. Run it, and boom — instant working window.
|
|
24
|
-
|
|
25
|
-
🧩 Features
|
|
26
|
-
|
|
27
|
-
✅ Built-in window manager
|
|
28
|
-
✅ Built-in image & icon loader (with default base64 logo)
|
|
29
|
-
✅ File-safe startup (even inside PyInstaller)
|
|
30
|
-
✅ Works offline — no extra libs
|
|
31
|
-
✅ Minimal and clean syntax
|
|
32
|
-
|
|
33
|
-
💾 Default Logo
|
|
34
|
-
|
|
35
|
-
The file includes a variable named DEFAULT_LOGO_BASE64 — a lil encoded PNG used when no icon is found.
|
|
36
|
-
|
|
37
|
-
Use it like: Window(800, 600, "My Window", icon=MyIcon.png)
|
|
38
|
-
|
|
39
|
-
Boom 💥 — u can show it, set it as a window icon, or meme it if u want.
|
|
40
|
-
|
|
41
|
-
🧠 Example Integration
|
|
42
|
-
|
|
43
|
-
You can use it as part of ur project (like a game, an editor, or a tool):
|
|
44
|
-
|
|
45
|
-
from CrystalWindow import Window
|
|
46
|
-
|
|
47
|
-
win = Window(800, 600, "My Window", icon=MyIcon.png)
|
|
48
|
-
|
|
49
|
-
while win.running:
|
|
50
|
-
win.check_events()
|
|
51
|
-
win.fill((10, 10, 20))
|
|
52
|
-
win.update()
|
|
53
|
-
|
|
54
|
-
🧊 Credits
|
|
55
|
-
|
|
56
|
-
💻 Made by: Crystal Friendo
|
|
57
|
-
🌀 Framework: CrystalWindow
|
|
58
|
-
🎨 Powered by: Pygame
|
|
59
|
-
✨ License: Free to use, modify, and vibe with
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: crystalwindow
|
|
3
|
-
Version: 1.4.9
|
|
4
|
-
Summary: pygame but remade, easy window/player/tile handling
|
|
5
|
-
Author: CrystalBallyHereXD
|
|
6
|
-
Classifier: Programming Language :: Python :: 3
|
|
7
|
-
Classifier: Operating System :: OS Independent
|
|
8
|
-
Requires-Python: >=3.8
|
|
9
|
-
Description-Content-Type: text/markdown
|
|
10
|
-
Requires-Dist: pygame>=2.3.0
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: classifier
|
|
13
|
-
Dynamic: description
|
|
14
|
-
Dynamic: description-content-type
|
|
15
|
-
Dynamic: requires-dist
|
|
16
|
-
Dynamic: requires-python
|
|
17
|
-
Dynamic: summary
|
|
18
|
-
|
|
19
|
-
🧊 CrystalWindow (Single-File Edition)
|
|
20
|
-
|
|
21
|
-
A tiny but mighty Pygame framework that gives u a full window system, rendering, and GUI power — all packed into one file.
|
|
22
|
-
No setup pain. No folder chaos. Just import, and boom 💥, instant window.
|
|
23
|
-
|
|
24
|
-
🚀 Quick Start
|
|
25
|
-
pip install crystalwindow
|
|
26
|
-
|
|
27
|
-
Then in ur Python script:
|
|
28
|
-
|
|
29
|
-
from CrystalWindow import Window
|
|
30
|
-
|
|
31
|
-
# create window
|
|
32
|
-
win = Window(800, 600, "My Cool Game")
|
|
33
|
-
|
|
34
|
-
# main loop
|
|
35
|
-
while win.running:
|
|
36
|
-
win.check_events()
|
|
37
|
-
win.fill((0, 0, 50))
|
|
38
|
-
win.update()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
🌀 That’s it. Run it, and boom — instant working window.
|
|
42
|
-
|
|
43
|
-
🧩 Features
|
|
44
|
-
|
|
45
|
-
✅ Built-in window manager
|
|
46
|
-
✅ Built-in image & icon loader (with default base64 logo)
|
|
47
|
-
✅ File-safe startup (even inside PyInstaller)
|
|
48
|
-
✅ Works offline — no extra libs
|
|
49
|
-
✅ Minimal and clean syntax
|
|
50
|
-
|
|
51
|
-
💾 Default Logo
|
|
52
|
-
|
|
53
|
-
The file includes a variable named DEFAULT_LOGO_BASE64 — a lil encoded PNG used when no icon is found.
|
|
54
|
-
|
|
55
|
-
Use it like: Window(800, 600, "My Window", icon=MyIcon.png)
|
|
56
|
-
|
|
57
|
-
Boom 💥 — u can show it, set it as a window icon, or meme it if u want.
|
|
58
|
-
|
|
59
|
-
🧠Example Integration
|
|
60
|
-
|
|
61
|
-
You can use it as part of ur project (like a game, an editor, or a tool):
|
|
62
|
-
|
|
63
|
-
from CrystalWindow import Window
|
|
64
|
-
|
|
65
|
-
win = Window(800, 600, "My Window", icon=MyIcon.png)
|
|
66
|
-
|
|
67
|
-
while win.running:
|
|
68
|
-
win.check_events()
|
|
69
|
-
win.fill((10, 10, 20))
|
|
70
|
-
win.update()
|
|
71
|
-
|
|
72
|
-
🧊 Credits
|
|
73
|
-
|
|
74
|
-
💻 Made by: Crystal Friendo
|
|
75
|
-
🌀 Framework: CrystalWindow
|
|
76
|
-
🎨 Powered by: Pygame
|
|
77
|
-
✨ License: Free to use, modify, and vibe with
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|