请问这串代码为什么角色移动时,会将运动轨迹留下?

python版本是3.9
安装了pygame
操作系统为Windows
代码如下

import pygame
import random
import sys
import time

pygame.init()
screen = pygame.display.set_mode((727, 414))
pygame.display.set_caption("斩将")
Black = (255,255,255)
bgImg = pygame.image.load("bg1.png")
loseImg = pygame.image.load("fail.png")
sucImg = pygame.image.load("success.png")
imgList = []

class Bullet():
    def __init__(self,h):
        self.images = {
            "right":pygame.image.load("bullet.png"),
            "down":pygame.image.load("bullet2.png"),
            "left":pygame.image.load("bullet3.png"),
            "up":pygame.image.load("bullet4.png"),
        }
        self.start_way = "left"
        self.image = self.images[self.start_way]
        self.speed = 70
        self.rect = pygame.Rect(h.rect.x, h.rect.y, 17, 17)
        self.way = h.way
        self.rect.x = h.rect.x
        self.rect.y = h.rect.y

    def move(self):
        if self.way == "up":
            self.start_way = "up"
            self.image = self.images[self.start_way]
            self.rect.y = self.rect.y - self.speed
        if self.way == "down":
            self.start_way = "down"
            self.image = self.images[self.start_way]
            self.rect.y = self.rect.y + self.speed
        if self.way == "left":
            self.start_way = "left"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x - self.speed
        if self.way == "right":
            self.start_way = "right"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x + self.speed
            
    def show(self, screen):
        screen.blit(self.image, self.rect)
        
    def hit(self, e):
        if self.rect.colliderect(e.rect):
            e.hp = e.hp - 50
            
            
class Hero():
    def __init__(self):
        self.hp = 100
        self.images = {
            "right":pygame.image.load("hero.png"),
            "left":pygame.image.load("hero2.png"),
            }
        self.start_way = "left"
        self.image = self.images[self.start_way]
        self.rect = pygame.Rect(570,232,50, 50)
        self.bulletList = []

    def move(self, way, num):
        self.way = way
        if self.way == 'up':
            self.rect.y = self.rect.y - num
        elif self.way == 'down':
            self.rect.y = self.rect.y + num
        elif self.way == 'left':
            self.start_way = "left"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x - num
        elif self.way == 'right':
            self.start_way = "right"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x + num

    def show(self, screen):
        screen.blit(self.image, self.rect)

    def fire(self):
        bullet1 = Bullet(self)
        heroBulletList.append(bullet1)
        
    def sf(self):
        bullet2 = NewBullet(self)
        heroBulletList2.append(bullet2)
        
        
class Enemy():
    def __init__(self):
        self.way = random.choice(["up", "down", "left", "right"])
        self.image = pygame.image.load("enemy.jpg")
        x = random.randint(0, 450)
        y = random.randint(20, 100)
        self.rect = pygame.Rect(x, y, 50, 50)
        self.hp = 30

    def move(self, num):
        if self.way == 'up':
            self.rect.y = self.rect.y - num
            if self.rect.y < 0:
                self.way = "down"
        elif self.way == 'down':
            self.rect.y = self.rect.y + num
            if self.rect.y > 450:
                self.way = "up"
        elif self.way == 'left':
            self.rect.x = self.rect.x - num
            if self.rect.x < 0:
                self.way = "right"
        elif self.way == 'right':
            self.rect.x = self.rect.x + num
            if self.rect.x > 450:
                self.way = "left"

    def show(self, screen):
        screen.blit(self.image, self.rect)

    def hit(self, h):
        if self.rect.colliderect(h.rect):
            h.hp = h.hp - 50
            
            
class GunEnemy(Enemy):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("gun_enemy.png")
        self.t = time.time()

    def hit(self,h):
        if self.rect.colliderect(h.rect):
            h.hp = h.hp - 0

    def fire(self):
        bullet = Bullet(self)
        enemiesBulletList.append(bullet)
            
            
class NewBullet():
    def __init__(self,h):
        self.images = {
            "right":pygame.image.load("newbullet.jpg"),
            "down":pygame.image.load("newbullet2.jpg"),
            "left":pygame.image.load("newbullet3.jpg"),
            "up":pygame.image.load("newbullet4.jpg"),
        }
        self.start_way = "left"
        self.image = self.images[self.start_way]
        self.speed = 150
        self.rect = pygame.Rect(h.rect.x, h.rect.y, 17, 17)
        self.rect.x = h.rect.x
        self.rect.y = h.rect.y
        self.way = h.way
    def move(self):
        if self.way == "up":
            self.start_way = "up"
            self.image = self.images[self.start_way]
            self.rect.y = self.rect.y - self.speed
        if self.way == "down":
            self.start_way = "down"
            self.image = self.images[self.start_way]
            self.rect.y = self.rect.y + self.speed
        if self.way == "left":
            self.start_way = "left"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x - self.speed
        if self.way == "right":
            self.start_way = "right"
            self.image = self.images[self.start_way]
            self.rect.x = self.rect.x + self.speed
    def show(self, screen):
        screen.blit(self.image, self.rect)
    def hit(self, e):
        if self.rect.colliderect(e.rect):
            e.hp = e.hp - 200
            
num = 1            
enemiesNum = 3
enemiesList = []
hitEnemy = 0
for i in range(enemiesNum):
    enemiesList.append(Enemy())
    enemiesList.append(GunEnemy())
hero = Hero()
win = 2
heroBulletList = []
heroBulletList2 = []
enemiesBulletList = []
t1 = time.time()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                hero.move("right", 50)
            elif event.key == pygame.K_LEFT:
                hero.move("left", 50)
            elif event.key == pygame.K_UP:
                hero.move("up", 50)
            elif event.key == pygame.K_DOWN:
                hero.move("down", 50)
            elif event.key == pygame.K_SPACE:
                try:
                    hero.fire()
                except AttributeError:
                    print('请使角色移动!')
                else:
                    hero.fire()
            elif event.key == pygame.K_1:
                try:
                    hero.sf()
                except AttributeError:
                    print('请使角色移动!')
                else:
                    hero.sf()

    hero.show(screen)
    live = 0
    for m in enemiesList:
        if m.hp > 0:
            live = 1
            m.move(1)
            m.show(screen)
            m.hit(hero)
        if hasattr(m,"fire"   ):
                t2 = time.time()
                x = int((t2 - t1) * 10)
                if x % 15 == 0:
                    m.fire()
        time.sleep(0.01)
    
    for b in heroBulletList:
        b.show(screen)
        b.move()
        #在158行完成子弹的hit函数的调用,注意参数哦
        for m in enemiesList:
            b.hit(m) 
    for a in heroBulletList2:
        a.show(screen)
        a.move()
        #在158行完成子弹的hit函数的调用,注意参数哦
        for n in enemiesList:
            a.hit(n) 
    for b in enemiesBulletList:
        b.show(screen)
        b.move()
        b.hit(hero)
    # 超出屏幕的子弹删除掉
    for b in heroBulletList:
        if b.rect.x < -50 or b.rect.x > 550 or b.rect.y < -50 or b.rect.y > 550:
            heroBulletList.remove(b)
    if hero.hp <= 0:
        win = 0
        break

    if live == 0:
        win = 1
        break
    pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    if win == 1:
        screen.blit(sucImg, (0, 0))
        sys.exit()
    if win == 0:
        screen.blit(loseImg, (0, 0))
        sys.exit()
    pygame.display.update()