2015-07-19 217 views
1

所以这是我正在进行的模拟的进度。这个模拟有一个球员列表,每个球员都有他们的分配点或得分。我有一个叫做游戏的补丁。有三十场比赛。一旦玩家击中了游戏(或者他们将在模拟中遇到),那么将会有一个标签显示已经完成的“击中”。三十场比赛中的每一场也都有自己的观点。点是随机生成的。使用If-Else语句打印在NetLogo中赢或输

所以我的问题是,如果他们赢得或没有赢得比赛,我将如何展示如何分配球员?我的情况是,如果玩家的分数大于或等于游戏的分数,那么它应该显示“你赢了比赛!”否则“你输了!”这发生在玩家和游戏相遇时。

我会在自己的球员身上放置另一个变量,以表明输赢。但是我的问题是,我一直试图编码if-else/if在移动过程中是否符合我想要的条件,但我很难。我需要帮助或关于如何做到这一点的线索。谢谢。

breed [players player] 
breed [games game] 
globals [namelist pointslist] 
players-own[name points] ;;going to add another variable here 
games-own[points istaken] 

to setup 
    ca 
    ask patches [set pcolor black] 
    set namelist["Player 1" "Player 2" "Player 3" "Player 4" "Player 5" "Player 6" "Player 7" "Player 8" "Player 9" "Player 10"] 
    set pointslist["1" "1" "1" "5" "3" "3" "4" "2" "2" "5"] 

    ;;define counter 
    let counter 0 ;;0-9 

    repeat 10 [ 
    create-players 1[ 
    set name item counter namelist 
    set points item counter pointslist 
    setxy random-xcor random-ycor 
    set shape "person" 
    pen-down 
] 
    set counter counter + 1 
    ] 

    create-games 30[ 
    set shape "circle" 
    setxy random-xcor random-ycor 
    set points random 5 + 1 ; 
    ] 

    reset-ticks 
end 

to go 
    tick 
    ask players[move] 
end 

;;this is the part where I added my if-else code but i cannot get it 
to move 
    ask players [ 
right(random 181) - 90 
fd 1 
let hw one-of games-here 
if hw != nobody[ 

    ask hw [set label "hit"] 
    ] 
    ] 

end 

回答

1

你的描述不完全清楚,但我认为这回应你的问题。 (请看最后的ifelse声明。)

globals [namelist pointslist] 
breed [players player] 
players-own[name points] ;;going to add another variable here 
breed [games game] 
games-own[points istaken] 

to setup 
    ca 
    ask patches [set pcolor black] 
    set namelist["Player 1" "Player 2" "Player 3" "Player 4" "Player 5" "Player 6" "Player 7" "Player 8" "Player 9" "Player 10"] 
    set pointslist[1 1 1 5 3 3 4 2 2 5] ;use numbers, not strings! 

    ;;define counter 
    let _counter 0 ;;0-9 

    create-players 10 [ 
    set name item _counter namelist 
    set points item _counter pointslist 
    setxy random-xcor random-ycor 
    set shape "person" 
    pen-down 
    set _counter (_counter + 1) 
    ] 

    create-games 30 [ 
    set shape "circle" 
    setxy random-xcor random-ycor 
    set points random 5 + 1 ; 
    ] 
    reset-ticks 
end 

to go 
    ask players[move] 
    tick 
end 

;;this is the part where I added my if-else code but i cannot get it 
to move 
    ;ask players [ ;ai don't ask player to ask players! 
    right(random 181) - 90 
    fd 1 
    let _hw one-of games-here 
    if _hw != nobody [ 
    ask _hw [set label "hit"] 
    ifelse (points > [points] of _hw) [ ;comparison of two *numbers* 
     show "won the game" 
    ] [ 
     show "lost the game" 
    ] 
    ] 
end 
+0

非常感谢您的解决方案。我想问,为什么球员不应该问球员?在你的评论中... – Barry

+0

我还想问这行代码“ifelse(points> [points] _hw” – Barry

+1

在'go'你有'问玩家[move]'这很好,但是那么你的'移动'开始于'提问玩家',这意味着每个玩家都会要求所有玩家进行'移动'动作,对于10个玩家,移动动作每次执行100次而不是10次。你给了玩家和游戏的'points'属性,但是玩家正在执行移动动作,当玩家正在执行移动动作时,'points'指向它的点(你可以用自己的[points]来代替它“) – Alan