鱼C论坛

 找回密码
 立即注册
查看: 38|回复: 6

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

[复制链接]
发表于 前天 14:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)

效果错误:方块靠右就直接跳到最左边了。
最佳答案
前天 15:25
我将x=a这个多余步骤删除就完成了解决,谢谢指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 前天 14:55 | 显示全部楼层
写的过于乱,新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 14:59 | 显示全部楼层
你提到当方块靠右边的时候,`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 15:25 | 显示全部楼层    本楼为最佳答案   
我将x=a这个多余步骤删除就完成了解决,谢谢指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:52 | 显示全部楼层
变量命名的时候尽量起一个容易理解的名字,a、b、c、x、y、z 这类变量名尽量少用哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 14:32 | 显示全部楼层
好的,感谢指导
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-2 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表