找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1194|回复: 0

[求助] 求助!这段代码为何运行效果不对?

2

主题

5

帖子

5

积分

贫民

积分
5
vinewood 发表于 2021-10-4 21:24:32 | 显示全部楼层 |阅读模式
运行效果

p1.jpg

然后不动了

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

程序

  1. import pygame, sys, time

  2. BLACK = (0, 0, 0)
  3. WHITE = (255, 255, 255)
  4. RED = (255, 0, 0)
  5. GREEN = (0, 255, 0)
  6. BLUE = (0, 0, 255)
  7. blockSize = 20
  8. height = 640
  9. width = 400
  10. oldlist = []
  11. oldrectList = []
  12. newrectList = []
  13. pygame.init()
  14. screen = pygame.display.set_mode((width, height))
  15. pygame.display.set_caption("Tetris")


  16. def rect(x1, y1, x2, y2, color=BLUE, fill=0, n_or_o='o'):             # 方形(等同于pygame.draw.rect)
  17.     if n_or_o == 'o':
  18.         oldrectList.append(pygame.Rect(x1, y1, x2, y2))
  19.     elif n_or_o == 'n':
  20.         newrectList.append(pygame.Rect(x1, y1, x2, y2))
  21.     pygame.draw.rect(screen, color, (x1, y1, x2, y2), fill)


  22. def line(start_pos, end_pos, color=BLACK):             # 线(等同于pygame.draw.line)
  23.     pygame.draw.line(screen, color, start_pos, end_pos, 1)


  24. def draw_screen():  # 绘制屏幕
  25.     for i in range(0, height, blockSize):
  26.         line((0, i), (height, i))
  27.     for i in range(0, width, blockSize):
  28.         line((i, 0), (i, height))


  29. def o():  # 静态o形(初始化o形)
  30.     global xy1, xy2, xy3, xy4
  31.     #     ①         ②           ③         ④        列举坐标
  32.     xy1 = [0        ,0         , blockSize, blockSize]
  33.     xy2 = [blockSize,0         , blockSize, blockSize]
  34.     xy3 = [0        , blockSize, blockSize, blockSize]
  35.     xy4 = [blockSize, blockSize, blockSize, blockSize]


  36. def o_live():  # 动态o形(移动中的o形)
  37.     global xy1, xy2, xy3, xy4, fun
  38.     fun = False

  39.     rect(xy1[0], xy1[1], xy1[2], xy1[3], n_or_o='n')  # 绘制方块
  40.     rect(xy2[0], xy2[1], xy2[2], xy2[3], n_or_o='n')
  41.     rect(xy3[0], xy3[1], xy3[2], xy3[3], n_or_o='n')
  42.     rect(xy4[0], xy4[1], xy4[2], xy4[3], n_or_o='n')

  43.     draw_screen()  # 绘制屏幕

  44.     if xy4[1] == 620:
  45.         for i in [xy1, xy2, xy3, xy4]:
  46.             oldlist.append(i)
  47.         o()
  48.     else:
  49.         try:
  50.             for i in oldrectList:
  51.                 if i.collidelist(newrectList):
  52.                     for j in [xy1, xy2, xy3, xy4]:
  53.                         oldlist.append(j)
  54.                         o()
  55.                     break
  56.         except IndexError:
  57.             pass
  58.         xy1[1] += blockSize  # 下移
  59.         xy2[1] += blockSize
  60.         xy3[1] += blockSize
  61.         xy4[1] += blockSize
  62.         if key[pygame.K_LEFT]:  # 左
  63.             xy1[0] -= blockSize
  64.             xy2[0] -= blockSize
  65.             xy3[0] -= blockSize
  66.             xy4[0] -= blockSize
  67.         elif key[pygame.K_RIGHT]:  # 右
  68.             xy1[0] += blockSize
  69.             xy2[0] += blockSize
  70.             xy3[0] += blockSize
  71.             xy4[0] += blockSize
  72.         elif key[pygame.K_DOWN]:  # 下移*2
  73.             xy1[1] += blockSize
  74.             xy2[1] += blockSize
  75.             xy3[1] += blockSize
  76.             xy4[1] += blockSize


  77. o()

  78. while True:
  79.     for event in pygame.event.get():  # 事件检测
  80.         if event.type == pygame.QUIT:  # 退出
  81.             pygame.quit()
  82.             sys.exit()
  83.         key = pygame.key.get_pressed()

  84.     screen.fill(WHITE)  # 清空屏幕

  85.     for i in oldlist:
  86.         rect(i[0], i[1], i[2], i[3])

  87.     o_live()

  88.     time.sleep(0.1)  # 等待

  89.     pygame.display.update()  # 刷新
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表