|
运行效果
然后不动了
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
程序
- import pygame, sys, time
- BLACK = (0, 0, 0)
- WHITE = (255, 255, 255)
- RED = (255, 0, 0)
- GREEN = (0, 255, 0)
- BLUE = (0, 0, 255)
- blockSize = 20
- height = 640
- width = 400
- oldlist = []
- oldrectList = []
- newrectList = []
- pygame.init()
- screen = pygame.display.set_mode((width, height))
- pygame.display.set_caption("Tetris")
- def rect(x1, y1, x2, y2, color=BLUE, fill=0, n_or_o='o'): # 方形(等同于pygame.draw.rect)
- if n_or_o == 'o':
- oldrectList.append(pygame.Rect(x1, y1, x2, y2))
- elif n_or_o == 'n':
- newrectList.append(pygame.Rect(x1, y1, x2, y2))
- pygame.draw.rect(screen, color, (x1, y1, x2, y2), fill)
- def line(start_pos, end_pos, color=BLACK): # 线(等同于pygame.draw.line)
- pygame.draw.line(screen, color, start_pos, end_pos, 1)
- def draw_screen(): # 绘制屏幕
- for i in range(0, height, blockSize):
- line((0, i), (height, i))
- for i in range(0, width, blockSize):
- line((i, 0), (i, height))
- def o(): # 静态o形(初始化o形)
- global xy1, xy2, xy3, xy4
- # ① ② ③ ④ 列举坐标
- xy1 = [0 ,0 , blockSize, blockSize]
- xy2 = [blockSize,0 , blockSize, blockSize]
- xy3 = [0 , blockSize, blockSize, blockSize]
- xy4 = [blockSize, blockSize, blockSize, blockSize]
- def o_live(): # 动态o形(移动中的o形)
- global xy1, xy2, xy3, xy4, fun
- fun = False
- rect(xy1[0], xy1[1], xy1[2], xy1[3], n_or_o='n') # 绘制方块
- rect(xy2[0], xy2[1], xy2[2], xy2[3], n_or_o='n')
- rect(xy3[0], xy3[1], xy3[2], xy3[3], n_or_o='n')
- rect(xy4[0], xy4[1], xy4[2], xy4[3], n_or_o='n')
- draw_screen() # 绘制屏幕
- if xy4[1] == 620:
- for i in [xy1, xy2, xy3, xy4]:
- oldlist.append(i)
- o()
- else:
- try:
- for i in oldrectList:
- if i.collidelist(newrectList):
- for j in [xy1, xy2, xy3, xy4]:
- oldlist.append(j)
- o()
- break
- except IndexError:
- pass
- xy1[1] += blockSize # 下移
- xy2[1] += blockSize
- xy3[1] += blockSize
- xy4[1] += blockSize
- if key[pygame.K_LEFT]: # 左
- xy1[0] -= blockSize
- xy2[0] -= blockSize
- xy3[0] -= blockSize
- xy4[0] -= blockSize
- elif key[pygame.K_RIGHT]: # 右
- xy1[0] += blockSize
- xy2[0] += blockSize
- xy3[0] += blockSize
- xy4[0] += blockSize
- elif key[pygame.K_DOWN]: # 下移*2
- xy1[1] += blockSize
- xy2[1] += blockSize
- xy3[1] += blockSize
- xy4[1] += blockSize
- o()
- while True:
- for event in pygame.event.get(): # 事件检测
- if event.type == pygame.QUIT: # 退出
- pygame.quit()
- sys.exit()
- key = pygame.key.get_pressed()
- screen.fill(WHITE) # 清空屏幕
- for i in oldlist:
- rect(i[0], i[1], i[2], i[3])
- o_live()
- time.sleep(0.1) # 等待
- pygame.display.update() # 刷新
复制代码
|
|