gpt4 book ai didi

python - 有没有更好的方法在 pygame 中创建瓦片 map ?

转载 作者:行者123 更新时间:2023-12-01 08:21:32 30 4
gpt4 key购买 nike

当我尝试 block 传输图 block 时,它显示“列表索引超出范围”。我不知道该怎么做,因为我对此很陌生。

错误消息:

window.blit(tilemap.textures[tilemap.tilemap[row][column]], (columntilemap.tilesize, rowtilemap.tilesize)) IndexError: list index out of range

我尝试更改 mapwidthmapheight 的值,但这并没有成功。我有2个脚本。主要和瓦片映射。因此可能会出现错误。注意(我已经在完整代码中初始化了 pygame,所以这不是问题)

main.py

import pygame as pg

# Importing files
import constants
import classes
import tilemap

# Functions
def draw_game():
""" This function draws everything on the screen """

global window, clock

# The background
window.blit(constants.img_background, (0, 0))

# Tiles
for row in range(tilemap.mapheight):

for column in range(tilemap.mapwidth):

window.blit(tilemap.textures[tilemap.tilemap[row][column]], (column*tilemap.tilesize, row*tilemap.tilesize))




# Updating
clock.tick(60)
pg.display.update()

tilemap.py

import pygame as pg
import constants

GRASS = 0
WATER = 1




textures = {
GRASS : pg.image.load("image\\grass.png"),
WATER : pg.image.load("image\\water.png")

}


tilemap = [
[GRASS, GRASS, GRASS, WATER],
[GRASS, GRASS, WATER, GRASS],
[GRASS, WATER, GRASS, GRASS],
[WATER, GRASS, GRASS, GRASS]
]



tilesize = 40
mapwidth = 2
mapheight = 5

最佳答案

tilemap 是一个列表。该列表有 4 个元素,列表中的每个元素也是一个有 4 个元素的列表。

 tilemap = [
[GRASS, GRASS, GRASS, WATER],
[GRASS, GRASS, WATER, GRASS],
[GRASS, WATER, GRASS, GRASS],
[WATER, GRASS, GRASS, GRASS]
]

所以tilemap的“宽度”和“高度”是4:

mapwidth = 4
mapheight = 4

但是你根本不需要这些变量,因为你可以通过 len() 获得列表的长度:

for row in range( len(tilemap.tilemap) ):

for column in range( len(tilemap.tilemap[row]) ):

window.blit(tilemap.textures[tilemap.tilemap[row][column]],
(column*tilemap.tilesize, row*tilemap.tilesize))
<小时/>

如果你想在 map 上放置更多的图 block ,那么向tilemap添加更多的图 block 就足够了:

例如

tilemap = [
[WATER, WATER, WATER, WATER, WATER, WATER],
[WATER, GRASS, GRASS, GRASS, WATER, WATER],
[WATER, GRASS, GRASS, WATER, GRASS, WATER],
[WATER, GRASS, WATER, GRASS, GRASS, WATER],
[WATER, WATER, GRASS, GRASS, GRASS, WATER],
[WATER, WATER, WATER, WATER, WATER, WATER]
]
mapwidth = len(tilemap.tilemap)
mapheight = len(tilemap.tilemap[0])

关于python - 有没有更好的方法在 pygame 中创建瓦片 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615257/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com