侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python和pygame实现简单俄罗斯方块游戏

Python  /  管理员 发布于 7年前   160

本文为大家分享了python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下

Github:Tetris

代码:

# -*- coding:utf-8 -*-import pygame, sys, random, copyfrom pygame.locals import *pygame.init()CubeWidth = 40CubeHeight = 40Column = 10Row = 20ScreenWidth = CubeWidth * (Column + 5)ScreenHeight = CubeHeight * RowScreenSize = (ScreenWidth, ScreenHeight)Screen = pygame.display.set_mode(ScreenSize, 0, 32)pygame.display.set_caption("Ly's Tetris")pygame.mixer.music.load('BackgroundMusic.ogg')pygame.mixer.music.play(-1, 0.0)ClickMusic = pygame.mixer.Sound('ClickMusic.wav')ExplodeMusic = pygame.mixer.Sound('Explode.wav')BackgroundImg = pygame.image.load('BackgroundImg.png').convert()PreImg = pygame.image.load('PreImg.png').convert()PStartImg = pygame.image.load('PStartImg.png').convert()ResultPreImg = pygame.image.load('GameResultPreBgImg.png').convert()RestartImg = pygame.image.load('GameResultRestBgImg.png').convert()ScoreHintFont = pygame.font.SysFont('arial', 50)ScoreFont = pygame.font.SysFont('arial', 40)ResultFont = pygame.font.SysFont('arial', 200)Aquamarine = (127, 255, 212)LightGoldenrod = (255, 236, 139)IndianRed = (255, 106, 106)DarkOrchid = (153, 50, 204)RoyalBlue = (72, 118, 255)DarkOrange = (255, 165, 0)Turquoise = (0, 245, 255)IsRect = []FPSClock = pygame.time.Clock()class I(): def __init__(self): self.Statu = '' self.Color = Aquamarine self.Body = [] x = random.randint(1, 2) if x == 1:  self.Statu = 'upright'  for i in range(4):  InitBody = pygame.Rect(160, i * 40, 40, 40)  self.Body.append(InitBody) elif x == 2:  self.Statu = 'horizon'  for i in range(4):  InitBody = pygame.Rect(120 + i * 40, 0, 40, 40)  self.Body.append(InitBody) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'upright':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top += 40  TempRotate[2].left += 40  TempRotate[2].top -= 40  TempRotate[3].left += 40 * 2  TempRotate[3].top -= 40 * 2  IsRotate = True  if TempRotate[0].left < 0:  IsRotate = False  if TempRotate[3].left > 360:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizon' else:  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top -= 40  TempRotate[2].left -= 40  TempRotate[2].top += 40  TempRotate[3].left -= 40 * 2  TempRotate[3].top += 40 * 2  IsRotate = True  if TempRotate[0].top < 0:  IsRotate = False  if TempRotate[3].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'upright'class O(): def __init__(self): self.Color = LightGoldenrod self.Body = [] for i in range(2):  InitBody = pygame.Rect(160, i * 40, 40, 40)  self.Body.append(InitBody) for i in range(2):  InitBody = pygame.Rect(200, i * 40, 40, 40)  self.Body.append(InitBody) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): passclass T(): def __init__(self): self.Statu = '' self.Color = IndianRed self.Body = [] x = random.randint(1, 4) if x == 1:  self.Statu = 'up'  self.Body.append(pygame.Rect(200, 0, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(160 + i * 40, 40, 40, 40)) elif x == 2:  self.Statu = 'left'  self.Body.append(pygame.Rect(160, 40, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(200, 80 - i * 40, 40, 40)) elif x == 3:  self.Statu = 'down'  self.Body.append(pygame.Rect(200, 80, 40, 40))  for i in range(2, -1, -1):  self.Body.append(pygame.Rect(160 + i * 40, 40, 40, 40)) elif x == 4:  self.Statu = 'right'  self.Body.append(pygame.Rect(240, 40, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(200, i * 40, 40, 40)) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'up':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top += 40  TempRotate[1].left += 40  TempRotate[1].top += 40  TempRotate[3].left -= 40  TempRotate[3].top -= 40  IsRotate = True  if TempRotate[1].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'left' elif self.Statu == 'left':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top += 40  TempRotate[1].left += 40  TempRotate[1].top -= 40  TempRotate[3].left -= 40  TempRotate[3].top += 40  IsRotate = True  if TempRotate[1].left > 360:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'down' elif self.Statu == 'down':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top -= 40  TempRotate[1].left -= 40  TempRotate[1].top -= 40  TempRotate[3].left += 40  TempRotate[3].top += 40  IsRotate = True  if TempRotate[1].top < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'right' elif self.Statu == 'right':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top -= 40  TempRotate[1].left -= 40  TempRotate[1].top += 40  TempRotate[3].left += 40  TempRotate[3].top -= 40  IsRotate = True  if TempRotate[1].top < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'up'class Z(): def __init__(self): self.Statu = '' self.Color = DarkOrchid self.Body = [] x = random.randint(1, 2) if x == 1:  self.Statu = 'horizon'  for i in range(2):  self.Body.append(pygame.Rect(120 + i * 40, 0, 40, 40))  for i in range(2):  self.Body.append(pygame.Rect(160 + i * 40, 40, 40, 40)) elif x == 2:  self.Statu = 'upright'  for i in range(2):  self.Body.append(pygame.Rect(200, i * 40, 40, 40))  for i in range(2):  self.Body.append(pygame.Rect(160, 40 + i * 40, 40, 40)) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'horizon':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40 * 2  TempRotate[1].left += 40  TempRotate[1].top += 40  TempRotate[3].left -= 40  TempRotate[3].top += 40  IsRotate = True  if TempRotate[3].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'upright' elif self.Statu == 'upright':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40 * 2  TempRotate[1].left -= 40  TempRotate[1].top -= 40  TempRotate[3].left += 40  TempRotate[3].top -= 40  IsRotate = True  if TempRotate[0].left < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizon'class S(): def __init__(self): self.Statu = '' self.Color = DarkOrchid self.Body = [] x = random.randint(1, 2) if x == 1:  self.Statu = 'horizon'  for i in range(2):  self.Body.append(pygame.Rect(200 - i * 40, 0, 40, 40))  for i in range(2):  self.Body.append(pygame.Rect(160 - i * 40, 40, 40, 40)) elif x == 2:  self.Statu = 'upright'  for i in range(2):  self.Body.append(pygame.Rect(120, i * 40, 40, 40))  for i in range(2):  self.Body.append(pygame.Rect(160, 40 + i * 40, 40, 40)) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'horizon':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40 * 2  TempRotate[1].left -= 40  TempRotate[1].top += 40  TempRotate[3].left += 40  TempRotate[3].top += 40  IsRotate = True  if TempRotate[3].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'upright' elif self.Statu == 'upright':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40 * 2  TempRotate[1].left += 40  TempRotate[1].top -= 40  TempRotate[3].left -= 40  TempRotate[3].top -= 40  IsRotate = True  if TempRotate[0].left > 360:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizon'class L(): def __init__(self): self.Statu = '' self.Color = DarkOrange self.Body = [] x = random.randint(1, 4) if x == 1:  self.Statu = 'horizonright'  self.Body.append(pygame.Rect(120, 0, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(120 + i * 40, 40, 40, 40)) elif x == 2:  self.Statu = 'uprightup'  self.Body.append(pygame.Rect(120, 80, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(160, 80 - i * 40, 40, 40)) elif x == 3:  self.Statu = 'horizonleft'  self.Body.append(pygame.Rect(200, 40, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(200 - i * 40, 0, 40, 40)) elif x == 4:  self.Statu = 'uprightdown'  self.Body.append(pygame.Rect(160, 0, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(120, i * 40, 40, 40)) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'horizonright':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top += 40  TempRotate[2].left -= 40  TempRotate[2].top -= 40  TempRotate[3].left -= 40 * 2  TempRotate[3].top -= 40 * 2  IsRotate = True  if TempRotate[0].left < 0:  IsRotate = False  if TempRotate[3].top < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'uprightup' elif self.Statu == 'uprightup':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top += 40  TempRotate[2].left -= 40  TempRotate[2].top += 40  TempRotate[3].left -= 40 * 2  TempRotate[3].top += 40 * 2  IsRotate = True  if TempRotate[3].left < 0:  IsRotate = False  if TempRotate[0].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizonleft' elif self.Statu == 'horizonleft':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top -= 40  TempRotate[2].left += 40  TempRotate[2].top += 40  TempRotate[3].left += 40 * 2  TempRotate[3].top += 40 * 2  IsRotate = True  if TempRotate[0].left > 360:  IsRotate = False  if TempRotate[3].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'uprightdown' elif self.Statu == 'uprightdown':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top -= 40  TempRotate[2].left += 40  TempRotate[2].top -= 40  TempRotate[3].left += 40 * 2  TempRotate[3].top -= 40 * 2  IsRotate = True  if TempRotate[0].top < 0:  IsRotate = False  if TempRotate[3].left > 360:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizonright'class J(): def __init__(self): self.Statu = '' self.Color = Turquoise self.Body = [] x = random.randint(1, 4) if x == 1:  self.Statu = 'horizonleft'  self.Body.append(pygame.Rect(200, 0, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(200 - i * 40, 40, 40, 40)) elif x == 2:  self.Statu = 'uprightup'  self.Body.append(pygame.Rect(240, 80, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(200, 80 - i * 40, 40, 40)) elif x == 3:  self.Statu = 'horizonright'  self.Body.append(pygame.Rect(120, 40, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(120 + i * 40, 0, 40, 40)) elif x == 4:  self.Statu = 'uprightdown'  self.Body.append(pygame.Rect(120, 0, 40, 40))  for i in range(3):  self.Body.append(pygame.Rect(160, i * 40, 40, 40)) def Fall(self): for rect in self.Body:  rect.top += 40 def IsFalled(self): for rect in self.Body:  if rect.top == 760:  return True  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:  return True def Move(self, Curkey): CanMoveFlag = True if Curkey == K_UP:  self.Rotate() elif Curkey == K_LEFT:  for rect in self.Body:  if rect.left == 0:   CanMoveFlag = not CanMoveFlag   break  elif IsRect[int(rect.top / 40) + 1][int(rect.left / 40) - 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left -= 40 elif Curkey == K_RIGHT:  for rect in self.Body:  if rect.left == 360:   CanMoveFlag = not CanMoveFlag   break  if IsRect[int(rect.top / 40) + 1][int(rect.left / 40) + 1]:   CanMoveFlag = not CanMoveFlag   break  if CanMoveFlag:  for rect in self.Body:   rect.left += 40 def Rotate(self): if self.Statu == 'horizonleft':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top += 40  TempRotate[2].left += 40  TempRotate[2].top -= 40  TempRotate[3].left += 40 * 2  TempRotate[3].top -= 40 * 2  IsRotate = True  if TempRotate[0].left > 360:  IsRotate = False  if TempRotate[3].top < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'uprightup' elif self.Statu == 'uprightup':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top += 40  TempRotate[2].left += 40  TempRotate[2].top += 40  TempRotate[3].left += 40 * 2  TempRotate[3].top += 40 * 2  IsRotate = True  if TempRotate[3].left > 360:  IsRotate = False  if TempRotate[0].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizonright' elif self.Statu == 'horizonright':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left -= 40  TempRotate[0].top -= 40  TempRotate[2].left -= 40  TempRotate[2].top += 40  TempRotate[3].left -= 40 * 2  TempRotate[3].top += 40 * 2  IsRotate = True  if TempRotate[0].left < 0:  IsRotate = False  if TempRotate[3].top > 760:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'uprightdown' elif self.Statu == 'uprightdown':  TempRotate = copy.deepcopy(self.Body)  TempRotate[0].left += 40  TempRotate[0].top -= 40  TempRotate[2].left -= 40  TempRotate[2].top -= 40  TempRotate[3].left -= 40 * 2  TempRotate[3].top -= 40 * 2  IsRotate = True  if TempRotate[0].top < 0:  IsRotate = False  if TempRotate[3].left < 0:  IsRotate = False  if IsRotate:  for rect in TempRotate:   if IsRect[int(rect.top / 40) + 1][int(rect.left / 40)]:   IsRotate = False   break  if IsRotate:  self.Body = copy.deepcopy(TempRotate)  self.Statu = 'horizonleft'def ShapeChoose(): ShapeChoose = random.randint(1, 7) if ShapeChoose == 1: return I() elif ShapeChoose == 2: return O() elif ShapeChoose == 3: return T() elif ShapeChoose == 4: return Z() elif ShapeChoose == 5: return S() elif ShapeChoose == 6: return L() elif ShapeChoose == 7: return J()def GameMain(): global IsRect for row in range(21): TempRowIsRect = [] for column in range(11):  TempRowIsRect.append(False) IsRect.append(TempRowIsRect) PreBackgroundImg = PreImg while True: StarFalg = False for event in pygame.event.get():  if event.type == QUIT:  pygame.quit()  sys.exit()  if event.type == KEYDOWN:  ClickMusic.play()  if event.key == K_SPACE:   PreBackgroundImg = PStartImg  if event.type == KEYUP:  ClickMusic.play()  if event.key == K_SPACE:   StarFalg = True if StarFalg:  break Screen.blit(PreBackgroundImg, (0, 0)) pygame.display.update() falling = ShapeChoose() GameOver = False Score = 0 FallSpeed = 4 while True: # main game loop for event in pygame.event.get():  if event.type == QUIT:  pygame.quit()  sys.exit()  if event.type == KEYDOWN:  if event.key == K_DOWN:   FallSpeed = 15  else:   falling.Move(event.key)  if event.type == KEYUP:  if event.key == K_DOWN:   FallSpeed = 4 Screen.blit(BackgroundImg, (0, 0)) for row in range(20):  for column in range(10):  if IsRect[row][column]:   pygame.draw.rect(Screen, IsRect[row][column][1], IsRect[row][column][0], 0) falling.Fall() for rect in falling.Body:  pygame.draw.rect(Screen, falling.Color, rect, 0) if falling.IsFalled():  for rect in falling.Body:  Info = []  Info.append(rect)  Info.append(falling.Color)  IsRect[int(rect.top / 40)][int(rect.left / 40)] = Info  falling = ShapeChoose() for IsOver in IsRect[1]:  if IsOver:  GameOver = True  break if GameOver:  IsRect = []  return Score for CheckRow in range(19, 0, -1):  CheckFlag = True  for CheckC in range(10):  if IsRect[CheckRow][CheckC]:   pass  else:   CheckFlag = False  if CheckFlag:  ExplodeMusic.play()  Score += 10  for ChangeRow in range(CheckRow, 0, -1):   for ChangeC in range(10):   if IsRect[ChangeRow - 1][ChangeC]:    IsRect[ChangeRow - 1][ChangeC][0].top += 40   IsRect[ChangeRow] = IsRect[ChangeRow - 1] ScoreHintSurface = ScoreHintFont.render('Score:', True, (0, 0, 0)) Screen.blit(ScoreHintSurface, (420, 100)) ScoreSurface = ScoreFont.render(str(Score), True, (0, 0, 0)) Screen.blit(ScoreSurface, (480, 180)) pygame.display.update() FPSClock.tick(FallSpeed)def GameResult(Score): ResultImg = ResultPreImg while True: for event in pygame.event.get():  if event.type == QUIT:  pygame.quit()  sys.exit()  if event.type == KEYDOWN:  ClickMusic.play()  if event.key == K_SPACE:   ResultImg = RestartImg  if event.type == KEYUP:  ClickMusic.play()  if event.key == K_SPACE:   return True Screen.blit(ResultImg, (0, 0)) ScoreSurface = ResultFont.render(str(Score), True, (255, 127, 80)) if Score < 10:  Screen.blit(ScoreSurface, (250, 260)) elif Score < 100:  Screen.blit(ScoreSurface, (210, 260)) elif Score < 1000:  Screen.blit(ScoreSurface, (160, 260)) pygame.display.update()if __name__ == '__main__': Flag = True while Flag: Score = GameMain() Flag = GameResult(Score)

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    解决python报错MemoryError的问题
    下一条:
    Python Grid使用和布局详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客