图图代码没报错 发表于 2024-11-30 14:53:52

搞不明白我的方块为什么一靠右边x值就为零,该怎么修改

import random
import pygame

#定义的一些参数
BLOCKSIZE = 30#方块的大小
color = (0,0,0)#背景颜色
#随机生成方块颜色的函数
def getRandomColor():
    btcolor = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
    return btcolor

bgcolor = color#背景颜色
FPSCLOCK = pygame.time.Clock()#创建clock对象
FPS = 60

#初始化
pygame.init()
#窗口的大小
winset = pygame.display.set_mode((640, 480))
#背景填充颜色
winset.fill(bgcolor)
baseSurf = winset.copy()#将背景复制一遍存一个备份
#窗口标题
pygame.display.set_caption("随鼠标移动的彩色小方块")
x=0.5*(640-BLOCKSIZE)
y=0.5*(480-BLOCKSIZE)

blockRect = pygame.Rect(x,y, BLOCKSIZE, BLOCKSIZE)# 小方块的x,y,width,height
pygame.draw.rect(winset, getRandomColor(), blockRect)# 描绘小方块
pygame.display.update()# 更新之后才能看到新画面
winset.blit(baseSurf, (0, 0))
#游戏主体
while True:
    for event in pygame.event.get():#获取用户的事件
      if event.type == pygame.KEYDOWN:
                print("外循环")
                a=0
                while 0<=x<=600 and 0<=y<=300 and a<1:
                  a=0
                  b=0
                  print("内循环")
                  if event.key in (pygame.K_LEFT, pygame.K_a):
                        for event in pygame.event.get():
                            print(event)
                            if event.type == pygame.KEYUP:
                              a=blockRect.x
                              b=blockRect.y# 获取用户的事件
                              print("松开键盘")
                              a+=1
                              continue
                        x -=1
                        blockRect = pygame.Rect(x, y, BLOCKSIZE, BLOCKSIZE)# 小方块的x,y,width,height
                        pygame.draw.rect(winset, getRandomColor(), blockRect)# 描绘小方块
                        pygame.display.update()# 更新之后才能看到新画面
                        winset.blit(baseSurf, (0, 0))# 使用原背景覆盖之前的图片

                  elif event.key in (pygame.K_RIGHT,pygame.K_d):
                        for event in pygame.event.get():
                            print(event)
                            if event.type == pygame.KEYUP:
                              a=blockRect.x
                              b=blockRect.y# 获取用户的事件
                              print("松开键盘")
                              a+=1
                              continue
                        x +=1
                        blockRect = pygame.Rect(x, y, BLOCKSIZE, BLOCKSIZE)# 小方块的x,y,width,height
                        print(blockRect.x)
                        pygame.draw.rect(winset, getRandomColor(), blockRect)# 描绘小方块
                        pygame.display.update()# 更新之后才能看到新画面
                        winset.blit(baseSurf, (0, 0))# 使用原背景覆盖之前的图片

                  elif event.key in (pygame.K_UP, pygame.K_w):
                        for event in pygame.event.get():
                            print(event)
                            if event.type == pygame.KEYUP:
                              a=blockRect.x
                              b=blockRect.y# 获取用户的事件
                              print("松开键盘")
                              a+=1
                              continue
                        y -= 1
                        blockRect = pygame.Rect(x, y, BLOCKSIZE, BLOCKSIZE)# 小方块的x,y,width,height
                        pygame.draw.rect(winset, getRandomColor(), blockRect)# 描绘小方块
                        pygame.display.update()# 更新之后才能看到新画面
                        winset.blit(baseSurf, (0, 0))# 使用原背景覆盖之前的图片

                  elif event.key in (pygame.K_DOWN, pygame.K_s):
                        for event in pygame.event.get():
                            print(event)
                            if event.type == pygame.KEYUP:
                              a=blockRect.x
                              b=blockRect.y# 获取用户的事件
                              print("松开键盘")
                              a+=1
                              continue
                        y += 1
                        blockRect = pygame.Rect(x, y, BLOCKSIZE, BLOCKSIZE)# 小方块的x,y,width,height
                        pygame.draw.rect(winset, getRandomColor(), blockRect)# 描绘小方块
                        pygame.display.update()# 更新之后才能看到新画面
                        winset.blit(baseSurf, (0, 0))# 使用原背景覆盖之前的图片

                  elif event.key == pygame.K_ESCAPE:
                        pygame.quit()# 退出
                        exit()# 正确退出
                print(x, y)
                x = a
                print(x, y)
                if x == -1:
                  x += 1
                elif x == 609:
                  x -= 1
                elif y == -1:
                  y += 1
                elif y == 301:
                  y -= 1
                elif x == -1 and y == -1:
                  x += 1
                  y += 1
                elif x == 609 and y == -1:
                  x -= 1
                  y += 1
                elif y == 301 and x == -1:
                  y -= 1
                  x += 1
                elif y == 301 and x == 609:
                  y -= 1
                  x -= 1
                print(x, y)

    #控制帧率
    FPSCLOCK.tick(30)

效果错误:方块靠右就直接跳到最左边了。

图图代码没报错 发表于 2024-11-30 14:55:26

写的过于乱,新手

FishC 发表于 2024-11-30 14:59:11

你提到当方块靠右边的时候,`x` 值变为零。这个问题可能由一些逻辑错误导致,例如在处理方块移动时没有正确判断边界条件。虽然你的代码片段没有包含具体的移动逻辑,但我可以提供一个可能的解决方案,帮助你检查并修复边界问题。

假设你的游戏逻辑允许通过某种方式(例如鼠标或键盘事件)移动方块,你需要确保在移动方块时不会超出窗口的边界。以下是一个简单的检查逻辑,可以在你处理方向输入的时候使用:

# 检查方块移动逻辑的边界条件 (假设你已经获得新的 x 值)
new_x = ...# 根据你的事件驱动的逻辑得到新 x 位置

# 确保方块不会超出窗口的右边界
if new_x + BLOCKSIZE > 640:
    new_x = 640 - BLOCKSIZE

# 同样地,确保方块不会超出窗口的左边界
if new_x < 0:
    new_x = 0

# 更新位置
blockRect.x = new_x

在游戏循环中,每次更新方块位置时,请确保使用这样的边界检查。这将阻止方块移动出窗口区域,从而避免 `x` 值意外重置为零或其他不期望的值。

希望这能帮助你排查并解决问题。如果需要进一步的帮助,请提供更多背景或代码细节。

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

图图代码没报错 发表于 2024-11-30 15:25:37

我将x=a这个多余步骤删除就完成了解决,谢谢指教{:10_254:}{:10_254:}

FishC 发表于 2024-11-30 15:26:12

图图代码没报错 发表于 2024-11-30 15:25
我将x=a这个多余步骤删除就完成了解决,谢谢指教{:10_ ...

不客气!很高兴能帮到你!删除不必要的步骤可以让代码更简洁。如果有其他问题或者需要进一步的帮助,欢迎随时提问哦! {:10_297:}

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

小甲鱼的二师兄 发表于 2024-11-30 15:52:40

变量命名的时候尽量起一个容易理解的名字,a、b、c、x、y、z 这类变量名尽量少用哈

图图代码没报错 发表于 2024-12-1 14:32:53

好的,感谢指导{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 搞不明白我的方块为什么一靠右边x值就为零,该怎么修改