我正在用Python编写一个程序,它将作为一种刮刮票类型的游戏。我完成了所有工作,除非在用户“刮掉”数字时打印出数字。票上的广场。 这是我的代码:
import pygame
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((300,450))
pygame.display.set_caption("test grid")
background = pygame.Surface(screen.get_size())
background.fill((209, 95, 238))
clock = pygame.time.Clock()
keepGoing = True
pos = [0, 0]
x = 40
for line in range(5):
y = 200
for row in range(4):
pygame.draw.rect(background, (238, 201, 0), (x, y, 40, 40), 0)
y += 45
x += 45
board = [[1, 1, 3, 15, 11],
[1, 14, 13, 15, 9],
[2, 6, 7, 15, 5],
[8, 10, 4, 12, 7]]
myfont = pygame.font.SysFont("arial", 50)
while keepGoing:
clock.tick(30)
y = 200
x = 40
x1 = 40
x2 = 80
y1 = 200
y2 = 240
num = 0
label = myfont.render(str(num),1,(255,255,255))
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
print pygame.mouse.get_pos()
for row in range(4):
for line in range(5):
if pos[0] >= x1 and pos[0] <= x2 and pos[1] >= y1 and pos[1] <= y2:
pygame.draw.rect(background, (0,0,0), (x,y,40,40), 0)
num = board[row][line]
label = myfont.render(str(num), 1, (255,255,255))
x1 += 45
else:
x1 += 45
x2 += 45
x += 45
x = 40
y += 45
y1 += 45
y2 += 45
x1 = 40
x2 = 80
screen.blit(label,(200,200))
screen.blit(background, (0,0))
pygame.display.flip()
pygame.quit()
由于某种原因,我无法弄清楚,无论我做什么,我的字体都不会打印出来。我尝试只在循环外声明它,我尝试只在循环中声明它,我尝试了两个,并且由于某种原因没有任何作用,我无法弄清楚为什么我的文本拒绝在屏幕上打印。请帮帮忙?
我的老师说这与我的x1和x2变量有关,但我查了一下,他们正在做他们应该做的事情。
(对于任何想知道的人,我将x添加到x1的原因即使if中的语句为真也是因为它不会继续重复并且一次又一次地打印出数字,直到for循环为止结束。不是最好的解决方案,而是我能想到的唯一解决方案。)
答案 0 :(得分:2)
在使用pygame.display.flip
更新屏幕之前,您的代码会运行screen.blit(background,(0,0))
,这会完全覆盖您绘制到屏幕上的所有内容。将背景的blitting移动到while keepGoing
循环的开头可以解决这个问题。