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
0
投稿
猜你喜欢
- 最近,使用 golang 去管理本地应用的生命周期,期间有几个有趣的点,今天就一起看下。场景一我们来看看下面两个脚本会产
- 在按钮旁边加文字1.打开editor/js/ 两个js文件fckeditorcode_gecko.js fckeditorcode_ie.j
- 写了个简洁的隔行变色代码,支持三种动作变化颜色<!DOCTYPE html PUBLIC "-//W3C//DTD XHTM
- 本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考。具体分析如下:此函数只能过滤一些敏感的sql命令了
- 阅读上一篇教程:WEB2.0网页制作标准教程(9)第一个CSS布局实例如果我们想在3列布局的最后加一行页脚,放版权之类的信息。就遇到必须对齐
- Css Reset是什么? 有些同行叫 "css复位",有些可能叫 "默认css".....相信看完
- js汉字简繁转换源代码:<html> <head> <title>汉字简繁转换工具_asp之家</
- 背景在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用pyt
- 1、800*600下,网页宽度保持在778以内,就不会出现水平滚动条,高度则视版面和内容决定。2、1024*768下,网页宽度保持在1002
- 一、打开/关闭文件1、对文件操作时首先要打开文件,打开文件用 fopen()函数,语法是:fopen(filename,mode,inclu
- 本文较为详细的分析了php提示Failed to write session data错误的解决方法。分享给大家供大家参考。具体方法如下:一
- 前言本文给大家详细介绍了解决php-fpm.service not found问题的相关内容,文中介绍的非常详细,下面来一起看看详细的介绍:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 本文实例讲述了Python编程中的反模式。分享给大家供大家参考。具体分析如下:Python是时下最热门的编程语言之一了。简洁而富有表达力的语
- 无水印视频下载方法一:无水印视频下载很简单,有一个通用的方法,就是使用去水印平台即可。我使用的去水印平台是:http://douyin.ii
- 我们在用Drwamweaver书写英文文本时,段落一般不缩进(不支持半角空格);但我们大多的时候都是用中文书写格式,必须在每段开头空两个汉字
- <HTML><HEAD><TITLE>SQL Server 数据库的备份
- 前言随着人工智能研究的不断兴起,Python的应用也在不断上升,由于Python语言的简洁性、易读性以及可扩展性,特别是在开源工具和深度学习
- 格式请使用 gif 或 jpg 或swf (flash)同一组广告请使用一种格式。命名命名方式:宽x高.图片格式x 必须小写 ; 图片格式
- 天极网软件频道的图片切换特效,完全是由XHTML+CSS+JS实现的图片切换特效,弄了好半天啊!!如果您使用或者转载请别忘了加我的一个连接啊