垂直 Pygame 状态栏问题

问题描述

以下代码有效,但在我看来有点笨拙。如果有比我的方法更好的编写方法,我会徘徊。它的分辨率也太高了。如果有人对更好的方法以及如何减慢解决速度有任何想法,我很乐意听到。谢谢!

import pygame as pg
from random import randint###RANDOM LIBRARY

pg.init()

screen = pg.display.set_mode((640,480))
FONT = pg.font.Font(None,36)
BACKGROUND_COLOR = (37,225,192)
BLUE = (0,199)
GRAY = (0,55)

#Rectangle variables.
measure_rect = pg.Rect(200,40,100,400)

done = False

while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    random_bar=randint(33,34)#Manipulation of bar graph.
    value_print=random_bar
    length = random_bar*4
    random_bar = 100 - random_bar
    top = 40+(random_bar*4)

    screen.fill(BACKGROUND_COLOR)
    pg.draw.rect(screen,BLUE,(200,top,length))
    pg.draw.rect(screen,GRAY,measure_rect,2)
    txt = FONT.render(str(round(value_print,2)),True,GRAY)
    screen.blit(txt,(120,20))

    pg.display.flip()
    
pg.quit()

解决方法

我建议实现一个 Bar 类:

import pygame as pg
from random import randint###RANDOM LIBRARY

pg.init()

screen = pg.display.set_mode((640,480))
FONT = pg.font.Font(None,36)
BACKGROUND_COLOR = (37,225,192)
BLUE = (0,199)
GRAY = (0,55)

class Bar():
    def __init__(self,rect,bar = BLUE,outline = GRAY):
        self.rect = pg.Rect(rect)
        self.bar = bar
        self.outline = outline
        self.value = 0
    def draw(self,surf):
        length = round(self.value * self.rect.height / 100)
        top = self.rect.height - length
        pg.draw.rect(surf,self.bar,(self.rect.x,self.rect.y + top,self.rect.width,length))
        pg.draw.rect(surf,self.outline,self.rect,2) 
        txt = FONT.render(str(round(self.value,2)),True,GRAY)
        txt_rect = txt.get_rect(topright = (self.rect.x - 10,self.rect.y))
        screen.blit(txt,txt_rect)   

bar = Bar((200,40,100,400))

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    bar.value = randint(33,34)

    screen.fill(BACKGROUND_COLOR)
    bar.draw(screen)
    pg.display.flip()
    
pg.quit()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...