如何在pygame中添加秒表?

2023-12-13

我正在制作一款关于下落圆圈的游戏,玩家(基本上是一个正方形)必须避开它们。代码即将完成,但我有一个问题,如何在窗口上的游戏中添加秒表?我不知道将这种类型的代码放在哪里,有人可以帮助我吗?除了秒表之外,我已经完成了所有代码。

import pygame
from pygame.locals import *
import os
import random
import math
import sys
import time

white = (255,255,255)
blue = (0,0,255)
gravity = 10
size =10
height = 500
width =600
varHeigth = height
ballNum = 5
eBall = []

apGame = pygame.display.set_mode((width, height))
pygame.display.set_caption("AP Project")

clock = pygame.time.Clock()

class Player(object):

  def __init__(self):
    red = (255, 0, 0)
    move_x = 300
    move_y = 400
    self.rect = pygame.draw.rect(apGame,red, (move_x, move_y, 10, 10))
    self.dist = 10

  def handle_keys(self):
    for e in pygame.event.get():
      if e.type == pygame.QUIT:
        pygame.quit();
        exit()
    key = pygame.key.get_pressed()
    if key[pygame.K_LEFT]:
      self.draw_rect(-1, 0)
    elif key[pygame.K_RIGHT]:
      self.draw_rect(1, 0)
    elif key[pygame.K_ESCAPE]:
      pygame.quit();
      exit()
    else:
      self.draw_rect(0, 0)

  def draw_rect(self, x, y):
    red = (255, 0, 0)
    black = (0, 0, 0)
    '''apGame.fill(black)'''
    self.rect = self.rect.move(x * self.dist, y * self.dist);
    pygame.draw.rect(apGame, red , self.rect)
    pygame.display.update()


  def draw(self,surface):
    red = (255, 0, 0)
    move_x = 300
    move_y = 400
    pygame.draw.rect(apGame, red, (move_x, move_y, 10, 10))

def show_go_screen():
  pygame.font.init()
  myfont = pygame.font.SysFont("Comic Sans MS", 30)
  label = myfont.render("Game Over", 1, red)
  apGame.blit(label, (300,100))


def instuct():
  pygame.font.init()
  myfont = pygame.font.SysFont("Comic Sans MS", 15)
  label = myfont.render("Avoid The Circles", 1, red)
  apGame.blit(label, (250,450))


move_x = 300
move_y = 400
red = (255, 0, 0)
black = (0, 0, 0)
player = Player()
clock = pygame.time.Clock()
'''apGame.fill(black)'''
player.draw(apGame)
pygame.display.update()

for q in range(ballNum):
  x = random.randrange(0, width)
  y = random.randrange(0, varHeigth)
  eBall.append([x, y])

while True:

  apGame.fill(black)


  for i in range(len(eBall)):

    ball_rect = pygame.draw.circle(apGame, blue, eBall[i], size)

    if player.rect.colliderect(ball_rect):
      show_go_screen()
      break


    eBall[i][1] += 5

    if eBall[i][1] > height:

        y = random.randrange(-50, -10)
        eBall[i][1] = y

        x = random.randrange(0, width)
        eBall[i][0] = x



  instuct()
  player.handle_keys()
  pygame.display.flip()
  clock.tick(30)

首先不要连续初始化font模块,并且不生成pygame.font.Font每次显示文本时都会出现对象。这是资源和性能的浪费。在初始化时执行一次:

import pygame
from pygame.locals import *
# [...]

pygame.init()
pygame.font.init()

myfont15 = pygame.font.SysFont("Comic Sans MS", 15)
myfont30 = pygame.font.SysFont("Comic Sans MS", 30)

当必须显示文本时使用字体对象:

def show_go_screen():
  label = myfont30.render("Game Over", 1, red)
  apGame.blit(label, (300,100))


def instuct():
  label = myfont15.render("Avoid The Circles", 1, red)
  apGame.blit(label, (250,450))

编写一个可以显示时间的函数,例如精确到十分之一秒:

def display_time(time_s):
  # time string with tents of seconds
  time_str =  str(int(time_s*10) / 10)  
  label = myfont15.render(f"Time : {time_str}", 1, red)
  apGame.blit(label, (20, 20))

返回自上一帧以来经过的确切时间pygame.time.Clock.tick以毫秒为单位。计算时间并使用函数显示时间:

time_seconds = 0
while True:

  apGame.fill(black)

  game_over = False
  for i in range(len(eBall)):

    ball_rect = pygame.draw.circle(apGame, blue, eBall[i], size)
    if player.rect.colliderect(ball_rect):
      show_go_screen()
      game_over = True
      break

    eBall[i][1] += 5
    if eBall[i][1] > height:
        y = random.randrange(-50, -10)
        eBall[i][1] = y
        x = random.randrange(0, width)
        eBall[i][0] = x

  instuct()
  display_time(time_seconds)
  player.handle_keys()
  pygame.display.flip()

  time_millis = clock.tick(30)
  if not game_over:
      time_seconds += time_millis / 1000

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在pygame中添加秒表? 的相关文章

