2012-12-31 55 views
3

我是pygame的新手,目前我正在创建一个记忆游戏,其中计算机在随机位置显示一个盒子,然后用户必须点击他/她认为这些盒子的位置。这有点像this game如何在Pygame中以网格状结构显示文本?

screenshot

但是我真的不知道如何使计算机显示的盒子,像是字母或符号例如'T'或'%'。 (我已经创建了网格)。 任何人都可以请帮忙吗?这将非常感激。

import pygame 
size=[500,500] 
pygame.init() 
screen=pygame.display.set_mode(size) 

# Colours 
LIME = (0,255,0) 
RED = (255, 0, 0) 
BLACK = (0,0,0) 
PINK = (255,102,178) 
SALMON = (255,192,203) 
WHITE = (255,255,255) 
LIGHT_PINK = (255, 181, 197) 
SKY_BLUE = (176, 226, 255) 
screen.fill(BLACK) 

# Width and Height of game box 
width=50 
height=50 

# Margin between each cell 
margin = 5 

# Create a 2 dimensional array. A two dimesional 
# array is simply a list of lists. 
grid=[] 
for row in range(20): 
    # Add an empty array that will hold each cell 
    # in this row 
    grid.append([]) 
    for column in range(20): 
     grid[row].append(0) # Append a cell 

# Set row 1, cell 5 to one. (Remember rows and 
# column numbers start at zero.) 
grid[1][5] = 1 

# Set title of screen 
pygame.display.set_caption("Spatial Recall") 

#Loop until the user clicks the close button. 
done=False 

# Used to manage how fast the screen updates 
clock=pygame.time.Clock() 

# -------- Main Program Loop ----------- 
while done==False: 
    for event in pygame.event.get(): # User did something 
     if event.type == pygame.QUIT: # If user clicked close 
      done=True # Flag that we are done so we exit this loop 
     if event.type == pygame.MOUSEBUTTONDOWN: 
     # User clicks the mouse. Get the position 
     pos = pygame.mouse.get_pos() 
     # Change the x/y screen coordinates to grid coordinates 
     column=pos[0] // (width+margin) 
     row=pos[1] // (height+margin) 
     # Sete t hat location to zero 
     grid[row][column]=1 
     print("Click ",pos,"Grid coordinates: ",row,column) 


# Draw the grid 
for row in range(10): 
    for column in range(10): 
     color = LIGHT_PINK 
     if grid[row][column] == 1: 
      color = RED 
     pygame.draw.rect(screen,color,[(margin+width)*column+margin,(margin+height)*row+margin,width,height]) 

# Limit to 20 frames per second 
clock.tick(20) 

# Go ahead and update the screen with what we've drawn. 
pygame.display.flip() 

pygame.quit() 
+0

我看不到那个页面,它似乎在收费墙后面。你能提供一个截图吗? –

回答

2

为了显示文本,你必须经过一系列的步骤。首先,您需要使用命令`pygame.font.Font(字体名称,大小)来获取字体。例如:

arialfont=pygame.font.Font('arial', 12) 

所有可用的字体都可以从命令pygame.font.get_fonts()获得。请记住在任何这之前初始化pygame(pygame.init())。

接下来,您将不得不使用Font.render(text, antialias, color, background=None)。例如:

text=arialfont.render('Hello World!', True, (0, 0, 0)) 

这将返回一个曲面。您可以像使用其他任何表面一样使用它。使用text.get_rect()来得到它的矩形,然后重新定位矩形以将其放置在你想要的位置,并将其闪光到窗口。如果你对表面物体一无所知,就问我。

这里是一个工作代码。

import pygame, sys 
pygame.init()#never forget this line 
window=pygame.display.set_mode((100, 100)) 
font=pygame.font.SysFont('arial', 40) 
text=font.render('@', True, (0, 0, 0)) 
rect=text.get_rect() 
window.fill((255, 255, 255)) 
window.blit(text, rect) 
pygame.display.update() 
while True: 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
+0

非常感谢你的回答,但你是对的我从来没有教过任何关于Surface对象的东西...... – nnekymoe

+0

@nnekymoe没问题。表面对象基本上是存储在程序中的图片。它可以绘制到其他表面上,也可以用'pygame.draw'绘制。一个表面对象的例子是屏幕,它可以帮助你理解它们。为了blit一个表面对象,你必须有一个矩形或矩形,你可能知道。要获得曲面的矩形,可以使用'surface.get_rect()'。我会在另一条评论中继续这一点。我正在用完角色。 – PygameNerd

+0

@nnekymoe所以,当你使用'get_rect()'函数做一个矩形时,它会把它放在屏幕的左上角。要改变它,请改变它的属性,例如左,右,上,下,centerx,centery,center,topleft,bottomleft,topright和bottomright。例如:'rect.bottom = 430'或'rect.bottomleft =(0,300)'。要将表面对象接到屏幕或任何其他表面上,请使用'screen.blit(surface,rect)'。如果你什么都不懂,我很乐意提供帮助。 – PygameNerd