为什么我的图块中的字母未对齐? (2048)

问题描述 投票:0回答:1

我正在尝试使用 pygame 编写游戏 2048。我注意到所有数字都未对齐(如下图),我认为在解决此问题之前我无法入睡。

AHHH

这是代码的重要部分(其余部分是让游戏本身运行的东西;但是,我认为这并不重要):

# Yes, I know my code is a mess.
import pygame
from pygame import *



COLORS = {"bg": (249, 246, 242),
          "subBG": (204, 192, 179),
          "0": (224, 212, 199),
          "2": (238, 228, 218),
          "4": (237, 224, 200),
          "8": (242, 177, 121),
          "16": (245, 149, 99),
          "32": (246, 124, 100),
          "64": (246, 94, 59),
          "128": (237, 207, 114),
          "256": (237, 204, 97),
          "512": (237, 200, 80),
          "1024": (237, 197, 63),
          "2048": (237, 194, 46),
          "other": (15, 15, 18),
          "light": (249, 246, 242),
          "dark": (119, 110, 101)}

pygame.init() 

X, Y = 1080, 950

window = pygame.display.set_mode((X, Y))
window.fill(COLORS["bg"])
pygame.display.set_caption('2048')
f = font.SysFont('clearsans-medium.ttf', 48)
  

running = True



while running:  
    colors = [[],[],[],[]]
    for row in range(4):
        for col in range(4):
            colors[row] += [COLORS[str(board[row][col])]]

    pygame.draw.rect(window, COLORS["subBG"], Rect(X/2-215, Y/2-215, 420, 420), border_radius= 8)
    row1 = [pygame.draw.rect(window, colors[0][0], Rect(X/2-200, Y/2-200, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[0][1], Rect(X/2-100, Y/2-200, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[0][2], Rect(X/2, Y/2-200, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[0][3], Rect(X/2+100, Y/2-200, 90, 90), border_radius= 8)]

    row2 = [pygame.draw.rect(window, colors[1][0], Rect(X/2-200, Y/2-100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[1][1], Rect(X/2-100, Y/2-100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[1][2], Rect(X/2, Y/2-100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[1][3], Rect(X/2+100, Y/2-100, 90, 90), border_radius= 8)]

    row3 = [pygame.draw.rect(window, colors[2][0], Rect(X/2-200, Y/2, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[2][1], Rect(X/2-100, Y/2, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[2][2], Rect(X/2, Y/2, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[2][3], Rect(X/2+100, Y/2, 90, 90), border_radius= 8)]

    row4 = [pygame.draw.rect(window, colors[3][0], Rect(X/2-200, Y/2+100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[3][1], Rect(X/2-100, Y/2+100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[3][2], Rect(X/2, Y/2+100, 90, 90), border_radius= 8),
            pygame.draw.rect(window, colors[3][3], Rect(X/2+100, Y/2+100, 90, 90), border_radius= 8)]
    for row in range(4):
        for col in range(4):
            gridRow = [row1, row2, row3, row4][row]
            if board[row][col] != 0:
                text = f.render(str(board[row][col]), True, COLORS['light' if board[row][col] >= 8 else 'dark'])
                textRect = text.get_rect(center= gridRow[col].center)
                window.blit(text, textRect)


    pygame.display.update()

我将如何对齐字符以及为什么它们一开始就没有对齐‽


编辑:

board
变量是一个多维列表:

board = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

编辑2:

我尝试按照@tadman的建议使用不同的字体,但它似乎没有改变字体(我使用了Calibri)

f = font.SysFont('Calibri.ttf', 48)
txt = f.render("hdfahsj", True, COLORS['dark'])
window.blit(txt, (50, 70))

python pygame game-development 2048
1个回答
0
投票

使用

font.Font()
代替
font.SysFont()
似乎有效。

© www.soinside.com 2019 - 2024. All rights reserved.