elukjanovica 2024-03-03 13:08:18 +02:00
parent 2cf93a7f12
commit 2ceec90ede
10 changed files with 94 additions and 59 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

126
main.py
View File

@ -41,7 +41,6 @@ settings_data = load_data(SETTINGS_FILE)
stats_data = load_data(STATS_FILE) stats_data = load_data(STATS_FILE)
gui = "gui color" gui = "gui color"
sensitivity = "sensitivity"
music = "music" music = "music"
sound = "sound" sound = "sound"
style = "style" style = "style"
@ -87,13 +86,45 @@ if current_size == SIZE_CHOICES[0]:
FONT_SIZE = 11 FONT_SIZE = 11
FONT_SIZE2 = 10 FONT_SIZE2 = 10
puzzle_size = (128, 128) puzzle_size = (128, 128)
# --> puzzle_size[2] and puzzle_size[3] (128) - puzzle size (?x? px)
non_movable_area = pygame.Rect(8, 19, 128, 128) non_movable_area = pygame.Rect(8, 19, 128, 128)
# --> scaled_size[0] (8) - x position for image in game mode
# --> scaled_size[1] (19) - y position for image
# --> scaled_size[2] and scaled_size[3] (128) - image size (?x? px)
timer_area = pygame.Rect(22, 1, 55, 12) timer_area = pygame.Rect(22, 1, 55, 12)
# --> timer_area[0] (22) - position x for timer area in game mode
# --> timer_area[1] (1) - position y for timer area
# --> timer_area[2] (55) - width of timer area
# --> timer_area[3] (12) - heigth of timer area
win_area = pygame.Rect(74, 78, 128, 128) win_area = pygame.Rect(74, 78, 128, 128)
# --> win_area[0] (74) - position x for "You win !!" text area in game mode
# --> win_area[1] (78) - position y for "You win !!" text area
# --> win_area[2] (128) - width of "You win !!" text area
# --> win_area[3] (128) - heigth of "You win !!" text area
size = [20, 25, 116, 15] size = [20, 25, 116, 15]
cons = [15, 195, 12, 3, 9] cons = [15, 195, 12, 3, 9]
# size and cons (constants) are too complicated, I cant remember what each element was, sorry :(
scaled_size = (18, 21, 108, 108) scaled_size = (18, 21, 108, 108)
# --> scaled_size[0] (18) - x position for image in select mode
# --> scaled_size[1] (21) - y position for image
# --> scaled_size[2] and scaled_size[3] (108) - image size (?x? px)
area = (72, 142) area = (72, 142)
# --> area[0] (72) - x position for text "? of ?" in select mode
# --> area[1] (142) - y position for text "? of ?"
spaces = [14, 18, 20, 30, 8]
# --> spaces[0] (14) - space between setting name and setting in settings mode, increasing
# --> spaces[1] (18) - space between non_movable_area edge, decreasing
# --> spaces[2] (20) - space between setting names, increasing
# --> spaces[3] (30) - space between slider and non_movable_area edge, decreasing
# --> spaces[4] (8) - space between setting names and non_movable_area edge, increasing
f_line = [92, 30, 80, 12]
s_line = [92, 45, 80, 12]
s_button = [175, 30, 10, 16]
# for list in f_line, s_line and s_button:
# --> list[0] (135, 135, 218) - position x for element in spritesheet
# --> list[1] (38, 53, 38) - position y for element in spritesheet
# --> list[2] (80, 80, 10) - width of element in settings mode
# --> list[3] (12, 12, 16) - heigth of element
elif current_size == SIZE_CHOICES[1]: elif current_size == SIZE_CHOICES[1]:
WIDTH, HEIGHT = 202, 216 WIDTH, HEIGHT = 202, 216
@ -115,6 +146,10 @@ elif current_size == SIZE_CHOICES[1]:
cons = [25, 247, 18, 3, 13] cons = [25, 247, 18, 3, 13]
scaled_size = (22, 26, 158, 158) scaled_size = (22, 26, 158, 158)
area = (100, 200) area = (100, 200)
spaces = [14, 30, 30, 40, 8]
f_line = [135, 38, 100, 16]
s_line = [135, 58, 100, 16]
s_button = [238, 38, 12, 20]
else: else:
WIDTH, HEIGHT = 396, 425 WIDTH, HEIGHT = 396, 425
@ -136,6 +171,10 @@ else:
cons = [35, 455, 25, 13, 26] cons = [35, 455, 25, 13, 26]
scaled_size = (43, 48, 310, 310) scaled_size = (43, 48, 310, 310)
area = (197, 390) area = (197, 390)
spaces = [24, 34, 50, 84, 8]
f_line = [276, 70, 200, 32]
s_line = [276, 105, 200, 32]
s_button = [479, 70, 24, 40]
puzzle_version = settings_data["grid"] puzzle_version = settings_data["grid"]
@ -590,16 +629,10 @@ def update_puzzle_data(completed, sorted, current_time, current_moves, real_time
# SETTINGS MODE # SETTINGS MODE
scroll_offset = 0 scroll_offset = 0
space_between_settings = 20
settings_y_offset = 5
f_line = [135, 38, 80, 12]
s_line = [135, 53, 80, 12]
s_button = [218, 38, 10, 16]
settings_x_position = puzzle_size[0] settings_x_position = puzzle_size[0]
total_settings_height = len(settings_data) * (cons[0] + space_between_settings) total_settings_height = len(settings_data) * (cons[0] + spaces[1])
max_scroll_offset = max(0, total_settings_height - non_movable_area.height) max_scroll_offset = max(0, total_settings_height - non_movable_area.height)
active_sliders = {gui: False, sensitivity: False, music: False, sound: False} active_sliders = {gui: False, music: False, sound: False}
gap = (s_button[2]/2)-(s_line[3]/2)-1 gap = (s_button[2]/2)-(s_line[3]/2)-1
@ -608,7 +641,7 @@ def slider(position, value_range, value, active_slider, setting):
value_pos = second_x - s_button[2] / 2 value_pos = second_x - s_button[2] / 2
first_line = Image((f_line[0], f_line[1]), (position[0], position[1]), (f_line[2], f_line[3])) first_line = Image((f_line[0], f_line[1]), (position[0], position[1]), (f_line[2], f_line[3]))
second_line = Image((s_line[0], s_line[1]), (position[0], position[1]), (second_x, s_line[3])) second_line = Image((s_line[0], s_line[1]), (position[0], position[1]), (second_x, s_line[3]))
slider_button = Button((s_button[0], s_button[1]), (position[0] + value_pos, position[1] + gap), (s_button[2], s_button[3])) slider_button = Image((s_button[0], s_button[1]), (position[0] + value_pos, position[1] + gap), (s_button[2], s_button[3]))
mouse_buttons = pygame.mouse.get_pressed() mouse_buttons = pygame.mouse.get_pressed()
if active_slider[setting] and mouse_buttons[0]: if active_slider[setting] and mouse_buttons[0]:
@ -624,37 +657,46 @@ def slider(position, value_range, value, active_slider, setting):
second_x = new_value_pos - position[0] + s_button[2] / 2 second_x = new_value_pos - position[0] + s_button[2] / 2
slider_button.rect.x = new_value_pos slider_button.rect.x = new_value_pos
value = new_value value = new_value
data_set(setting, value)
if setting == gui:
settings_data[gui] = value
elif setting == sensitivity:
settings_data[sensitivity] = value
elif setting == music:
settings_data[music]["volume"] = value
elif setting == sound:
settings_data[sound]["volume"] = value
return first_line, second_line, slider_button return first_line, second_line, slider_button
def data_set(setting, value):
if setting == gui:
settings_data[gui] = value
elif setting == music:
settings_data[music]["volume"] = value
update_music_volume()
elif setting == sound:
settings_data[sound]["volume"] = value
update_sound_volume()
with open(SETTINGS_FILE, "w") as settings_file:
json.dump(settings_data, settings_file, indent=2)
def play_music(): def play_music():
music_file = settings_data[music]["version"] music_file = settings_data[music]["version"]
volume = settings_data[music]["volume"] volume = settings_data[music]["volume"]
pygame.mixer.music.load("misc/" + music_file + ".mp3") pygame.mixer.music.load("misc/" + music_file + ".mp3")
pygame.mixer.music.set_volume(volume) pygame.mixer.music.set_volume(volume / 100)
pygame.mixer.music.play(-1) pygame.mixer.music.play(-1)
if settings_data[music]["on"] is True:
play_music()
def play_sound(): def play_sound():
sound_file = settings_data[sound]["version"] sound_file = settings_data[sound]["version"]
volume = settings_data[sound]["volume"] volume = settings_data[sound]["volume"]
current_sound = pygame.mixer.Sound("misc/" + sound_file + ".ogg") current_sound = pygame.mixer.Sound("misc/" + sound_file + ".ogg")
current_sound.set_volume(volume) current_sound.set_volume(volume / 100)
pygame.mixer.Sound.play(current_sound) return current_sound
current_sound = play_sound()
def update_music_volume():
volume = settings_data[music]["volume"]
pygame.mixer.music.set_volume(volume / 100)
def update_sound_volume():
volume = settings_data[sound]["volume"]
current_sound.set_volume(volume / 100)
def set_hue(): def set_hue():
@ -677,7 +719,7 @@ def set_hue():
settings_data[gui][x] = hue_value settings_data[gui][x] = hue_value
with open(SETTINGS_FILE, "w") as settings_file: with open(SETTINGS_FILE, "w") as settings_file:
json.dump(settings_data, settings_file) json.dump(settings_data, settings_file, indent=2)
def change_hue(image, hue): def change_hue(image, hue):
@ -912,6 +954,9 @@ real_time = elapsed_time
total_paused_time = 0 total_paused_time = 0
timer_button.disable() timer_button.disable()
if settings_data[music]["on"] is True:
play_music()
while run: while run:
background_image, current_buttons = data_check(current_mode) background_image, current_buttons = data_check(current_mode)
current_time = pygame.time.get_ticks() current_time = pygame.time.get_ticks()
@ -1064,7 +1109,7 @@ while run:
current_moves += 1 current_moves += 1
user_win = True user_win = True
print("clicked:", current_moves) print("clicked:", current_moves)
play_sound() pygame.mixer.Sound.play(current_sound)
if pressed_button == hint_button: if pressed_button == hint_button:
screen.blit(original_image, non_movable_area) screen.blit(original_image, non_movable_area)
@ -1113,19 +1158,19 @@ while run:
for index, setting_name in enumerate(settings_data): for index, setting_name in enumerate(settings_data):
if setting_name != "keybinds": if setting_name != "keybinds":
y = f_line[3] - scroll_offset + index * (cons[0] + space_between_settings) y = f_line[3] - scroll_offset + index * (cons[0] + spaces[2]) - spaces[1]
value = settings_data[setting_name] value = settings_data[setting_name]
if setting_name in [gui, sensitivity, music, sound]: if setting_name in [gui, music, sound]:
if setting_name in [music, sound]: if setting_name in [music, sound]:
value = value["volume"] value = value["volume"]
render_settings_text(setting_name.upper(), render_settings_text(setting_name.upper(),
(settings_x_position // 2 + 9, y - settings_y_offset), screen, value) (settings_x_position // 2 + spaces[4], y), screen, value)
else: else:
render_settings_text(setting_name.upper(), render_settings_text(setting_name.upper(),
(settings_x_position // 2 + 9, y - settings_y_offset), screen) (settings_x_position // 2 + spaces[4], y), screen)
if setting_name == gui: if setting_name == gui:
gui_color_slider = slider((settings_x_position // 2 - 26, y + 8), 360, value, active_sliders, setting_name) gui_color_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 360, value, active_sliders, setting_name)
for slider_part in gui_color_slider: for slider_part in gui_color_slider:
slider_part.draw(screen) slider_part.draw(screen)
if dragging and gui_color_slider[2].rect.collidepoint(mouse_pos): if dragging and gui_color_slider[2].rect.collidepoint(mouse_pos):
@ -1133,17 +1178,8 @@ while run:
setting = setting_name setting = setting_name
elif not dragging: elif not dragging:
active_sliders[gui] = False active_sliders[gui] = False
elif setting_name == sensitivity:
sensitivity_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name)
for slider_part in sensitivity_slider:
slider_part.draw(screen)
if dragging and sensitivity_slider[2].rect.collidepoint(mouse_pos):
active_sliders[sensitivity] = True
setting = setting_name
elif not dragging:
active_sliders[sensitivity] = False
elif setting_name == music: elif setting_name == music:
music_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name) music_volume_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 100, value, active_sliders, setting_name)
for slider_part in music_volume_slider: for slider_part in music_volume_slider:
slider_part.draw(screen) slider_part.draw(screen)
if dragging and music_volume_slider[2].rect.collidepoint(mouse_pos): if dragging and music_volume_slider[2].rect.collidepoint(mouse_pos):
@ -1152,7 +1188,7 @@ while run:
elif not dragging: elif not dragging:
active_sliders[music] = False active_sliders[music] = False
elif setting_name == sound: elif setting_name == sound:
sound_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name) sound_volume_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 100, value, active_sliders, setting_name)
for slider_part in sound_volume_slider: for slider_part in sound_volume_slider:
slider_part.draw(screen) slider_part.draw(screen)
if dragging and sound_volume_slider[2].rect.collidepoint(mouse_pos): if dragging and sound_volume_slider[2].rect.collidepoint(mouse_pos):

View File

@ -5,10 +5,10 @@
0, 0,
0, 0,
0, 0,
50, 93,
"00:00:49", "00:01:05",
"00:00:24", "00:00:40",
8 0
], ],
"2.png": [ "2.png": [
0, 0,

View File

@ -1 +1 @@
{"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[2, 12, 1, 3], [7, 5, 15, 11], [13, 10, 9, 0], [14, 6, 4, 8]], "selected_image": "images/albums/Original images/4.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}} {"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[13, 2, 9, 12], [4, 1, 6, 8], [5, 3, 10, 15], [14, 7, 11, 0]], "selected_image": "images/albums/Original images/1.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}}

View File

@ -1,17 +1,16 @@
{ {
"size": "medium" , "size": "big",
"style": "classic", "style": "classic",
"grid": "4x4", "grid": "4x4",
"gui color": 0, "gui color": 0,
"sensitivity": 1,
"music": { "music": {
"on": true, "on": true,
"volume": 30, "volume": 0,
"version": "serenity" "version": "serenity"
}, },
"sound": { "sound": {
"on": true, "on": true,
"volume": 40, "volume": 16,
"version": "wood" "version": "wood"
}, },
"display": "time", "display": "time",