回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>理想的结果是有一个框,玩家可以点击,然后慢慢填补。如果用户单击按钮,我在测试后尝试使用while和for循环,但它没有缓慢增加,而是只增加了整个框的一小部分。整个游戏代码如下,但我的问题似乎是第70-80行。你知道吗</p>
<pre><code>import pygame, sys, time, threading, tqdm
pygame.init()
#Setting up background colors, etc
WHITE = (255,255,255)
BLACK = (0,0,0)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
YELLOW =(255,255,0)
#Setting up window and caption
DISPLAYSURF_x = 460
DISPLAYSURF_y = 720
DISPLAYSURF = pygame.display.set_mode((DISPLAYSURF_x,DISPLAYSURF_y))
pygame.display.set_caption('Adventure Capitalist')
logo = pygame.image.load('Logo.png')
menu = pygame.image.load('menu.png')
DISPLAYSURF.fill(WHITE)
cash = 30
amount = 0
barlength = 102
storeBoard = pygame.image.load('storeBoard.png')
def buyDraw(amount, minxbuy, minybuy):
Font1 = pygame.font.SysFont('monaco', 24)
buySurface = Font1.render('{0}'.format(amount), True, BLACK)
buyRect = buySurface.get_rect()
buyRect.midtop = (75, minybuy)
DISPLAYSURF.blit(buySurface,buyRect)
def cashDraw(cash):
Font2 = pygame.font.SysFont('monaco', 40)
cashSurface = Font2.render(' ${0}'.format(cash), True, GREEN)
cashRect = cashSurface.get_rect()
cashRect.midtop = (420, 10)
DISPLAYSURF.blit(cashSurface,cashRect)
# amount of item, cost to buy, time taken to complete action, money per run
def capitalist(amount, cost, timez, gain, minxbuy, maxxbuy, minybuy, maxybuy, minxgain, maxxgain, minygain, maxygain, cash):
print ("ran")
# Buy button
DISPLAYSURF.fill(WHITE)
DISPLAYSURF.blit(storeBoard, (0, 0))
buyDraw(amount, minxbuy, minybuy)
cashDraw(cash)
pygame.display.flip()
button_rect = pygame.Rect(minxgain, minygain, maxxgain, maxygain)
# Coefficient to calculate the width of the rect for a given time.
coefficient = maxxgain / timez
time = 0
clock = pygame.time.Clock()
dt = 0
done = False
while True:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
(x, y) = pygame.mouse.get_pos()
if x < maxxbuy and x > minxbuy and y < maxybuy and y > minybuy and cash >= cost:
DISPLAYSURF.fill(WHITE, (minxbuy+25, minybuy, maxxbuy+30, maxybuy))
amount += 1
buyDraw(amount, minxbuy, minybuy)
print (cash)
DISPLAYSURF.fill(WHITE, (375, 0 , 460, 51))
cash -= cost
cashDraw(cash)
pygame.display.flip()
if x < maxxgain and x > minxgain and y < maxygain and y > minygain and amount > 0:
# If mouse is over the button, increase the timer.
if time < timez: # Stop increasing if max_time is reached.
time += dt
if time >= timez:
time = timez
inc = time * coefficient
pygame.draw.rect(DISPLAYSURF, BLACK, (minxgain, minygain, inc/2, maxygain/2))
pygame.display.flip()
dt = clock.tick(60) / 100
def opening():
DISPLAYSURF.blit(logo, (155, 50))
DISPLAYSURF.blit(menu, (0 , 125))
while True:
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
(x, y) = pygame.mouse.get_pos()
if x < 375 and x > 80 and y < 545 and y > 395:
# 1 2 3 4 5 6 7 8 9 10 11 12 13
#amount, cost, time, gain, minxbuy, maxxbuy, minybuy, maxybuy, minxgain, maxxgain, minygain, maxygain, cash
# capitalist(0, 5, 1, 1, 21, 41, 21, 41, 120, 204, 20, 41, cash)
capitalist(1, 10, 3, 5, 21, 41, 21, 41, 120, 204, 20, 41, cash)
pygame.display.flip()
opening()
</code></pre>