你会如何压缩这段代码? - 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