Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能阻止乌龟重复同样的动作呢?_Python_Turtle Graphics_Python Turtle - Fatal编程技术网

Python 我怎样才能阻止乌龟重复同样的动作呢?

Python 我怎样才能阻止乌龟重复同样的动作呢?,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我试图创建吃豆人游戏,并设置敌人的随机移动。 但当我运行它时。它重复同样的动作,我怎样才能阻止敌人做出同样的动作,让敌人在地图上四处移动。 请解决我的问题,告诉我为什么会发生这种事。 按“空格键”,游戏开始 插入 在你的 random.choice([game.enemy[i]....... 命令将随机生成器置于随机状态。我终于找到了解决方案 def计算机移动(游戏): 因为我在游戏中。敌人: 正常移动逻辑(游戏.敌人[i],游戏) def正常移动逻辑(敌人进入,游戏进入): rn=0 如果敌

我试图创建吃豆人游戏,并设置敌人的随机移动。 但当我运行它时。它重复同样的动作,我怎样才能阻止敌人做出同样的动作,让敌人在地图上四处移动。 请解决我的问题,告诉我为什么会发生这种事。 按“空格键”,游戏开始

插入

在你的

random.choice([game.enemy[i].......

命令将随机生成器置于随机状态。

我终于找到了解决方案

def计算机移动(游戏):
因为我在游戏中。敌人:
正常移动逻辑(游戏.敌人[i],游戏)
def正常移动逻辑(敌人进入,游戏进入):
rn=0
如果敌方_in.last_dir不是None且敌方_in.last_键不是None:
如果敌人在游戏中最后一个按键在墙上:
random.seed(time.time())
rn=random.randint(0,3)
其他:
rn=敌人的最后一个钥匙
其他:
random.seed(time.time())
rn=random.randint(0,3)
如果rn==0:
敌人进入,进入(游戏)
elif rn==1:
敌人进入,倒下(游戏进入)
elif rn==2:
敌人进入,向左走(游戏进入)
其他:
敌人进入,右转(游戏进入)
并且稍微改变了敌人的等级

类敌人_创建者(海龟):
def u u init u u;(自、行、列、精灵、色码、宽度、高度):
super()。\uuuu init\uuuu(形状=精灵)
self.row=行
self.col=col
self.color(颜色代码)
自身形状大小(宽度、高度、3)
self.penup()
自身速度(“最慢”)
self.goto(self.coords(行、列))
self.last_key=None
self.last_dir=无
@静力学方法
def坐标(行、列):
x=col*25-250
y=137.5-第25行
返回x,y
@静力学方法
定义库存坐标(x,y):
col=圆形((x+250)/25)
行=圆形((137.5-y)/25)
返回行,列
def go_左(自我,游戏):
全球原油
如果cruns==False:
克鲁斯=真
self.game=游戏
position=self.xcor()-25,self.ycor()
键=自投坐标(*位置)
如果位置==(game.player[9,9].xcor(),game.player[9,9].ycor()):
screen.clear()
notout=False
如果键不在game.wall中:
self.goto(self.coords(*键))
self.last_key=key
self.last_dir=2
cruns=错误
def go_right(自我,游戏):
全球原油
如果cruns==False:
克鲁斯=真
self.game=游戏
position=self.xcor()+25,self.ycor()
键=自投坐标(*位置)
如果位置==(game.player[9,9].xcor(),game.player[9,9].ycor()):
screen.clear()
notout=False
如果键不在game.wall中:
self.goto(self.coords(*键))
self.last_key=key
self.last_dir=3
cruns=错误
def上升(自我,游戏):
全球原油
如果cruns==False:
克鲁斯=真
self.game=游戏
位置=self.xcor(),self.ycor()+25
键=自投坐标(*位置)
如果位置==(game.player[9,9].xcor(),game.player[9,9].ycor()):
screen.clear()
notout=False
如果键不在game.wall中:
self.goto(self.coords(*键))
self.last_key=key
self.last_dir=0
cruns=错误
def下降(自我,游戏):
全球原油
如果cruns==False:
克鲁斯=真
self.game=游戏
位置=self.xcor(),self.ycor()-25
键=自投坐标(*位置)
如果位置==(game.player[9,9].xcor(),game.player[9,9].ycor()):
screen.clear()
notout=False
如果键不在game.wall中:
self.goto(self.coords(*键))
self.last_key=key
self.last_dir=1
cruns=错误
而且效果很好

看起来像

def computermove(game):
    for i in game.enemy:
        a=game.enemy[i]
        random.choice([game.enemy[i].go_up(game),game.enemy[i].go_down(game),game.enemy[i].go_left(game),game.enemy[i].go_right(game)])
    
运行每个移动选项一次(例如game.敌军[i].go_up(游戏)),收集所有返回值(均为无),然后从四个无值列表中随机选择一个无;-)

也许试试

movement = random.choice([a.go_up, a.go_down, a.go_left, a.go_right])
movement(game)
因此,您首先随机选择方法,然后执行它。

当您在定义的函数名后添加
()
时,您告诉python在程序到达该行时调用它。是的,即使你把它存储在一个列表中,比如

[print("test")]
返回

test
[None]
其中输出的
test
print()
函数的结果,
None
print()
调用的返回值

因此,只需将括号移到
random.choice()
函数的外部即可。 我还使用了该功能,因为代码中没有使用键:

def computermove(game):
    for a in game.enemy.values():
        random.choice([a.go_up, a.go_down, a.go_left, a.go_right])(game)

请注意,在您的代码中,您定义了
a
变量,但从未在函数中使用过它。

如果您提供一些有关您对其代码所做更改以及更改原因的详细信息,可能会有所帮助;-)
test
[None]
def computermove(game):
    for a in game.enemy.values():
        random.choice([a.go_up, a.go_down, a.go_left, a.go_right])(game)