Levels 16 - 30 in Modern guideline
This commit is contained in:
parent
03e06a5b77
commit
278afa7829
93
pytris.py
93
pytris.py
|
@ -4,7 +4,7 @@ import pygame, random, datetime
|
||||||
from string import Template
|
from string import Template
|
||||||
|
|
||||||
BLOCK_SIZE = 30
|
BLOCK_SIZE = 30
|
||||||
GUIDELINES = ["Current", "NES like"]
|
GUIDELINES = ["Modern", "Classic"]
|
||||||
MODES = ["Endless", "Time limited", "Lines limited"]
|
MODES = ["Endless", "Time limited", "Lines limited"]
|
||||||
TIME_LIMITS_SEC = [120, 180, 300, 600, 1800, 3600, 86400]
|
TIME_LIMITS_SEC = [120, 180, 300, 600, 1800, 3600, 86400]
|
||||||
LINES_LIMITS = [40, 80, 120, 150, 300, 500, 1000]
|
LINES_LIMITS = [40, 80, 120, 150, 300, 500, 1000]
|
||||||
|
@ -43,7 +43,7 @@ def strfdelta(tdelta, fmt):
|
||||||
|
|
||||||
|
|
||||||
class TetrisGameplay:
|
class TetrisGameplay:
|
||||||
def __init__(self, mode=0, target=1, buffer_zone=20, srs=True, lock_delay=True, seven_bag=True, ghost_piece=True, hold=True, hard_drop=True, handling=(167, 33), nes_mechanics=False, next_len=4):
|
def __init__(self, mode=0, lvl=1, buffer_zone=20, srs=True, lock_delay=True, seven_bag=True, ghost_piece=True, hold=True, hard_drop=True, handling=(167, 33), nes_mechanics=False, next_len=4):
|
||||||
self.buffer_y = buffer_zone
|
self.buffer_y = buffer_zone
|
||||||
self.FIELD = list(range(20 + buffer_zone))
|
self.FIELD = list(range(20 + buffer_zone))
|
||||||
y = 0
|
y = 0
|
||||||
|
@ -293,17 +293,19 @@ class TetrisGameplay:
|
||||||
self.spin_is_kick_t_piece = False
|
self.spin_is_kick_t_piece = False
|
||||||
self.current_spin_id = 0
|
self.current_spin_id = 0
|
||||||
self.lock_delay_run = False
|
self.lock_delay_run = False
|
||||||
self.lock_delay_frames = 30
|
|
||||||
if self.mode == 0:
|
if self.mode == 0:
|
||||||
self.level = target
|
self.level = lvl
|
||||||
self.start_level = target
|
self.start_level = lvl
|
||||||
else:
|
else:
|
||||||
self.level = 1
|
self.level = 1
|
||||||
self.start_level = 1
|
self.start_level = 1
|
||||||
|
self.level_limit = 30
|
||||||
|
self.lock_delay_f_limit = min(30, 90 - 3 * self.level)
|
||||||
|
self.lock_delay_frames = self.lock_delay_f_limit
|
||||||
if self.mode == 1:
|
if self.mode == 1:
|
||||||
self.target = TIME_LIMITS_SEC[target]
|
self.lvl = TIME_LIMITS_SEC[lvl]
|
||||||
elif self.mode == 2:
|
elif self.mode == 2:
|
||||||
self.target = LINES_LIMITS[target]
|
self.lvl = LINES_LIMITS[lvl]
|
||||||
self.lines_for_level_up = self.gravity_and_lines_table()[1]
|
self.lines_for_level_up = self.gravity_and_lines_table()[1]
|
||||||
self.game_over = False
|
self.game_over = False
|
||||||
|
|
||||||
|
@ -403,48 +405,49 @@ class TetrisGameplay:
|
||||||
if t_spin:
|
if t_spin:
|
||||||
difficult = True
|
difficult = True
|
||||||
if cleared == 1:
|
if cleared == 1:
|
||||||
self.score[10] += 800 * min(self.level, 15)
|
self.score[10] += 800 * min(self.level, self.level_limit)
|
||||||
self.score_up += 800 * min(self.level, 15)
|
self.score_up += 800 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 8
|
self.for_what_id = 8
|
||||||
elif cleared == 2:
|
elif cleared == 2:
|
||||||
self.score[11] += 1200 * min(self.level, 15)
|
self.score[11] += 1200 * min(self.level, self.level_limit)
|
||||||
self.score_up += 1200 * min(self.level, 15)
|
self.score_up += 1200 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 9
|
self.for_what_id = 9
|
||||||
elif cleared == 3:
|
elif cleared == 3:
|
||||||
self.score[12] += 1600 * min(self.level, 15)
|
self.score[12] += 1600 * min(self.level, self.level_limit)
|
||||||
self.score_up += 1600 * min(self.level, 15)
|
self.score_up += 1600 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 10
|
self.for_what_id = 10
|
||||||
elif t_spin_mini:
|
elif t_spin_mini:
|
||||||
difficult = True
|
difficult = True
|
||||||
if cleared == 1:
|
if cleared == 1:
|
||||||
self.score[7] += 200 * min(self.level, 15)
|
self.score[7] += 200 * min(self.level, self.level_limit)
|
||||||
self.score_up += 200 * min(self.level, 15)
|
self.score_up += 200 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 5
|
self.for_what_id = 5
|
||||||
elif cleared == 2:
|
elif cleared == 2:
|
||||||
self.score[8] += 400 * min(self.level, 15)
|
self.score[8] += 400 * min(self.level, self.level_limit)
|
||||||
self.score_up += 400 * min(self.level, 15)
|
self.score_up += 400 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 6
|
self.for_what_id = 6
|
||||||
else:
|
else:
|
||||||
if cleared == 1:
|
if cleared == 1:
|
||||||
self.score[2] += 100 * min(self.level, 15)
|
self.score[2] += 100 * min(self.level, self.level_limit)
|
||||||
self.score_up += 100 * min(self.level, 15)
|
self.score_up += 100 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 0
|
self.for_what_id = 0
|
||||||
elif cleared == 2:
|
elif cleared == 2:
|
||||||
self.score[3] += 300 * min(self.level, 15)
|
self.score[3] += 300 * min(self.level, self.level_limit)
|
||||||
self.score_up += 300 * min(self.level, 15)
|
self.score_up += 300 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 1
|
self.for_what_id = 1
|
||||||
elif cleared == 3:
|
elif cleared == 3:
|
||||||
self.score[4] += 500 * min(self.level, 15)
|
self.score[4] += 500 * min(self.level, self.level_limit)
|
||||||
self.score_up += 500 * min(self.level, 15)
|
self.score_up += 500 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 2
|
self.for_what_id = 2
|
||||||
elif cleared == 4:
|
elif cleared == 4:
|
||||||
self.score[5] += 800 * min(self.level, 15)
|
self.score[5] += 800 * min(self.level, self.level_limit)
|
||||||
self.score_up += 800 * min(self.level, 15)
|
self.score_up += 800 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 3
|
self.for_what_id = 3
|
||||||
difficult = True
|
difficult = True
|
||||||
if sum(self.cleared_lines) >= self.lines_for_level_up and self.level != 15:
|
if sum(self.cleared_lines) >= self.lines_for_level_up and self.level != self.level_limit:
|
||||||
self.level += 1
|
self.level += 1
|
||||||
self.lines_for_level_up += 10
|
self.lines_for_level_up += 10
|
||||||
|
self.lock_delay_f_limit = min(30, 90 - 3 * self.level)
|
||||||
if difficult:
|
if difficult:
|
||||||
self.back_to_back += 1
|
self.back_to_back += 1
|
||||||
if self.back_to_back > 0:
|
if self.back_to_back > 0:
|
||||||
|
@ -453,19 +456,19 @@ class TetrisGameplay:
|
||||||
else:
|
else:
|
||||||
self.back_to_back = -1
|
self.back_to_back = -1
|
||||||
if self.combo > 0:
|
if self.combo > 0:
|
||||||
self.score[13] += 50 * self.combo * min(self.level, 15)
|
self.score[13] += 50 * self.combo * min(self.level, self.level_limit)
|
||||||
self.score_up += 50 * self.combo * min(self.level, 15)
|
self.score_up += 50 * self.combo * min(self.level, self.level_limit)
|
||||||
self.for_what_delay = 3
|
self.for_what_delay = 3
|
||||||
else:
|
else:
|
||||||
self.combo = -1
|
self.combo = -1
|
||||||
if t_spin:
|
if t_spin:
|
||||||
self.score[9] += 400 * min(self.level, 15)
|
self.score[9] += 400 * min(self.level, self.level_limit)
|
||||||
self.score_up = 400 * min(self.level, 15)
|
self.score_up = 400 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 7
|
self.for_what_id = 7
|
||||||
self.for_what_delay = 3
|
self.for_what_delay = 3
|
||||||
elif t_spin_mini:
|
elif t_spin_mini:
|
||||||
self.score[6] += 100 * min(self.level, 15)
|
self.score[6] += 100 * min(self.level, self.level_limit)
|
||||||
self.score_up = 100 * min(self.level, 15)
|
self.score_up = 100 * min(self.level, self.level_limit)
|
||||||
self.for_what_id = 4
|
self.for_what_id = 4
|
||||||
self.for_what_delay = 3
|
self.for_what_delay = 3
|
||||||
return 0
|
return 0
|
||||||
|
@ -713,7 +716,7 @@ class TetrisGameplay:
|
||||||
return y
|
return y
|
||||||
|
|
||||||
def reset_lock_delay(self):
|
def reset_lock_delay(self):
|
||||||
self.lock_delay_frames = 30
|
self.lock_delay_frames = self.lock_delay_f_limit
|
||||||
self.lock_delay_run = False
|
self.lock_delay_run = False
|
||||||
|
|
||||||
def move_down(self, instant=False):
|
def move_down(self, instant=False):
|
||||||
|
@ -761,7 +764,7 @@ class TetrisGameplay:
|
||||||
if k is not None:
|
if k is not None:
|
||||||
window_x = 130 + BLOCK_SIZE * k1
|
window_x = 130 + BLOCK_SIZE * k1
|
||||||
window_y = (BLOCK_SIZE * 2 + 5) + BLOCK_SIZE * i1
|
window_y = (BLOCK_SIZE * 2 + 5) + BLOCK_SIZE * i1
|
||||||
pygame.draw.rect(win, (int(k.color[0]*self.lock_delay_frames/30), int(k.color[1]*self.lock_delay_frames/30), int(k.color[2]*self.lock_delay_frames/30)), (window_x, window_y, BLOCK_SIZE, BLOCK_SIZE))
|
pygame.draw.rect(win, (int(k.color[0]*self.lock_delay_frames/max(self.lock_delay_f_limit, 1)), int(k.color[1]*self.lock_delay_frames/max(self.lock_delay_f_limit, 1)), int(k.color[2]*self.lock_delay_frames/max(self.lock_delay_f_limit, 1))), (window_x, window_y, BLOCK_SIZE, BLOCK_SIZE))
|
||||||
pygame.draw.rect(win, (0, 0, 0), (window_x, window_y, BLOCK_SIZE, BLOCK_SIZE), width=2)
|
pygame.draw.rect(win, (0, 0, 0), (window_x, window_y, BLOCK_SIZE, BLOCK_SIZE), width=2)
|
||||||
k1 += 1
|
k1 += 1
|
||||||
k1 = self.current_posx
|
k1 = self.current_posx
|
||||||
|
@ -917,7 +920,7 @@ class TetrisGameplay:
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
|
|
||||||
|
|
||||||
class NesLikeTetris(TetrisGameplay):
|
class ClassicTetris(TetrisGameplay):
|
||||||
def __init__(self, mode=0, target=0):
|
def __init__(self, mode=0, target=0):
|
||||||
super().__init__(mode, target, 2, False, False, False, False, False, False, (267, 100), True, 1)
|
super().__init__(mode, target, 2, False, False, False, False, False, False, (267, 100), True, 1)
|
||||||
self.TETROMINOS = [
|
self.TETROMINOS = [
|
||||||
|
@ -1330,7 +1333,6 @@ def draw_main_menu(selected, sel_gl, sel_md, sel_trg):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
GAME_RUN = True
|
GAME_RUN = True
|
||||||
selected_level = [1, 0]
|
|
||||||
selected_gl = 0
|
selected_gl = 0
|
||||||
selected_mode = 0 # 0 - Endless; 1 - Time limit; 2 - Lines limit
|
selected_mode = 0 # 0 - Endless; 1 - Time limit; 2 - Lines limit
|
||||||
selected_target = 0
|
selected_target = 0
|
||||||
|
@ -1367,9 +1369,6 @@ def main():
|
||||||
pressed_keys.remove(i)
|
pressed_keys.remove(i)
|
||||||
keys = pygame.key.get_pressed()
|
keys = pygame.key.get_pressed()
|
||||||
if state == "main menu":
|
if state == "main menu":
|
||||||
if selected_mode == 0:
|
|
||||||
draw_main_menu(menu_select, selected_gl, selected_mode, selected_level[selected_gl])
|
|
||||||
else:
|
|
||||||
draw_main_menu(menu_select, selected_gl, selected_mode, selected_target)
|
draw_main_menu(menu_select, selected_gl, selected_mode, selected_target)
|
||||||
if pygame.K_RETURN in pressed_keys:
|
if pygame.K_RETURN in pressed_keys:
|
||||||
if menu_select == 0:
|
if menu_select == 0:
|
||||||
|
@ -1385,10 +1384,10 @@ def main():
|
||||||
selected_mode -= 1
|
selected_mode -= 1
|
||||||
selected_target = 0
|
selected_target = 0
|
||||||
if selected_mode == 0:
|
if selected_mode == 0:
|
||||||
if pygame.K_RIGHT in pressed_keys and menu_select == 2 and ((selected_gl == 0 and selected_level[selected_gl] != 15) or (selected_gl == 1 and selected_level[selected_gl] != 29)):
|
if pygame.K_RIGHT in pressed_keys and menu_select == 2 and selected_target != 30:
|
||||||
selected_level[selected_gl] += 1
|
selected_target += 1
|
||||||
elif pygame.K_LEFT in pressed_keys and menu_select == 2 and ((selected_gl == 0 and selected_level[selected_gl] != 1) or (selected_gl == 1 and selected_level[selected_gl] != 0)):
|
elif pygame.K_LEFT in pressed_keys and menu_select == 2 and selected_target != 0:
|
||||||
selected_level[selected_gl] -= 1
|
selected_target -= 1
|
||||||
elif selected_mode == 1:
|
elif selected_mode == 1:
|
||||||
if pygame.K_RIGHT in pressed_keys and menu_select == 2 and selected_target != len(TIME_LIMITS_SEC)-1:
|
if pygame.K_RIGHT in pressed_keys and menu_select == 2 and selected_target != len(TIME_LIMITS_SEC)-1:
|
||||||
selected_target += 1
|
selected_target += 1
|
||||||
|
@ -1408,16 +1407,10 @@ def main():
|
||||||
elif state == "pregameplay":
|
elif state == "pregameplay":
|
||||||
ticks_before_stats = 300
|
ticks_before_stats = 300
|
||||||
delay_before_spawn = -1
|
delay_before_spawn = -1
|
||||||
if selected_mode == 0:
|
|
||||||
if selected_gl == 0:
|
|
||||||
field = TetrisGameplay(selected_mode, selected_level[selected_gl])
|
|
||||||
elif selected_gl == 1:
|
|
||||||
field = NesLikeTetris(selected_mode, selected_level[selected_gl])
|
|
||||||
else:
|
|
||||||
if selected_gl == 0:
|
if selected_gl == 0:
|
||||||
field = TetrisGameplay(selected_mode, selected_target)
|
field = TetrisGameplay(selected_mode, selected_target)
|
||||||
elif selected_gl == 1:
|
elif selected_gl == 1:
|
||||||
field = NesLikeTetris(selected_mode, selected_target)
|
field = ClassicTetris(selected_mode, selected_target)
|
||||||
pygame.key.set_repeat(field.handling[0], field.handling[1])
|
pygame.key.set_repeat(field.handling[0], field.handling[1])
|
||||||
state = "gameplay"
|
state = "gameplay"
|
||||||
elif state == "gameplay":
|
elif state == "gameplay":
|
||||||
|
|
7
test.py
7
test.py
|
@ -1,5 +1,8 @@
|
||||||
def curve(lvl):
|
def curve(lvl):
|
||||||
return 1/(0.8-((lvl-1)*0.007))**(lvl-1)*0.016666
|
return 1/(0.8-((lvl-1)*0.007))**(lvl-1)*0.016666
|
||||||
|
|
||||||
for i in range(0, 30):
|
def delay_curve(lvl):
|
||||||
print(i, curve(i))
|
return min(30, 90-3*lvl)
|
||||||
|
|
||||||
|
for i in range(0, 31):
|
||||||
|
print(i, curve(i), delay_curve(i))
|
Loading…
Reference in New Issue