搞不明白我的方块为什么一靠右边x值就为零,该怎么修改
import randomimport 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)
效果错误:方块靠右就直接跳到最左边了。 写的过于乱,新手 你提到当方块靠右边的时候,`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 小助理,如未能正确解答您的问题,请继续追问。 我将x=a这个多余步骤删除就完成了解决,谢谢指教{:10_254:}{:10_254:} 图图代码没报错 发表于 2024-11-30 15:25
我将x=a这个多余步骤删除就完成了解决,谢谢指教{:10_ ...
不客气!很高兴能帮到你!删除不必要的步骤可以让代码更简洁。如果有其他问题或者需要进一步的帮助,欢迎随时提问哦! {:10_297:}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 变量命名的时候尽量起一个容易理解的名字,a、b、c、x、y、z 这类变量名尽量少用哈 好的,感谢指导{:10_254:}{:10_254:}{:10_254:}
页:
[1]