如何解决你会如何压缩这段代码? - Python
我正在制作一个地牢游戏,但它是一个 8x8 的瓷砖网格,但我需要用木瓷砖填充它。你知道我怎么做吗?我尝试先放置 8 个瓷砖,然后再向下放置 8 个瓷砖。
import pygame
pygame.init()
screen = pygame.display.set_mode([510,510])
wood_floor = pygame.image.load('Desktop/Python Game 1/wood_floor.png')
x = 0
y = 0
for i in range(8):
screen.blit(wood_floor,(x,y))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,64))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,128))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,192))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,256))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,320))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,384))
x += 64
x = 0
for i in range(8):
screen.blit(wood_floor,448))
x += 64
解决方法
使用 //
(地板除法)运算符和 %
(模)运算符:
for i in range(64):
screen.blit(wood_floor,((i // 8) * 64,(i % 8) * 64))
为了提高性能,在表面上创建一个大pygame.Surface
对象和blit
图块:
board = pygame.Surface((8*64,8*64))
for i in range(64):
board.blit(wood_floor,(i % 8) * 64))
blit
board
Surface 在应用程序循环中不断:
while run:
# [...]
screen.blit(board,(0,0))
,
基于 Rabbid76 的回答,但使用坐标作为循环变量,以避免循环体中的额外乘法:
for y in range(0,8 * 64,64):
for x in range(0,64):
screen.blit(wood_floor,x,y)
,
这段代码效果最好:
x = 0
y = 0
for i in range(64):
screen.blit(wood_floor,(x,y))
x += 64
if x == 512:
y += 64
x = 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。