如何解决如何在我的蛇应用程序中的网格之间填充颜色
我遇到了这个问题,我可以为我的蛇画一个网格,但我无法填充它之间的颜色。问题似乎是因为表面上的网格覆盖了背景的实际颜色,但我没有知道如何解决这个问题,任何对 pygame 有更多了解的人都可以提供帮助。 请参阅我的代码的第 74 行,这就是它应该的颜色。 How could I optimise this simple python pygame code
import pygame
import time
import random
pygame.init()
display_width = 960
display_height = 540
display = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Snake")
pureblue = (0,255)
purered = (255,0)
puregreen = (0,255,0)
green = (0,150,0)
white = (255,255)
black = (1,1,1)
grey = (75,75,75)
darkgrey = (50,50,50)
clock = pygame.time.Clock()
snake_block = 10
snake_speed = 5
font_style = pygame.font.SysFont(None,50)
def drawGrid(surf):
blockSize = snake_block
for x in range(display_width):
for y in range(display_height):
rect = pygame.Rect(x*blockSize,y*blockSize,blockSize,blockSize)
pygame.draw.rect(surf,darkgrey,rect,1)
grid_surf = pygame.Surface(display.get_size())
drawGrid(grid_surf)
def message(msg,colour):
text = font_style.render(msg,True,colour)
display.blit(text,[display_width/2,display_height/2])
def SnakeGameLoop():
game_over = False
X = display_width/2
Y = display_height/2
X_change = 0
Y_change = 0
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
X_change = -snake_block
Y_change = 0
elif event.key == pygame.K_RIGHT:
X_change = snake_block
Y_change = 0
elif event.key == pygame.K_UP:
X_change = 0
Y_change = -snake_block
elif event.key == pygame.K_DOWN:
X_change = 0
Y_change = snake_block
if X >= display_width or X < 0 or Y >= display_height or Y < 0:
game_over = True
X += X_change
Y += Y_change
display.fill(grey)
display.blit(grid_surf,(0,0))
pygame.draw.rect(display,puregreen,[X,Y,snake_block,snake_block])
pygame.display.update()
clock.tick(snake_speed)
message("You lost",purered)
pygame.display.update()
time.sleep(2)
pygame.quit()
quit()
SnakeGameLoop()
解决方法
您需要fill
网格表面与背景颜色:
def drawGrid(surf):
surf.fill(grey) # <--- ADD
blockSize = snake_block
for x in range(display_width):
for y in range(display_height):
rect = pygame.Rect(x*blockSize,y*blockSize,blockSize,blockSize)
pygame.draw.rect(surf,darkgrey,rect,1)
grid_surf = pygame.Surface(display.get_size())
drawGrid(grid_surf)
由于网格 Surface 覆盖了整个显示,因此无需在应用程序循环中清除显示:
def SnakeGameLoop():
# [...]
while not game_over:
# [...]
# display.fill(grey) <--- DELETE
display.blit(grid_surf,(0,0))
pygame.draw.rect(display,puregreen,[X,Y,snake_block,snake_block])
pygame.display.update()
# [...]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。