微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不使用全局变量的情况下编写重复移动函数?

如何解决如何在不使用全局变量的情况下编写重复移动函数?

我正在 Pygame 中编写我的第一个游戏,我创建了一个敌人创建函数,以便在给定坐标之间调用这个敌人。 (在while循环内调用

def foot_function(x_1,x_2,y_foot):
    global x
    global rubbish_2
    global rubbish_3
    global rubbish_4
    steps = int((x_2 - x_1) / 3)  # numbers of steps between x_1 and x_2
    if rubbish_3:
        rubbish_2 += 1
    if not rubbish_3:
        rubbish_2 -= 1

    if rubbish_2 >= steps:
        rubbish_3 = not rubbish_3
        rubbish_4 = 'right'

    if rubbish_2 < 0:
        rubbish_3 = not rubbish_3
        rubbish_4 = 'left'

    if rubbish_4 == 'right':
        window.blit(foot_right,(x_1 + 3 * rubbish_2 - x,y_foot))
    if rubbish_4 == 'left':
        window.blit(foot_left,y_foot))
    death_function(x_1 + 3 * rubbish_2 + 5,y_foot + 5,90,90)

问题是因为我在这函数中使用了全局变量;如果我再次尝试调用函数,尽管我给了他们不同的输入,但 2 个敌人会做相同的动作。

我该如何解决这个问题?提前致谢。

解决方法

如果我理解你的问题,你正在尝试编写一个有状态的更新函数而不保持全局状态。我知道有两种方法可以稍微理智地做到这一点。

您基本上可以对全局变量执行相同的操作,但处于存储在对象中的状态。例如,这允许您同时运行两个独立的 FootClass 对象。

class FootClass():
    def __init__(self,x_1,x_2):
        self.x_1 = x_1
        self.x_2 = x_2

    def move(self,dx_1,dx_2):
        self.x_1 += dx_1
        self.x_2 += dx_2
    ...

功能性

第二种方法是让正在运行的东西保持状态,然后写一个更新函数。

def move_func(x_1,x_2,dx_2):
    return (x_1 + dx_1,x_2 + dx_2)

def game():
    init = (1,2)
    while not_dead():
        init = move_func(*init,2,5)

这是一个奇怪的例子,因为我不太了解您具体要做什么,但这是总体思路。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。