Каждый раз, когда я запускаю это приложение в первый раз, выходное значение для запасных денежных средств обновляется на основе предыдущего броска кубика (если последний бросок был выигрышем, он увеличивает значение, если последнее значение было проигрышем, это уменьшает значение), и если я перезапущу приложение, оно будет делать это снова после 12 полных входов в обоих запусках.Перезапуск после этого и все нормально по какой-то причине.Кроме того, поскольку s отстает, выход Game Over также отстает.Почему это так?
Я попытался полностью удалить e и func1, чтобы проверить, была ли моя проблема с другими частями интерфейса, но это не решило мою проблему.Хотелось бы, чтобы я понял, почему это вызывает проблему таким специфическим и предсказуемым образом, потому что я не знаю, что особенного в том, что приходится повторно запускать и вводить значения 12 раз.Хотелось бы предоставить больше информации, но я зашла в тупик.
РЕДАКТИРОВАТЬ: я определил betting1 как реактивную функцию сейчас на сервере (и изменил betting1 (input $ сумму) на betting1 () соответственно)и та же проблема все еще существует.
library(shiny)
e <- 0
betting1 <- function(p){
if(is.numeric(p)==T){
x <<- sample(1:6, size = 1)
y <<- sample(1:6, size = 1)
z <<- sum(x,y)
print(z)
if (z == 6| z == 7| z == 8| z == 12) {
e <<- 1
t <- p }
else {
e <<- 0
t <- -p }
return(t)
}
}
func1 <- function(b){
if (e==1){print(paste0("Won: $", b))}
else if(e==0) {print(paste0("Lost: $", b))}}
# Define UI ----
ui <- fluidPage(titlePanel("Game pays you back the amount that you bet. Win on a dice sum of: 6, 7, 8, or 12. Start with $100."),
fluidRow(
sidebarPanel("Game Info: ",br(),"Game #1",
textOutput("numeric_amount"),
textOutput("roll"),
textOutput("outcome")
),
column(4,numericInput("amount", h3("$ Betting Amount"), value = NA)),
column(8,submitButton("Confirm Bet"))
),
mainPanel(
textOutput("game_info"),
textOutput("avg"), br(),
textOutput("plays"), br(),
textOutput("Game_Over"), br(), br(),
textOutput("saves")
)
)
# Define server logic ----
server <- function(input, output){
v <- NULL
s <- 100
i <- 0
output$game_info <- renderText({
l<-betting1(input$amount)
if(input$amount>0 & is.numeric(input$amount)==T){ s<<-(s+l) }
paste("Spare Cash: $", s)})
output$numeric_amount <- renderText({paste("Your last bet: $", input$amount)})
output$avg <- renderText({
if(input$amount>0 & is.numeric(input$amount)==T){
v<<-c(v, input$amount)
paste("Average bet: $", mean(v))}
})
output$outcome <- renderText({paste(func1(input$amount)) })
output$plays <- renderText({
if(input$amount>0 & is.numeric(input$amount)==T){
i<<-i+1
paste("Plays: ", i)}
else{ paste("Plays: ", i)}
})
output$roll <- renderText({
if(input$amount>0 & is.numeric(input$amount)==T){
paste("First Die: ", x, " Second Die: ", y, " Sum: ", z)}
})
output$Game_Over <- renderText({
if(input$amount>0 & is.numeric(input$amount)==T){
if (s<=0){paste("Game Over. Tally your results (Spare Cash, Avg. Bet, Plays) and send them to - with your game number.")}
else {paste("You can choose to stop at any point. When you do, tally your results (Spare Cash, Avg. Bet, Plays) and send them to - with your game number.") }
}
else { paste("Please input a number larger than 0.")}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)