【问题标题】:Print Win or Lose in NetLogo using If-Else Statement使用 If-Else 语句在 NetLogo 中打印赢或输
【发布时间】:2015-07-19 04:56:25
【问题描述】:

这就是我正在进行的模拟的进展。这个模拟有一个球员名单,每个球员都有他们分配的分数或分数。我有一个补丁叫做游戏。有三十场比赛。一旦玩家进入游戏(或者如果他们将在模拟中相遇),就会有一个标签显示“命中”,它已经完成。三十场比赛中的每一场也都有自己的积分。点是随机生成的。

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

我将在我的玩家拥有的变量中放置另一个变量,以指示它是赢还是输。但我的问题是,我一直在尝试为我想要的条件编写 if-else/if on the move 过程,但我遇到了困难。我需要帮助或有关如何执行此操作的一些线索。谢谢。

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

【问题讨论】:

    标签: if-statement simulation netlogo


    【解决方案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
    

    【讨论】:

    • 非常感谢您提供此解决方案。我想问一下,为什么玩家不应该问玩家?您评论中的那个...
    • 我也想问这行代码"ifelse(points > [points] of _hw"
    • go 你有ask players [move]。这很好。但是你有moveask players 开头。这意味着每个玩家都将要求所有玩家执行move 操作。对于 10 名玩家,移动动作每刻执行 100 次,而不是 10 次。您为玩家和游戏都赋予了points 属性,但玩家正在运行移动动作。当玩家运行移动动作时,points 指的是它的点。 (您可以将其替换为 [points] of self。)hth