俄罗斯方块(2)
import?pygame
from?pygame?import?locals
import?random
pygame.init()
score=0
grid_size=20
grid_num_width=15
grid_num_height=25
FPS=30
count=0
screen=pygame.display.set_mode((460,500))
pygame.display.set_caption("俄罗斯方块")
clock=pygame.time.Clock()
bacground=pygame.image.load("bg.png")
font=pygame.font.Font("STKAITI.TTF",60)
O=[[(0,0),(0,1),(1,0),(1,1)]]
I=[[(0,-1),(0,0),(0,1),(0,2)],[(-1,0),(0,0),(1,0),(2,0)]]
Z=[[(0,-1),(0,0),(1,0),(1,1)],[(-1,0),(0,0),(0,-1),(1,-1)]]
S=[[(-1,0),(0,0),(0,1),(1,1)],[(1,-1),(1,0),(0,0),(0,1)]]
T=[[(0,-1),(0,0),(0,1),(-1,0)],[(-1,0),(0,0),(1,0),(0,1)],[(0,-1),(0,0),(0,1),(1,0)],[(-1,0),(0,0),(1,0),(0,-1)]]
J=[[(-1,0),(0,0),(1,0),(1,-1)],[(0,-1),(0,0),(0,1),(-1,-1)],[(-1,0),(0,0),(1,0),(-1,1)],[(0,-1),(0,0),(0,1),(1,1)]]
L=[[(-1,0),(0,0),(1,0),(1,1)],[(0,-1),(0,0),(0,1),(1,-1)],[(-1,0),(0,0),(1,0),(-1,-1)],[(0,-1),(0,0),(0,1),(-1,1)]]
shape_list=[I,J,L,O,S,T,Z]
cube_colors=[(204,153,153),(102,102,153),(153,0,102),(255,204,0),(204,0,51),(255,0,51),(0,102,153),(153,0,51),(204,255,102),(255,153,0)]
center=[2,8]
shape=random.choice(shape_list)
index=random.randint(0,len(shape)-1)
current_shape=shape[index]
color=random.choice(cube_colors)
def?check(center):
for?cube?in?current_shape:
cube=(cube[0]+center[0],cube[1]+center[1])
if?cube[0]<1?or?cube[1]<?1?or?cube[0]?>?grid_num_height?or?cube[1]?>?grid_num_width:
return?False
while?True:
for?event?in?pygame.event.get():
if?event.type==locals.QUIT:
exit()
if?event.type==locals.KEYDOWN:
if?event.key==locals.K_RIGHT:
center[1]=center[1]+1
if?check(center)==False:
center[1]=center[1]-1
elif?event.key==locals.K_LEFT:
center[1]=center[1]-1
if?check(center)==False:
center[1]=center[1]+1
elif?event.key==locals.K_DOWN:
center[0]=center[0]+1
if?check(center)==False:
center[0]=center[0]-1
elif?event.key==locals.K_UP:
old_index=index
index?+=1
if?index?>=?len(shape):
index=0
current_shape=shape[index]
if?check(center)==False:
index=old_index
current_shape=shape[index]
count+=1
if?count?%?FPS?==?0:
center[0]=center[0]+1
if?check(center)==False:
center[0]=center[0]-1
screen.blit(bacground,(0,0))
current_pos=[]
for?cube?in?current_shape:
pos=(cube[0]+center[0],cube[1]+center[1])
current_pos.append(pos)
for?cube?in?current_pos:
pygame.draw.rect(screen,color,(cube[1]*20-20,cube[0]*20-20,20,20),0)
pygame.draw.rect(screen,(255,255,255),(cube[1]*20-20,cube[0]*20-20,20,20),1)
my_font=pygame.font.Font("STKAITI.TTF",18)
score_text=font.render(str(score),True,(0,0,0))
screen.blit(score_text,(350,70))
pygame.display.update()
clock.tick(FPS)