Python Pygame-如何为我的游戏添加时间计数器?

Python Pygame-如何为我的游戏添加时间计数器?,python,pygame,Python,Pygame,所以我想知道如何为Pygame添加时间计数器?或者,为Pygame程序添加时间计数器的最佳方式是什么。时间计数器应在Pygame初始化时开始,并在inventory[coins]>100: 时间计数器应位于右下角,以秒为单位 import pygame, sys import time import random from pygame.locals import * #MAIN GAME pygame.init() pygame.display.set_mode((200,200)) #

所以我想知道如何为Pygame添加时间计数器?或者,为Pygame程序添加时间计数器的最佳方式是什么。时间计数器应在Pygame初始化时开始,并在
inventory[coins]>100:
时间计数器应位于右下角,以秒为单位

import pygame, sys
import time
import random
from pygame.locals import *

#MAIN GAME

pygame.init()
pygame.display.set_mode((200,200))

#colours
black = (0, 0, 0)
white = (255, 255, 255)
brown = (153, 76, 0)
blue  = (0, 0, 255)
grey  = (192,192,192)

#game dimensions
tilesize = 20
mapwidth = 30
mapheight = 20

coins = 0
ship = 1
water = 2
rock = 3
movesMade = 4

#dictionary for texture of the map
textures = { #the transform function scales the photo to the tile size
    ship : pygame.transform.smoothscale(pygame.image.load('ship.png').convert_alpha(), (tilesize, tilesize)),
    water: pygame.transform.smoothscale(pygame.image.load('water.png'), (tilesize, tilesize)),
    rock: pygame.transform.smoothscale(pygame.image.load('rock.png').convert_alpha(), (tilesize, tilesize)),
    coins: pygame.transform.smoothscale(pygame.image.load('chest.png'), (tilesize, tilesize)),
    movesMade: pygame.transform.smoothscale(pygame.image.load('player.png'), (tilesize, tilesize))
    }

inventory = {
    coins: 0,
    movesMade: 0
    }

#image that will represent player
PLAYER = pygame.transform.smoothscale(pygame.image.load('player.png'), (tilesize, tilesize))

#position of the player
playerPos = [0,0]

resources = [coins, movesMade]

#utilise list comprehension to create grid
tilemap = [[water for w in range(mapwidth)] for h in range(mapheight)]

#set up display
displaysurf = pygame.display.set_mode((mapwidth*tilesize,mapheight*tilesize + 60))


invfont = pygame.font.Font('FreeSansBold.ttf', 18)

#loops through each row
for rw in range(mapheight):
    for cl in range(mapwidth):
        randomnumber = random.randint(0,15)
        if randomnumber == 0 or randomnumber == 1:
            tile = rock
        elif randomnumber == 2 or randomnumber == 3 :
            tile = ship
        else:
            tile = water
        #sets position in the grid
        tilemap[rw][cl] = tile

visit = {}
while True:
    #start = time.time()
    displaysurf.fill(black) #background color

    #user events
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key == K_RIGHT and playerPos[0] < mapwidth - 1:
                playerPos[0] += 1
            if event.key == K_LEFT and playerPos[0] > 0:
                playerPos[0] -= 1
            if event.key == K_UP and playerPos[1] > 0:
                playerPos[1] -= 1
            if event.key == K_DOWN and playerPos[1] < mapheight -1:
                playerPos[1] += 1
            if event.key == K_SPACE:
                pos = (playerPos[1], playerPos[0])
                if not pos in visit: # checks whether a tile has been used
                    visit[pos] = True 
                    currentTile = tilemap[playerPos[1]][playerPos[0]]
                    if currentTile == rock:
                        inventory[movesMade] += 1
                        percent = 30 # coins are kept with a probability of 30 percent and will be lost by 70 percent
                        ran1 = random.randint(0,100) # random value in [0, 99]
                        if ran1 >= percent and inventory[coins] > 30:
                            inventory[coins] -= 30
                        else:
                            inventory[coins] += 20

                    elif currentTile == ship:
                        inventory[coins] += 10
                        inventory[movesMade] += 1

    #loops through each row 
    for row in range(mapheight):
        #loops through each column in row
        for column in range(mapwidth):
            displaysurf.blit(textures[tilemap[row][column]], (column*tilesize,row*tilesize))

    displaysurf.blit(PLAYER,(playerPos[0]*tilesize,playerPos[1]*tilesize))

    placePosition = 10
    for item in resources:
        displaysurf.blit(textures[item],(placePosition, mapheight*tilesize + 20))
        placePosition += 30
        #text displays amount of coin
        textObj = invfont.render(str(inventory[item]), True, white, black)
        displaysurf.blit(textObj,(placePosition, mapheight*tilesize + 20))
        placePosition += 50

    if inventory[coins] > 100:
        break
    #end = time.time()
    pygame.display.update()