随机推荐

  • grid.mvc 在控制器中使用过滤结果

    我正在使用 grid mvc http gridmvc codeplex com 用于过滤和排序 有谁知道如何在动作控制器中处理过滤结果 我试图通过 FormCollection 传递隐藏字段 但由于分页 仅传递可见值 或者 mvc 中是否
  • jsfiddle 上的相同代码但无法在我的服务器上运行? [复制]

    这个问题在这里已经有答案了 我很困惑 我只是想测试一个jquery simpleselect 并让它在jquery上正常工作 但是当我将它上传到我的服务器时 完全不起作用 我发誓它的代码是相同的 但也许新的眼光会有所帮助 我在这里缺少什么
  • ClearCase 动态视图中两个版本之间的差异

    比如说 我在 ClearCase 中有两个不同的动态视图 我想知道是否有任何命令可以提供报告 x lines added y lines deleted z lines changed 两个版本之间 是的 您可以使用diffstat生成一个
  • MessageStore 支持 QueueChannel,带有 Spring Integration+ Java Config

    弹簧集成参考指南指的是使用 MessageStore 实现来为 QueueChannel 提供持久性 它被提到了很多次 但所有示例都使用 XML 配置 即
  • 如何减少Android Workmanager的时间?

    我一直在检查其他链接 stackoverflow 以减少工作管理器的时间段 但我发现了以下链接 如何减少WorkManager中Periodic WorkManager的时间 上面的链接说最短时间是 15 分钟 需要立即从移动设备向服务器发
  • 如何将 MS botframework 机器人连接到 Skype for Business

    我发布了一个使用机器人框架构建的机器人 但我不知道如何将其连接到内部公司网络上的 Skype for Business 有谁知道流程是什么吗 Ed 尚不支持 Skype for Business
  • 如何创建一个数据类实现 Spring Security 特定的 UserDetails

    我正在尝试迁移一些spring webfluxkotlin 的示例代码 目前我想转换我的Spring数据蒙戈科特林样本 有一个User 原始 Data Mongo 版本看起来 Data ToString Builder NoArgsCons
  • Docusign 嵌入式签名

    我们正在使用docusign让人们签署在我们网站上注册的同意书 有人向我指出了嵌入式签名 API 据我了解 我必须创建一个我已经完成的信封 我为此使用 Net 示例 通过 API 登录正常 但尝试从 API 获取 URL 时出现以下错误 E
  • 在哪里可以找到 execve() 的源代码?

    你能给我源代码吗execve 系统调用 exec家庭 我正在使用 Linux execve 调用 sys execve sys execve 又调用 do execve 这就是操作的位置 http git kernel org p linu
  • 获取表的列名,该列名始终为空

    我有一个有很多列的表 他们中的一些人总是NULL并且不包含任何值 有没有办法使用 SQL 查询列出这些列 而不是一一测试它们 我想避免 SELECT Col1 from MyTable where Col1 IS NOT NULL SELE
  • Azure Function (Python) w/存储上传触发器因大文件上传而失败

    Azure Function Python 由文件上传到 Azure 存储触发 该功能适用 于高达 120MB 的文件 我刚刚使用 2GB 文件进行负载测试 该函数产生了错误Stream was too long 此限制记录在哪里 我将如何
  • 从 Lambda 访问 Redshift - 避免 0.0.0.0/0 安全组

    我正在尝试从 Lambda 函数访问 Redshift 数据库 当我将 0 0 0 0 0 添加到 Redshift 界面中的安全组连接时 如建议的那样 本文 我能够成功连接 然而 从安全角度来看 我觉得使用 0 0 0 0 0 不太舒服
  • ASP.NET WebApi:如何使用 WebApi HttpClient 执行文件上传的分段发布

    我有一个 WebApi 服务处理来自简单表单的上传 如下所示
  • 使用compareTo和Collections.sort

    我有一个特许经营类别 其中包含所有者 特许经营所有者名称 州 特许经营所在州的 2 个字符串 和销售额 当天的总销售额 public class Franchise implements Comparable
  • 尝试创建无限水平滚动 - 最好使用 jquery 插件

    我希望创建一个类似于 The Killers 网站上使用的效果 http www thekillersmusic com html5 该网站编码的复杂性超出了我的范围 但我喜欢它的工作原理 基本上 想要一个类似水平全景背景的东西 我可以在上
  • QT QWebEngine 滚动后渲染?

    使用 WebEngineView 保存网页图像效果很好 但是当我想滚动并保存另一个图像时 生成的图像不会显示网站已滚动 它显示网页的顶部 我的问题是 如何在 QWebEngineView 中向下滚动 然后保存显示正确滚动的网页的屏幕截图 我
  • jqGrid 排序或搜索不适用于具有 json 点表示法的列

    我有这个 jqGrid report jqGrid url py db coll report datatype json height 250 colNames ACN Status Amount colModel name acn so
  • 如何在多个线程之间共享一个mysql连接?

    在我的应用程序中 我使用 dev mysql com 的 Mysql Data 连接器写入我的 mysql 数据库 并且我想最大限度地提高性能 因此我不想打开许多 MySql 连接 但最终当我尝试使用一个全局静态连接时 如下所示 MySql
  • 对象标签中的跨域 SVG 内容文档

    拥有一个包含外部域中的数据的 SVG 是否 合法 即 data da86ge957603k cloudfront net rails grafitti logo f4e8238a87c979c0cf5b41481c982b71 svg 然后
  • 如何在pygame中添加秒表?

    我正在制作一款关于下落圆圈的游戏 玩家 基本上是一个正方形 必须避开它们 代码即将完成 但我有一个问题 如何在窗口上的游戏中添加秒表 我不知道将这种类型的代码放在哪里 有人可以帮助我吗 除了秒表之外 我已经完成了所有代码 import py