代码拉取完成,页面将自动刷新
import pygame
import core
import time
# pygame init
pygame.init()
# load local files
targetImage = pygame.image.load("target.png")
errImage = pygame.image.load("err.png")
hitImage = pygame.image.load("hit.png")
hitSound = pygame.mixer.Sound("hit.wav")
errSound = pygame.mixer.Sound("err.wav")
my_font = pygame.font.SysFont("arial", 16)
my_font_2 = pygame.font.SysFont("arial", 32)
my_font_3 = pygame.font.SysFont("arial", 48)
# define class
class CPSCounter:
def __init__(self):
self.startTime = time.time()
self.clickNum = 0
def getCPS(self):
nowTime = time.time()
CPS = self.clickNum / (nowTime - self.startTime + 0.001)
if nowTime - self.startTime > 1:
self.startTime = nowTime
self.clickNum = 0
return CPS
def click(self):
self.clickNum += 1
class FPSCounter:
def __init__(self):
self.startTime = time.time()
self.frameNum = 0
def getFPS(self):
nowTime = time.time()
FPS = self.frameNum / (nowTime - self.startTime + 0.001)
if nowTime - self.startTime > 1:
self.startTime = nowTime
self.frameNum = 0
if FPS == 0:
FPS = 60
return FPS
def update(self):
self.frameNum += 1
class Slide:
# 当图标被点击后,使画面平滑下降
def __init__(self):
self.lastPx = 100 # 还要下降多少
def update(self):
self.lastPx -= 100 / FPSCounter.getFPS() * 5
if self.lastPx <= 0:
self.lastPx = 0
return 0
return self.lastPx
class GameState:
def __init__(self):
self.state = PREPARE
def set(self, state):
self.state = state
def __eq__(self, other):
# other 只能是常量
# print("compared to", other)
return True if self.state == other else False
class TimeJudge:
"""
负责计时,同时需要完成对于游戏结束等提示语的书写
"""
def __init__(self, gameState: GameState, _screen, valid):
self._gameState = gameState
self.startTime = 0
self.screen = _screen
self.valid = valid
def update(self):
if not self.valid:
return 0
if time.time() - self.startTime >= 20 and self._gameState == PLAYING:
self._gameState.set(state=END)
if self._gameState == END:
Text = my_font_2.render("Press <Space> to restart", True, (0, 0, 0))
self.screen.blit(Text, (30, 300))
Text = my_font_2.render("last score: %d" % core.score, True, (0, 0, 0))
self.screen.blit(Text, (30, 350))
elif self._gameState == PREPARE:
Text = my_font_2.render(" Press to start ", True, (0, 0, 0))
self.screen.blit(Text, (30, 300))
Text = my_font_2.render("last score: %d" % core.score, True, (0, 0, 0))
self.screen.blit(Text, (30, 350))
self.startTime = 0
elif self._gameState == PLAYING:
Text = my_font_3.render("TIME: %d" % (20 - (time.time() - self.startTime) + 1), True, (0, 0, 0))
self.screen.blit(Text, (100, 100))
@property
def gameState(self):
if self.valid:
return self._gameState
else:
_gameState = GameState()
_gameState.set(PLAYING)
return _gameState
# 全局变量 / 常量
PREPARE = 1
PLAYING = 2
END = 3
# 实体化类
CPSCounter = CPSCounter()
FPSCounter = FPSCounter()
GAMESTATE = GameState()
# 准备启动
clock = pygame.time.Clock() # 设置时钟
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。