Измените свои присвоения переменной fout
на <<-
, это задает переменную для глобальной среды, затем перед началом установите fout <- 0
в начале.
fout <- 0
Rolltwicethenstop <- function(sc, btt, sh, dout, dsel, dleft, porder)
{
for (i in 1:3)
{
if(dout[i]=="F")
{
fout<<-fout+1
}
}
if(fout+(13-length(dleft))>=6&btt>0)
{
return(FALSE)
}else if(fout+(13-length(dleft))>=6&&btt>0&&sh>0)
{
return(FALSE)
}else
{
return(TRUE)
}
}
Больше объяснений
В тот момент, когда вы вызываете свою функцию, вы устанавливаете переменную fout
в 0. Это проблема, так как каждый раз, когда вы вызываете функцию, вы устанавливаете ее в 0. Таким образом, мы перемещаем это за пределы функции.
Следующая проблема - когда вы добавляете 1 к переменной fout
, это определяется только в среде функции, поэтому мы изменяем это, назначая переменную global environment
.
Подробнее о средах и области применения здесь .
Альтернативный метод1
Я не уверен насчет вашей конкретной структуры, но другой подход заключается в добавлении переменной fout
в качестве аргумента в исходную функцию таким образом, чтобы
Rolltwicethenstop <- function(fout, sc, btt, sh, dout, dsel, dleft, porder)
и вернуть переменную fout вместе с другими значениями, например, изменить все возвращаемые функции на эту,
return(list(logic = FALSE, fout = fout))
Это должно работать для большинства целей.
Альтернативный метод2
Другим методом будет чтение и запись файла каждый раз, когда переменная fout
вызывается / определяется,
Например,
Сначала создайте файл со значением 0, который называется fout
,
write.csv(0, "fout")
Это создаст файл в папке,
getwd()
Затем вы можете прочитать значение обратно, используя следующее,
read.csv("fout")[1,2]
Поэтому отредактируйте свою функцию, чтобы читать и записывать эти файлы.
Для нескольких игроков добавьте аргумент под названием player.name
, затем вместо вызова файла 'fout'
назовите его paste0(fout, player.name)
.