问题描述
这是我操纵的一个双人游戏的代码
o play-the-game
if (any-friends-nearby?) [gain-energy]
if (any-opponents-nearby?) [fight-opponent]
end
to-report any-friends-nearby?
report (any? (turtles-on neighbors4) with [breed = [breed] of myself])
end
to-report any-opponents-nearby?
report (any? (turtles-on neighbors4) with [breed != [breed] of myself])
end
to gain-energy
set similar-nearby count ( turtles-on neighbors4 )
with
[color = [color] of myself]
set total-nearby count (turtles-on neighbors)
;
;
if (similar-nearby >= total-nearby - similar-nearby)
[set energy energy + 5]
end
to fight-opponent
let my-breed [breed] of green-players
let my-color [color] of green-players
let opponent-breed [breed] of red-players
;
;;
ask my-breed
[check-random-winner]
end
to check-random-winner
let pick random-float 2
let winner nobody
ask turtles
[if winner = nobody
[ ifelse size > pick
[set winner self ]
[set pick pick - size] ] ]
end
to change-opponent
ask red-players
[ set breed green-players
set color green ]
end
抱歉,如果它有点长,但当我设置并按GO时,询问期望的输入是一个代理或代理集,但得到了列表[Green-Players...]
我如何修复此问题?另外,我对Netlogo和StackOverflow还很陌生,如果我没有问好我的问题,很抱歉。
推荐答案
错误消息告诉您,当涉及ask my-breed
时,您正在向ask
传递列表(更具体地说,是品种列表)。
这是因为my-breed
局部变量由
let my-breed [breed] of green-players
让我们看看我们有什么:
breed
is a turtles-own variable:它保存海龟的品种,作为代理变量可以用作of
构造中的报告变量(见下文)。of
is a reporter:它的左边有一个报告器(通常是代理的变量)(在您的例子中:breed
),在右边有一个代理或代理集(在您的例子中:green-players
)。of
报告的内容(即它输出的内容)是...- .如果右侧有代理,则为单一值。
- .如果右侧有代理集,则为值列表*。
*想一想:如果我问你眼睛的颜色(你是一个人,即一个人),你会告诉我一个颜色。但如果我问你朋友的眼睛的颜色(你的朋友是一群人,也就是一个代理商),你回答我的问题的唯一方法就是告诉我一张颜色清单。
green-players
is an agentset:所有类型为green-players
的代理(请注意,对于NetLogogreen-players
是一个代理集,即使它包含1个或0个代理)。
of
报告了品种列表,因为它报告了green-players
中每个代理的品种,因此它将报告列表[green-players green-players green-players green-players ... ]
,该列表与模型中的green-players
的数量一样长。您可以通过单击setup
,然后在命令中心运行[breed] of green-players
来验证这一点。这是不是代理或代理集(这是ask
的唯一可能目标)的品种列表(也可以视为代理集列表)。
((请注意,let my-color [color] of green-players
和let opponent-breed [breed] of red-players
会发生完全相同的事情))
with
(read here why)。但是如何修复您的代码?我不知道,因为我不明白你想要达到什么目的。
我不确定您希望如何在您发布的代码中使用它,因为我甚至不确定您是否需要在fight-opponent
中使用ask
(更不用说ask
代理集了)。您的fight-opponent
过程是这样的,除了我们刚才讨论的问题之外,";my-";内容(即my-breed
和my-color
)总是指绿色玩家,而opponent-breed
总是指红色玩家--即使fight-opponent
是由红色玩家运行的!而且,还不清楚你想要用check-random-winner
程序达到什么目的,也不清楚你是否希望这个程序由整个品种来运行。这些情况使您很难理解如何修复fight-opponent
过程。例如:您想让谁运行check-random-winner
命令?
这篇关于正在获取要求输入为代理或代理集的预期输入(&Q;),但获得了列表[绿色玩家在网络中出错(&Q&Q;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!