11from grid import Grid
22from blocks import *
3- import random , pygame
3+ import random
4+ import pygame
45
56class Game :
67 def __init__ (self ):
@@ -10,42 +11,28 @@ def __init__(self):
1011 self .next_block = self .get_random_block ()
1112 self .game_over = False
1213 self .score = 0
13- self .rotate_sound = pygame .mixer .Sound ('Sounds/rotate.ogg' )
14- self .clear_sound = pygame .mixer .Sound ('Sounds/clear.ogg' )
15- pygame .mixer .music .load ('Sounds/music.ogg' )
14+ self .rotate_sound = pygame .mixer .Sound ("Sounds/rotate.ogg" )
15+ self .clear_sound = pygame .mixer .Sound ("Sounds/clear.ogg" )
16+
17+ pygame .mixer .music .load ("Sounds/music.ogg" )
1618 pygame .mixer .music .play (- 1 )
1719
20+ def update_score (self , lines_cleared , move_down_points ):
21+ if lines_cleared == 1 :
22+ self .score += 100
23+ elif lines_cleared == 2 :
24+ self .score += 300
25+ elif lines_cleared == 3 :
26+ self .score += 500
27+ self .score += move_down_points
28+
1829 def get_random_block (self ):
19- if len (self .blocks )== 0 :
30+ if len (self .blocks ) == 0 :
2031 self .blocks = [IBlock (), JBlock (), LBlock (), OBlock (), SBlock (), TBlock (), ZBlock ()]
2132 block = random .choice (self .blocks )
2233 self .blocks .remove (block )
2334 return block
2435
25- def block_inside (self ):
26- tiles = self .current_block .get_cells_positions ()
27- for tile in tiles :
28- if self .grid .is_inside (tile .row , tile .column ) == False :
29- return False
30- return True
31-
32- def block_fits (self ):
33- tiles = self .current_block .get_cells_positions ()
34- for tile in tiles :
35- if self .grid .is_empty (tile .row , tile .column ) == False :
36- return False
37- return True
38-
39- def draw (self , screen ):
40- self .grid .draw (screen )
41- self .current_block .draw (screen , 11 , 11 )
42- if self .next_block .id == 3 :
43- self .next_block .draw (screen , 255 , 290 )
44- elif self .next_block .id == 4 :
45- self .next_block .draw (screen , 255 , 280 )
46- else :
47- self .next_block .draw (screen , 270 , 270 )
48-
4936 def move_left (self ):
5037 self .current_block .move (0 , - 1 )
5138 if self .block_inside () == False or self .block_fits () == False :
@@ -62,40 +49,54 @@ def move_down(self):
6249 self .current_block .move (- 1 , 0 )
6350 self .lock_block ()
6451
65- def rotate (self ):
66- self .current_block .rotate ()
67- if self .block_inside () == False or self .block_fits () == False :
68- self .current_block .undo_rotation ()
69- else :
70- self .rotate_sound .play ()
71-
7252 def lock_block (self ):
73- tiles = self .current_block .get_cells_positions ()
53+ tiles = self .current_block .get_cell_positions ()
7454 for position in tiles :
7555 self .grid .grid [position .row ][position .column ] = self .current_block .id
56+ self .current_block = self .next_block
57+ self .next_block = self .get_random_block ()
7658 rows_cleared = self .grid .clear_full_rows ()
7759 if rows_cleared > 0 :
7860 self .clear_sound .play ()
7961 self .update_score (rows_cleared , 0 )
80- self .current_block = self .next_block
81- self .next_block = self .get_random_block ()
8262 if self .block_fits () == False :
8363 self .game_over = True
8464
85- def update_score (self , lines_cleared , move_down_points ):
86-
87- if lines_cleared == 1 :
88- self .score += 100
89- elif lines_cleared == 2 :
90- self .score += 300
91- elif lines_cleared == 3 :
92- self .score += 500
93-
94- self .score += move_down_points
95-
9665 def reset (self ):
9766 self .grid .reset ()
9867 self .blocks = [IBlock (), JBlock (), LBlock (), OBlock (), SBlock (), TBlock (), ZBlock ()]
9968 self .current_block = self .get_random_block ()
10069 self .next_block = self .get_random_block ()
101- self .score = 0
70+ self .score = 0
71+
72+ def block_fits (self ):
73+ tiles = self .current_block .get_cell_positions ()
74+ for tile in tiles :
75+ if self .grid .is_empty (tile .row , tile .column ) == False :
76+ return False
77+ return True
78+
79+ def rotate (self ):
80+ self .current_block .rotate ()
81+ if self .block_inside () == False or self .block_fits () == False :
82+ self .current_block .undo_rotation ()
83+ else :
84+ self .rotate_sound .play ()
85+
86+ def block_inside (self ):
87+ tiles = self .current_block .get_cell_positions ()
88+ for tile in tiles :
89+ if self .grid .is_inside (tile .row , tile .column ) == False :
90+ return False
91+ return True
92+
93+ def draw (self , screen ):
94+ self .grid .draw (screen )
95+ self .current_block .draw (screen , 11 , 11 )
96+
97+ if self .next_block .id == 3 :
98+ self .next_block .draw (screen , 255 , 290 )
99+ elif self .next_block .id == 4 :
100+ self .next_block .draw (screen , 255 , 280 )
101+ else :
102+ self .next_block .draw (screen , 270 , 270 )
0 commit comments