我实现了一个排行榜系统;我的方法是使用sqlite3,在这里我从数据库中获取所有记录,然后将它们从数组中“解开”,并将它们放到表中。我有麻烦与光点他们,我不知道如何让他们都显示下来,像一个排行榜屏幕会。 代码:
def lbButton(self, action='leaderboard'):
self.leaderboardMenu = True
if self.x + self.buttonWidth > self.mousePos[0] > self.x and self.y + self.buttonHeight > self.mousePos[1] > self.y:
if self.mouseClick[0] == 1:
if action == 'leaderboard':
image = pg.image.load('leaderboardImg.jpg')
while self.leaderboardMenu:
for event in pg.event.get():
if event.type == QUIT:
self.quitButton()
if event.type == KEYDOWN:
if event.key == pg.K_SPACE:
self.leaderboardMenu = False
self.surface.blit(image, (0, 0))
#tempName = ''
#tempScore = ''
getData = c.execute("SELECT * FROM names where name = name ORDER BY score DESC") # get so highest score is first
getData = getData.fetchall() # fetch all
for _ in getData:
getData = [_ for y in getData for y in _] # fetchall returns data in form: [(name, score), (name, score)],
# so using this loop 'untangles' that array and makes it so i can get the name and score individually
names = getData[0][0]
scores = str(getData[0][1])
print(names)
namesFont = pg.font.SysFont('comicsansms', 20)
namesText = namesFont.render(names, 1, COLOUR_RED)
self.surface.blit(namesText, (400,400))
scoresFont = pg.font.SysFont('comicsansms', 20)
scoresText = scoresFont.render(scores, 1, COLOUR_RED)
self.surface.blit(scoresText, (400, 400))
pg.display.update()
排行榜的样子:https://i.imgur.com/hcmCVQP.png 如果我打印“names”(连同数据库记录):https://i.imgur.com/TEqyFJj.png(names打印无限) 任何帮助都将不胜感激。谢谢 (剩下的代码是可以工作的,问题是只需将记录快速放到屏幕上就可以了。)
所以当你把一行文本放在另一行的上面时,它们总是被画到坐标(
400
,400
)。你知道吗因此,通常在PyGame中编写多行文本时,代码必须将每行渲染为位图,确定高度,然后使用该高度在屏幕上隔开文本。考虑功能:
它使用一段同时包含ascenders和descenders的文本来粗略地了解任何呈现文本的高度。这一点很重要,因为
___
的位图高度与XXX
不同,使用每个位图的行高度将产生不均匀的结果。你知道吗一旦代码知道要为每行分配多少垂直空间,就可以很容易地在屏幕上为文本行分配空间:
基本上,代码在列中写入名称和分数,然后将垂直偏移量(屏幕下方)增加字体高度加上一个间隔符,依次绘制每一行。你知道吗
相关问题 更多 >
编程相关推荐