黑色的玩意咋回事
from random import randint, choiceimport pygame
# CONSTANTS & VARIABLES #
SS = SW, SH = (1500, 1000) # SCREEN
BW = BH = 20 # BLOCK
WW = 75 # WORLD WIDTH
WH = 72 # WORLD HEIGHT
BLOCKS = [
# name, color
("air", (128, 192, 255)),
("grass_land", (128, 255, 192)),
("stone", (96, 96, 96)),
]
rx = 0 # render x
ry = 25 # render y
screen = None
world = []
# FUNCTIONS #
def generate_world(): # 生成世界
world = [ for _ in range(WH)] # 世界
h = # 各个平面坐标的高度
for x in range(WW): # 生成 16 列的世界
if x == 0: # 第一列是随机高度
h = randint(40, 56)
else: # 上一列的高度 +1 / 0 / -1
h = h + choice([-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
for y in range(0, 72): # 生成高度
if y < h: # 高度低于需要生成的高度,设置为石头
world = 2
elif y == h: # 高度等于需要生成的高度,设置为草地
world = 1
else: # 高度高于需要生成的高度,设置为空气
world = 0
return world
def initalize(): # 初始化函数
global screen, world
pygame.init()
screen = pygame.display.set_mode(SS)
pygame.display.set_caption("GezheLand")
world = generate_world()
# MAIN PROGRAM #
initalize()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for x in range(0, SW // BW):
for y in range(0, SH // BH):
try:
pygame.draw.rect(screen, BLOCKS], (x * BW, SH - (y + 1) * BH, BW, BH))
except:
pass
pygame.display.flip()
pygame.quit()
rt,ai 说 58 行应该是 SH - (y + 1) * BH(已经在代码里加上了),但这样造成的结果是少一行黑边,并没有让黑边消失
你好!这是因为在绘制方块时,y 坐标的计算方式可能有误。现在的计算方式是 `SH - (y + 1) * BH`,但实际上应该是 `SH - y * BH - BH`,这样才能将方块完全绘制在屏幕上。
修改一下代码中的 `pygame.draw.rect` 部分,将 `SH - (y + 1) * BH` 改为 `SH - y * BH - BH`,如下所示:
for x in range(0, SW // BW):
for y in range(0, SH // BH):
try:
pygame.draw.rect(screen, BLOCKS], (x * BW, SH - y * BH - BH, BW, BH))
except:
pass
这样就可以正确地绘制方块,并且不会出现黑边了。希望对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-14 14:49
你好!这是因为在绘制方块时,y 坐标的计算方式可能有误。现在的计算方式是 `SH - (y + 1) * BH`,但实际上 ...
没用 歌者文明清理员 发表于 2024-04-14 17:00
没用
非常抱歉代码修改没有解决问题。那么我需要进一步了解你遇到的具体问题,以便更好地帮助你解决。你能提供更多关于"黑色的玩意"的问题描述吗?你是指在什么情况下出现的?是否有报错信息?请提供更多细节,我会尽力帮助你解决问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 from random import randint, choice
import pygame
# CONSTANTS & VARIABLES #
SS = SW, SH = (1500, 1000)# SCREEN
BW = BH = 20# BLOCK
WW = 75# WORLD WIDTH
WH = 72# WORLD HEIGHT
BLOCKS = [
# name, color
("air", (128, 192, 255)),
("grass_land", (128, 255, 192)),
("stone", (96, 96, 96)),
]
rx = 0# render x
ry = WH - SH // BH# Adjusted to start rendering from the bottom of the world matrix
screen = None
world = []
# FUNCTIONS #
def generate_world():# 生成世界
world = [ for _ in range(WH)]# 世界
h = # 各个平面坐标的高度
for x in range(WW):# 生成 16 列的世界
if x == 0:# 第一列是随机高度
h = randint(40, 56)
else:# 上一列的高度 +1 / 0 / -1
h = h + choice([-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
for y in range(WH):# 生成高度
if y < h:# 高度低于需要生成的高度,设置为石头
world = 2
elif y == h:# 高度等于需要生成的高度,设置为草地
world = 1
else:# 高度高于需要生成的高度,设置为空气
world = 0
return world
def initialize():# 初始化函数
global screen, world
pygame.init()
screen = pygame.display.set_mode(SS)
pygame.display.set_caption("GezheLand")
world = generate_world()
# MAIN PROGRAM #
initialize()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for x in range(SW // BW):
for y in range(SH // BH):
try:
block_color = BLOCKS]
pygame.draw.rect(screen, block_color, (x * BW, SH - (y + 1) * BH, BW, BH))
except IndexError:
pass# This pass handles cases where the block is out of the world's range
pygame.display.flip()
pygame.quit() 小甲鱼的二师兄 发表于 2024-4-14 19:23
所以你改了啥 歌者文明清理员 发表于 2024-4-14 20:52
所以你改了啥
ry = WH - SH // BH 小甲鱼的二师兄 发表于 2024-4-15 03:32
ry = WH - SH // BH
所以有用吗 歌者文明清理员 发表于 2024-4-15 17:29
所以有用吗
你是不会自己运行一下还是怎么回事?!!
歌者文明清理员 发表于 2024-4-15 17:29
所以有用吗
你真的是有点搞笑! 本帖最后由 小甲鱼的二师兄 于 2024-4-17 06:26 编辑
rt,ai 说 58 行应该是 SH - (y + 1) * BH(已经在代码里加上了),但这样造成的结果是少一行黑边,并没有让黑边消失
告诉你把它改成 ry = WH - SH // BH 就可以了,还问什么 “所以有用吗?”
这不废话嘛?没用告诉你搞毛线?!
有没有用自己不会试一下吗?
这就是你求助的态度?
本帖最后由 小甲鱼的二师兄 于 2024-4-17 06:26 编辑
小甲鱼的二师兄 发表于 2024-4-17 06:23
告诉你把它改成 ry = WH - SH // BH 就可以了,还问什么 “所以有用吗?”
这不废话嘛?没用告诉你搞 ...
抱歉,我的意思是我只改了那一行问题还在,但全改就不在了
是我没搞清楚,没有实际运行,见谅 歌者文明清理员 发表于 2024-4-17 17:44
抱歉,我的意思是我只改了那一行问题还在,但全改就不在了
是我没搞清楚,没有实际运行,见谅
我以为你自己试都不试,误会! 看得出来楼上还挺暴躁的{:10_245:} 同上,不过这么说确实很容易被误会
页:
[1]