Netlogo тикает как счетчик для гонки - PullRequest
0 голосов
/ 18 октября 2018

Я пишу код для гонки между 5 черепахами.Я должен показать, кто победит в гонке с помощью тиков.Я думаю, что могу использовать галочки, чтобы подсчитать, сколько времени требуется каждой черепахе, чтобы двигаться, а затем сравнить их.Тем не менее, я не могу понять, где поставить «галочку» в моем коде.Вот мой код:

    to finish
ask patches 
   ;sets finish line pattern
[ifelse (pxcor + pycor) mod 2 = 0 
   ;if true do this
[set pcolor pink]
   ;if false do this
[set pcolor yellow]
]

  ask patches 
   ;sets background black other than the finish line
 [if pxcor < 12 [set pcolor black]
 ]
 end
 to lanes
  ask patches
   ;sets the lanes
  [ if pycor = 3 and pxcor < 12 [set pcolor white] 
  if pycor = 9 and pxcor < 12 [set pcolor white] 
  if pycor = -3 and pxcor < 12 [set pcolor white] 
  if pycor = -9 and pxcor < 12 [set pcolor white] ]
   ;setup for the turtle positions
 cro 5
 ask turtle 0 [setxy -15 0]
 ask turtle 1 [setxy -15 6]
 ask turtle 2 [setxy -15 12]
 ask turtle 3 [setxy -15 -6]
 ask turtle 4 [setxy -15 -12]
 ask turtles [set heading 90] ;set heading 90 means moving the head of the    turtle right 90 degrees
 reset-ticks
end 

to setup
 finish
 lanes
end

to movecars
every .1 
[fd random 10 / 10]
end

to endrace
 movecars
if xcor >= 12 [die]
end

to go
endrace
end

1 Ответ

0 голосов
/ 18 октября 2018

Почти всегда tick идет как последняя команда в процедуре go.Конечно, это то, что вы должны делать, пока вы новичок в NetLogo.Сказав это, ваш код не заработает.

Думайте о тиках как о счетчике шагов времени.Каждый цикл в процедуре go должен выполнять все действия, для которых требуется один временной шаг, а также продвигать счетчик временных шагов.Таким образом, вам не нужна команда every, у вас есть только процедура movecars, вызванная процедурой go, и ask turtles [forward random 10 / 10] в процедуре movecars.

Это довольно фундаментальный концептуальный пробел, и я предлагаю вампросмотрите некоторые модели в библиотеке моделей NetLogo, сосредоточив внимание на связи между процедурой go и процедурой перемещения и течением времени.Или, возможно, сделать учебники снова.Кроме того, начните свою модель проще.Просто создайте одну машину и заставьте ее двигаться, а потом переживайте о нескольких машинах, цветах и ​​узнайте, кто победит.Добавьте маленький кусочек вашей модели и заставьте его работать, прежде чем добавлять следующий кусочек.

Попробуйте это:

to go
  movecars
  endrace
  tick
end

to movecars
  ask turtles [ fd random 10 / 10]
end

to endrace
  ask turtles [ if xcor >= 12 [die] ]
end
...