Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.7 KiB |
126
main.py
|
@ -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):
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"}}
|
|
@ -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",
|
||||||
|
|