# -*- 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))
eli`t4(
4(4(%%%4(=4(4(=4(%4(M4(4(
I
4(
%
Im
t4(
4(
54(M4(
I
I
%
Im
t%
Im
ul4(%
II
I4(4(M!!йM蜰Q4(MСM!4(MMйMQ4(MСMM4(4(4(AM
M4(4)IСMI%4(QЁйРйU%PР4(4(йe=]8
54(йMA
I%4(йeU@
54(йMA
Q4(MСI4(MMйMQ4(MMСMM4(M4(MСMM4(MMСMM4(4(4)}}}|}}}|4(M54(IСM4(4(zs4(е聍顽4(brZj3ro疒j惚r'&*rokkR2