python和pygame实现简单俄罗斯方块游戏
作者:LY 发布时间:2022-10-04 20:00:49
标签:python,pygame,俄罗斯方块
本文为大家分享了python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下
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)
运行结果:
来源:http://henuly.top/?p=462


猜你喜欢
- Git 服务器搭建上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费
- golang中list包用法可以参看这篇文章但是list包中大部分对于e *Element进行操作的元素都可能会导致程序崩溃,其根本原因是e
- 通常我们做网站,设计版面布局是第一步,如何做到版面布局具有创意又美观大方呢?这就需要一定的版面处理功底。让我们先来了解一下版面布局的步骤:一
- 本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换、修改的方法。在之前的文章基于Python实现自动批量修改文件名称
- 本文实例讲述了Python高阶函数、常用内置函数用法。分享给大家供大家参考,具体如下:高阶函数:允许将函数作为参数传入另一个函数;允许返回一
- 本文实例讲述了RC4文件加密的python实现方法。分享给大家供大家参考。具体分析如下:基于RC4流加密算法,使用扩展的16*16的S盒,3
- turtle库是python的基础绘图库,官方手册这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库,其主要是用于程序设计入门,是标
- 我使用的 Pandas 版本如下,顺便也导入 Pandas 库。>>> import pandas as pd>&g
- 一、何谓ASP缓存/为什么要缓存当你的web站点采用asp技术建立的初期,可能感觉到的是asp * 页技术带来的便利性,以及随意修改性、自如
- 本文实例讲述了python生成IP段的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/local/bin/python#-*-
- 导语:近年来,全世界都纷纷投身网络热潮。从小企业到大公司,再到网络学校和大学,大家都在努力提升自己的网络影响力,这样既免费为自身品牌做广告,
- 1、PHP中对各类变量内容的命名规范 (1)目录命名、文件命名、局部变量命名: 使用英文名词、动词,以下划线作为单词的分隔,所有
- 如下所示:from ctypes import *import osimport win32con,win32clipboardaStrin
- 前言最近使用pytorch训练模型,保存模型后再次加载使用出现了一些问题。记录一下解决方案!一、torch中模型保存和加载的方式1、模型参数
- 有个帖子写的检查全角的 <script> fun
- 我认为多选列表具有完美的功能——只需按下Ctrl键,同时点击鼠标从列表中选择多个项目。以下是一个典型的多选列表框:选出你最喜爱的快餐:&nb
- 近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向。如何在心仪公司的面试中获得好成绩,并最终成功获得o
- 1、效果图2、操作步骤File->Setting->Editor->File and TemplateIncludes/*
- DBA_2PC_PENDING Oracle会自动处理分布事务,保证分布事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短
- MSXML是微软非托管代码栈中最为核心的XML服务集合,不但适合基于COM的开发应用,更是微软AJAX解决方案和客户端XSLT解决方案的核心