您将如何压缩此代码?python

2024-05-29 10:27:36 发布

您现在位置: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, (x, 64))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 128))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 192))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 256))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 320))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 384))
    x += 64
x = 0
for i in range(8):
    screen.blit(wood_floor, (x, 448))
    x += 64

Tags: inimport网格游戏forinitdisplayrange
3条回答

使用//(楼层分割)运算符和%(模)运算符:

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, (i % 8) * 64))

blit应用程序循环中的board表面连续:

while run:
    # [...]

    screen.blit(board, (0, 0))

这段代码工作得最好:

x = 0
y = 0
for i in range(64):
    screen.blit(wood_floor, (x, y))
    x += 64
    if x == 512:
        y += 64
        x = 0

基于Rabbi76的答案,但使用坐标作为循环变量,以避免循环体中的额外乘法:

for y in range(0, 8 * 64, 64):
    for x in range(0, 8 * 64, 64):
        screen.blit(wood_floor, x, y)

相关问题 更多 >

    热门问题