我如何在没有鼠标和按键的情况下在pygame中移动一个矩形?

how can i move a rectangle in py game without mouse and keys?

我有代码可以在 pygame 中从左到右、上下移动一个矩形。
但是我想在我创建的屏幕周围移动我的矩形.. 有人可以帮我吗?

import pygame
from pygame.locals import *
pygame.init()
FPS = 70
fpsclock = pygame.time.Clock()


SIZE = (1000, 700)
form1 = pygame.display.set_mode(SIZE)
WHITE=(255, 255, 255)
x = 0
y = 0
w = 50
h = 60
direction = 'right'
while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    form1.fill(WHITE)
    pygame.draw.rect(form1, (255, 0, 0), (x, y, w, h), 1)
    pygame.display.update()
    fpsclock.tick(FPS)

     if x,y==0,0:
        direction='right'
     if x,y==1200-50,0:
        direction='down'
     if x,y==1200-50,700-60:
        direction='left'
     if x,y==0,1200-50:
        direction='right'

所以首先要看的是间距。即使您的代码有效(在适当缩进后),正方形也超出了范围。

如果正方形应该上下移动,同样的事情也适用于 y。

如果你想让方块绕一圈,你只需要在正确的时间向左、向右、向上或向下移动。所以如果你想从左上角开始绕过去,你只需要检查正方形是否在一个角上,然后相应地改变方向。

请记住,向下实际上会增加 y,而向上会减少 y。

编辑:
在这里你可以看到我提出的概念的结果

编辑 2: 我已经复制了您的代码并重构并完成了它。我试图解释我为什么这么做。

import pygame 
# Only import the things you need it makes debugging and documenting 
# alot easier if you know where everything is coming from 
from pygame.locals import QUIT 
FPS = 70

# Use variables to define width and height in case you want to 
# change it later 
width = 200
height = 200

# I would group variables by usage, for example, I would group width, 
# height of the screen and w, h of the box so I can easily manipulate 
# the numbers if want to.
w = 50
h = 60

# Using an offset variable reduces the hardcoded numbers even more 
# if its 0 it will just move along the border but if it >0 it will move 
# the square to the centre
offset = 20

# You can declare it as a variable if you need the SIZE tuple somewhere 
# else, if you don't need it you can just set it as 
# pygame.display.set_mode((width, height))
SIZE = (width, height)
WHITE = (255, 255, 255)
RED =  (255, 0, 0)

x = offset
y = offset
direction = 'right'

# This is just my preference but I like to have the variables that are 
# changeable at the top for easy access. I think this way the code is 
# cleaner.
pygame.init()
fpsclock = pygame.time.Clock()
form1 = pygame.display.set_mode(SIZE)

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    form1.fill(WHITE)

    # Try to avoid hardcoded numbers as much as possible, hardcoded 
    # numbers are hard to change later on when the code gets to certain 
    # size and complexity. 
    pygame.draw.rect(form1, RED, (x, y, w, h), 1)
    pygame.display.update()
    fpsclock.tick(FPS)

    # Don't harcode conditions, use variables so you can easily change 
    # them later
    if x == offset and y == offset:
        direction='right'
    if x == width - w - offset and y == offset:
        direction='down'
    if x == width - w - offset and y == height - h - offset:
        direction='left'
    if x == offset and y == height - h - offset:
        direction='up'

    if direction == 'right':
      x += 5
    elif direction == 'down':
      #Keep in mind going down actually means to increment y
      y += 5
    elif direction == 'left':
      x -= 5
    elif direction == 'up':
      y -= 5