源代码:
import random
import sys
import pygame
from pygame.sprite import Group, Sprite
pygame.init()
pygame.mixer.init()
photo1 = pygame.image.load("photo1.png")
tryto = 35
now_block = []
flag1 = [False, 0]
class Music:
music1 = pygame.mixer.Sound("music1.mp3")
music2 = pygame.mixer.Sound("music2.mp3")
music2.set_volume(0.6)
music3 = pygame.mixer.Sound("music3.mp3")
music3.set_volume(0.6)
music4 = pygame.mixer.Sound("music4.mp3")
music4.set_volume(0.6)
music5 = pygame.mixer.Sound("music5.mp3")
music5.set_volume(0.8)
class Color:
color1 = (196, 197, 202)
render_color = (72, 95, 249)
screen_color = (157, 159, 164)
def game_over(screen, score):
pygame.time.wait(1000)
gamefont = pygame.font.SysFont("宋体", 40)
scorerender = gamefont.render(f"score:{score}", True, Color.render_color)
screen.fill(Color.screen_color)
gameover_Render = gamefont.render("Game Over", True, Color.render_color)
att = gamefont.render("66666!", True, "pink")
screen.blit(att, [screen.get_rect().width / 3 - 20 + 30, screen.get_rect().centery - 150])
screen.blit(gameover_Render, [screen.get_rect().width / 3 - 20, screen.get_rect().centery])
screen.blit(scorerender, [screen.get_rect().width / 3 - 20, screen.get_rect().centery + 36])
pygame.display.flip()
pygame.time.wait(4000)
pygame.quit()
sys.exit()
def draw_lines(screen):
for i in range(100, 400, 100):
pygame.draw.line(screen, Color.color1, (i, 0), (i, 650), 4)
class Block(Sprite):
def __init__(self, screen, score):
Sprite.__init__(self)
global now_block
self.score = score
self.screen = screen
self.screen_rect = self.screen.get_rect()
self.speed = 5
self.a = random.choice(["photo2(1).png", "photo3(1).png"])
self.image = pygame.image.load(self.a)
self.rect = self.image.get_rect()
self.rect.y = 0
self.b = random.choice([[10, 1], [110, 2], [210, 3], [310, 4]])
self.number = self.b[1]
self.rect.x = self.b[0]
now_block.append(self.b[1])
def update(self):
global flag1
self.rect.top += self.speed
if flag1[0]:
if flag1[1] == self.number:
Music.music1.play()
self.kill()
flag1 = [False, 0]
if self.rect.bottom > self.screen_rect.height:
game_over(self.screen, self.score)
def main_start():
global flag1, tryto
pygame.display.set_caption("Tom 的别踩钢琴块") # 设置窗口名字
blocks = Group()
n_200 = n_500 = n_1000 = True
pygame.mixer.music.set_volume(0.6)
Music.music2.play(-1)
gamefont = pygame.font.SysFont("宋体", 40)
score = 0
count = 0
screen = pygame.display.set_mode((400, 650))
screen_rect = screen.get_rect()
clock = pygame.time.Clock()
while True:
if score >= 1000 and n_1000:
n_1000 = False
tryto = 10
Music.music4.stop()
Music.music5.play(-1)
if score >= 500 and n_500:
n_500 = False
Music.music3.stop()
tryto = 18
Music.music4.play(-1)
if score >= 200 and n_200:
n_200 = False
Music.music2.stop()
tryto = 24
Music.music3.play(-1)
count += 1
screen.blit(photo1, screen_rect)
if count % tryto == 0:
block = Block(screen, score)
blocks.add(block)
blocks.draw(screen)
clock.tick(20)
draw_lines(screen)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
if 1 in now_block:
now_block.remove(1)
flag1 = [True, 1]
score += 10
else:
game_over(screen, score)
elif event.key == pygame.K_2:
if 2 in now_block:
now_block.remove(2)
flag1 = [True, 2]
score += 10
else:
game_over(screen, score)
if event.key == pygame.K_3:
if 3 in now_block:
now_block.remove(3)
flag1 = [True, 3]
score += 10
else:
game_over(screen, score)
if event.key == pygame.K_4:
if 4 in now_block:
now_block.remove(4)
flag1 = [True, 4]
score += 10
else:
game_over(screen, score)
blocks.update()
scorerender = gamefont.render(f"score:{score}", True, (72, 95, 249))
screen.blit(scorerender, scorerender.get_rect())
pygame.display.flip()
if __name__ == '__main__':
main_start()