最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python和pygame實現(xiàn)簡單俄羅斯方塊游戲

 更新時間:2021年02月19日 11:08:58   作者:LY  
這篇文章主要為大家詳細介紹了python和pygame實現(xiàn)簡單俄羅斯方塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了python實現(xiàn)俄羅斯方塊游戲的具體代碼,供大家參考,具體內(nèi)容如下

Github:Tetris

代碼:

# -*- coding:utf-8 -*-

import pygame, sys, random, copy
from pygame.locals import *

pygame.init()

CubeWidth = 40
CubeHeight = 40
Column = 10
Row = 20
ScreenWidth = CubeWidth * (Column + 5)
ScreenHeight = CubeHeight * Row
ScreenSize = (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):
 pass

class 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)

運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    有些網(wǎng)頁中的數(shù)據(jù)進行了算法加密 這些算法代碼是JavaScript 加密的地方就是在js文件里,我們需要破解這些算法加密 就需要了解這加密的過程 獲取加密過程中的代碼 然后進行后續(xù)的反反爬蟲操作
    2021-10-10
  • python3+selenium實現(xiàn)126郵箱登陸并發(fā)送郵件功能

    python3+selenium實現(xiàn)126郵箱登陸并發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了python3+selenium實現(xiàn)126郵箱登陸并發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 一文詳解Python中復(fù)合語句的用法

    一文詳解Python中復(fù)合語句的用法

    復(fù)合語句是包含其它語句(語句組)的語句;它們會以某種方式影響或控制所包含其它語句的執(zhí)行。通常,復(fù)合語句會跨越多行,雖然在某些簡單形式下整個復(fù)合語句也可能包含于一行之內(nèi)。本文就來講講Python中復(fù)合語句的使用
    2022-07-07
  • Python實現(xiàn)粒子群算法的示例

    Python實現(xiàn)粒子群算法的示例

    這篇文章主要介紹了Python實現(xiàn)粒子群算法的示例,幫助大家更好的理解和使用Python,感興趣的朋友可以了解下
    2021-02-02
  • python機器學(xué)習(xí)實現(xiàn)oneR算法(以鳶尾data為例)

    python機器學(xué)習(xí)實現(xiàn)oneR算法(以鳶尾data為例)

    本文主要介紹了python機器學(xué)習(xí)實現(xiàn)oneR算法(以鳶尾data為例),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python對DataFrame中所有行數(shù)據(jù)進行比較的幾種方法

    Python對DataFrame中所有行數(shù)據(jù)進行比較的幾種方法

    在數(shù)據(jù)分析中,比較DataFrame數(shù)據(jù)框中的行是一項基本操作,可應(yīng)用于多種場景,在本文中,我們將學(xué)習(xí)各種方法,將DataFrame中的行與每一行進行比較,直到所有行都被比較完,結(jié)果存儲在一個列表中,需要的朋友可以參考下
    2024-12-12
  • python使用requests.post方法傳遞form-data類型的Excel數(shù)據(jù)的示例代碼

    python使用requests.post方法傳遞form-data類型的Excel數(shù)據(jù)的示例代碼

    這篇文章介紹了python使用requests.post方法傳遞form-data類型的Excel數(shù)據(jù)的示例代碼,某些post接口,需要發(fā)送multipart/form-data類型的數(shù)據(jù),如何使用python requests來模擬這種類型的請求發(fā)送呢?補充講解了python使用requests post請求發(fā)送form-data類型數(shù)據(jù),一起看看吧
    2024-01-01
  • python 批量添加的button 使用同一點擊事件的方法

    python 批量添加的button 使用同一點擊事件的方法

    今天小編就為大家分享一篇python 批量添加的button 使用同一點擊事件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 詳解Python文本操作相關(guān)模塊

    詳解Python文本操作相關(guān)模塊

    這篇文章主要介紹了詳解Python文本操作相關(guān)模塊的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 教你使用Python?的?Template?類生成文件報告

    教你使用Python?的?Template?類生成文件報告

    這篇文章主要介紹了用?Python?的?Template?類生成文件報告,在閱讀本文時,您不僅學(xué)習(xí)了Python字符串的基本知識,Template類以及使用它的原因,而且還實現(xiàn)了第一個文件報告腳本,需要的朋友可以參考下
    2022-08-08

最新評論

德保县| 浙江省| 陆良县| 乌苏市| 微博| 霍山县| 商洛市| 札达县| 黄平县| 乌拉特前旗| 北票市| 宝应县| 荆门市| 新昌县| 浑源县| 榆树市| 平利县| 安塞县| 哈巴河县| 龙南县| 仁寿县| 西林县| 德钦县| 普兰县| 台州市| 东明县| 印江| 卢龙县| 城步| 左贡县| 全椒县| 延寿县| 苏尼特左旗| 九龙城区| 海晏县| 柳州市| 吉安县| 凤庆县| 会东县| 潍坊市| 普格县|