歌者文明清理员 发表于 2024-4-14 14:49:15

黑色的玩意咋回事

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 = 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(已经在代码里加上了),但这样造成的结果是少一行黑边,并没有让黑边消失

FishC 发表于 2024-4-14 14:49:30

你好!这是因为在绘制方块时,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 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2024-4-14 17:00:55

FishC 发表于 2024-4-14 14:49
你好!这是因为在绘制方块时,y 坐标的计算方式可能有误。现在的计算方式是 `SH - (y + 1) * BH`,但实际上 ...

没用

FishC 发表于 2024-4-14 17:01:16

歌者文明清理员 发表于 2024-04-14 17:00
没用

非常抱歉代码修改没有解决问题。那么我需要进一步了解你遇到的具体问题,以便更好地帮助你解决。你能提供更多关于"黑色的玩意"的问题描述吗?你是指在什么情况下出现的?是否有报错信息?请提供更多细节,我会尽力帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2024-4-14 19:23:38

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 20:52:34

小甲鱼的二师兄 发表于 2024-4-14 19:23


所以你改了啥

小甲鱼的二师兄 发表于 2024-4-15 03:32:14

歌者文明清理员 发表于 2024-4-14 20:52
所以你改了啥

ry = WH - SH // BH

歌者文明清理员 发表于 2024-4-15 17:29:57

小甲鱼的二师兄 发表于 2024-4-15 03:32
ry = WH - SH // BH

所以有用吗

小甲鱼的二师兄 发表于 2024-4-17 06:18:12

歌者文明清理员 发表于 2024-4-15 17:29
所以有用吗

你是不会自己运行一下还是怎么回事?!!


小甲鱼的二师兄 发表于 2024-4-17 06:20:46

歌者文明清理员 发表于 2024-4-15 17:29
所以有用吗

你真的是有点搞笑!

小甲鱼的二师兄 发表于 2024-4-17 06:23:42

本帖最后由 小甲鱼的二师兄 于 2024-4-17 06:26 编辑

rt,ai 说 58 行应该是 SH - (y + 1) * BH(已经在代码里加上了),但这样造成的结果是少一行黑边,并没有让黑边消失
告诉你把它改成 ry = WH - SH // BH 就可以了,还问什么 “所以有用吗?”

这不废话嘛?没用告诉你搞毛线?!

有没有用自己不会试一下吗?

这就是你求助的态度?

小甲鱼的二师兄 发表于 2024-4-17 06:25:18

本帖最后由 小甲鱼的二师兄 于 2024-4-17 06:26 编辑

歌者文明清理员 发表于 2024-4-17 17:44:40

小甲鱼的二师兄 发表于 2024-4-17 06:23
告诉你把它改成 ry = WH - SH // BH 就可以了,还问什么 “所以有用吗?”

这不废话嘛?没用告诉你搞 ...

抱歉,我的意思是我只改了那一行问题还在,但全改就不在了

是我没搞清楚,没有实际运行,见谅

小甲鱼的二师兄 发表于 2024-4-17 19:28:16

歌者文明清理员 发表于 2024-4-17 17:44
抱歉,我的意思是我只改了那一行问题还在,但全改就不在了

是我没搞清楚,没有实际运行,见谅

我以为你自己试都不试,误会!

sfqxx 发表于 2024-4-21 21:31:21

看得出来楼上还挺暴躁的{:10_245:}

liuhongrun2022 发表于 2024-6-3 22:33:26

同上,不过这么说确实很容易被误会
页: [1]
查看完整版本: 黑色的玩意咋回事