#final = (end)
#print(final)
import pygame,sys
导入时间
随机输入
从pygame.locals导入*
#主要游戏
pygame.init()
pygame.display.set_模式((200200))
#颜色
黑色=(0,0,0)
白色=(255,255,255)
布朗=(153,76,0)
蓝色=(0,0255)
灰色=(192192)
#游戏维度
tilesize=20
地图宽度=30
地图高度=20
硬币=0
船=1
水=2
岩石=3
movesMade=4
#地图纹理字典
纹理={#变换函数将照片缩放到平铺大小
ship:pygame.transform.smoothscale(pygame.image.load('ship.png')。convert_alpha(),(tilesize,tilesize)),
water:pygame.transform.smoothscale(pygame.image.load('water.png'),(tilesize,tilesize)),
rock:pygame.transform.smoothscale(pygame.image.load('rock.png')。convert_alpha(),(tilesize,tilesize)),
硬币:pygame.transform.smoothscale(pygame.image.load('cost.png'),(tilesize,tilesize)),
movesMade:pygame.transform.smoothscale(pygame.image.load('player.png'),(tilesize,tilesize))
}
存货={
硬币:0,
移动方式:0
}
#将代表玩家的图像
PLAYER=pygame.transform.smoothscale(pygame.image.load('PLAYER.png'),(tilesize,tilesize))
#球员的位置
playerPos=[0,0]
资源=[硬币,移动方式]
#利用列表理解创建网格
tilemap=[[范围内w的水(地图宽度)]范围内h的水(地图高度)]
#设置显示
displaysurf=pygame.display.set_模式((mapwidth*tilesize,mapheight*tilesize+60))
invfont=pygame.font.font('FreeSansBold.ttf',18)
#每行循环一次
对于范围内的rw(地图高度):
对于范围内的cl(地图宽度):
randomnumber=random.randint(0,15)
如果randomnumber==0或randomnumber==1:
瓷砖=岩石
elif randomnumber==2或randomnumber==3:
瓦片=船
其他:
瓷砖=水
#设置网格中的位置
瓷砖贴图[rw][cl]=瓷砖
访问={}
尽管如此:
#开始=时间。时间()
显示冲浪填充(黑色)#背景色
#用户事件
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
elif event.type==KEYDOWN:
如果event.key==K_RIGHT且playerPos[0]0:
playerPos[0]-=1
如果event.key==K_UP且playerPos[1]>0:
玩家角色[1]-=1
如果event.key==K_DOWN并播放erpos[1]=百分比且库存[硬币]>30:
存货[硬币]-=30
其他:
存货[硬币]+=20
elif currentTile==发货:
存货[硬币]+=10
存货[移动方式]+=1
#每行循环一次
对于范围内的行(贴图高度):
#循环遍历行中的每一列
对于范围内的列(mapwidth):
blit(纹理[tilemap[row][column]],(column*tilesize,row*tilesize))
displaysurf.blit(PLAYER,(playerPos[0]*tilesize,playerPos[1]*tilesize))
位置=10
对于资源中的项目:
displaysurf.blit(纹理[项目],(位置,贴图高度*瓷砖大小+20))
位置+=30
#文本显示硬币的数量
textObj=invfont.render(str(库存[项目]),真,白,黑)
displaysurf.blit(textObj,(placePosition,mapheight*tilesize+20))
位置+=50
如果库存[硬币]>100:
打破
#end=time.time()
pygame.display.update()
#最终=(完)
#打印(最终版)
导入并创建obejct:

e、 g

导入pygame
导入pygame.freetype
pygame.init()
font=pygame.freetype.SysFont('Times New Roman',30)
用于获取当前时间(以毫秒为单位)并设置主循环之前的开始时间:

start\u time=pygame.time.get\u ticks()
尽管如此:
# [...]
计算每帧中经过的时间。要将毫秒转换为秒,时间差必须除以1000。
通过()将时间文本渲染到曲面。注意,
.render()
返回一个对象和一个参数。矩形可用于计算文本的位置。在以下示例中,文本位于右下角,与窗口边框的边距为20:

为True时:
# [...]
如果库存[硬币]<100:
当前时间=pygame.time.get_ticks()
delta_time_s=(当前时间-开始时间)//1000
text\u surf,text\u rect=font.render(str(delta\u time),255,255,size=30)
边距=20#到窗口的边距
大小=(200200)#窗口大小
text_pos=(大小[0]-文本宽度-边距,大小[1]-文本高度-边距)
displaysurf.blit(text\u surf,text\u pos)
如果要显示十分之一秒,则必须更改
增量时间的计算:

delta_