簡體   English   中英

如何在類def中每x時間做x

[英]How to do x every x amount of time in a class def

你如何每 x 次做 x 次。 我試圖在我的代碼中,市政廳類使用def函數add_money每50秒添加一次錢(這是被稱為城市類的一部分),但我在查找或執行代碼時遇到了麻煩,我認為你可以使用時間.sleep() 但這不起作用,因為它減慢了我的代碼,我該如何在不妨礙主事件代碼或類 def 的情況下做到這一點?

import pygame
from pygame.locals import *
import datetime
import random
import time
import pickle
import os
import math
import threading 

os.system
vec = pygame.math.Vector2
pygame.init()
FPS = 30
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
GRAY = (127, 127, 127)
BLACK = (0, 0, 0)
HEIGHT = 800
WIDTH = 500
Font = pygame.font.SysFont('timesnewroman', 30)



gamedisplay = pygame.display.set_mode((HEIGHT, WIDTH))
clock = pygame.time.Clock()









    

class city():
    def __init__(self):
        self.city_x =300
        self.city_y = 300
        self.money = 0
        self.level = 0
        self.city_happiness = 0
        self.food = 0
        self.experience = 0
        self.water = 0


    def draw(self, display):
        self.text = Font.render('citiesmoney:' + str(self.money),2,(BLACK))
        gamedisplay.blit(self.text, (self.city_x, self.city_y-300))

    def add_money(self):
        
           self.money += 1
        
        


class c_panel():
    def __init__():
        pass

class buildings():
    def __init__():
        self.b_health = 100

class town_hall(buildings):
    def __init__(self):
        self.cit = city()

    
        

    def adding_money(self):
       
            self.cit.add_money
            

    
         



class monster():
    def __init__():
        pass

class citizens():
    def __init__(self):
        self.x = 100
        self.y = 100
        self.image = pygame.Surface((100, 100))
        self.raidimg = pygame.Surface((100, 100))
        self.joinimg = pygame.Surface((200, 100))
        self.recjin = self.raidimg.get_rect()
        self.recri = self.raidimg.get_rect()
        self.recri.center = 300//2, 300//2
        self.rect = self.image.get_rect(center = (self.x, self.y))
        self.rect.center = 300//2, 300//2
        self.moving = False
        self.c_health = 100
        self.c_mood = 100
        self.c_hunger = 100
        self.c_intelligence = 0
        self.c_tempature = 50
        self.c_firstname = ["Valerie", "Bill","Jill"]
        self.c_lastname = ["Harper","Benedict","Smith"]
        self.c_speed = 0
        self.c_strength = 0
        self.c_gender = random.randint(0,5)
        self.fullname = random.choice(self.c_firstname) + random.choice(self.c_lastname)

   
    def c_mousedrag(self):
        if event.type == MOUSEBUTTONDOWN:
            if self.rect.collidepoint(event.pos):
                  
                self.moving = True
 
        elif event.type == MOUSEBUTTONUP:
            self.moving = False
 
       
        elif event.type == MOUSEMOTION and self.moving:
            self.rect.move_ip(event.rel)


    def c_raidfight(self):
        if event.type == MOUSEBUTTONDOWN:
            if self.recri.collidepoint(event.pos):
                self.c_health -= 1
                
        elif event.type == MOUSEBUTTONUP:
            pass
 
       
                    
            
    
        
                        
    
    
   
    
    
           
           
    def draw(self, display):
        self.text = Font.render('fullname:' + (self.fullname),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-100))
        
        self.text = Font.render('Health:' + str(self.c_health),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-70))
        
        self.text = Font.render('mood:' + str(self.c_mood),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-60))
        
        self.text = Font.render('intelligence:' + str(self.c_intelligence),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-50))
        
        self.text = Font.render('tempature:' + str(self.c_tempature),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-40))
        
        self.text = Font.render('speed:'+ str(self.c_speed),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-30))
        
        self.text = Font.render('strength:'+ str(self.c_strength),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-20))

        self.text = Font.render('hunger:'+ str(self.c_hunger),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-10))

        self.text = Font.render('gender:'+ str(self.c_gender),2,(BLACK))
        gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-2))

        gamedisplay.blit(self.image, self.rect)
        gamedisplay.blit(self.raidimg, self.recri)







town = city()
townhall = town_hall()
citizen = citizens()


while True:
        clock.tick(FPS)

        
        for event in pygame.event.get():
          if event.type == pygame.QUIT:
                pygame.quit()

          

                #exit()
          
        gamedisplay.fill(WHITE)
        citizen.draw(gamedisplay)
        citizen.c_mousedrag()
        citizen.c_raidfight()
        townhall.adding_money()
        town.draw(gamedisplay)
        
        pygame.display.update()
        
        pygame.display.flip()



   

首先,您應該為幀數和游戲時間設置一些常量變量。 然后在你的加錢方法中,你會發生一些事情。 一:將幀計數加一,因為該方法在游戲循環的每次迭代中都會調用一次。 二:檢查幀數除以您的 FPS 是否等於 0,邏輯如下: if frame_count % FPS == 0:然后在此 if 語句中,添加游戲時間並將幀數設置回零。 然后你將有一個每秒計數的變量。 最后,您可以像這樣檢查游戲時間: if game_time % 50 == 0:並添加到您所在城市的現金供應中,最后將游戲時間設置回 0,因為您的其他代碼都不依賴於計時器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM