- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 RPS 函数,可以使计算机的移动随机化一回合。例如,如果您输入 rps("rock"),该函数将随机吐出石头、布、剪刀以及结果(赢、输、平)。
rps = function(move){
options = c("rock", "paper", "scissors")
comp.move = sample(options, size = 1)
if(move == "rock" & comp.move == "rock"){
names(comp.move) = "tie"
}else
if(move == "rock" & comp.move == "scissors"){
names(comp.move) = "loss"
}else
if(move == "rock" & comp.move == "paper"){
names(comp.move) = "win"
}else
if(move == "paper" & comp.move == "paper"){
names(comp.move) = "tie"
}else
if(move == "paper" & comp.move == "scissors"){
names(comp.move) = "win"
}else
if(move == "paper" & comp.move == "rock"){
names(comp.move) = "loss"
}else
if(move == "scissors" & comp.move == "scissors"){
names(comp.move) = "tie"
}else
if(move == "scissors" & comp.move == "rock"){
names(comp.move) = "win"
}else
if(move == "scissors" & comp.move == "paper"){
names(comp.move) = "loss"
}
return(comp.move)
}
现在,我想玩一个发生了 50 次这种情况的游戏版本。我已经创建了一个长度为 50 的向量,其中包含预先记录的人类 Action 。
human.move = c("rock", "paper", "scissors", "paper", "paper", "rock", "scissors", "rock", "rock", "paper", "paper", "scissors", "rock", "rock", "paper", "paper", "paper", "scissors", "paper", "rock", "paper", "rock", "rock", "scissors", "scissors", "paper", "rock", "paper", "scissors", "rock", "paper", "paper", "scissors", "rock", "paper", "rock", "paper", "paper", "scissors", "scissors", "paper", "rock", "rock", "scissors", "scissors", "rock", "paper", "scissors", "scissors", "rock")
如何让计算机对该向量中的每个元素运行 rps 函数,并给出结果?目前,我的函数仅采用人类移动向量的第一个元素(即岩石),并且仅将其随机移动与其进行比较。
rps.random=function(move,n=50){
comp.moves = vector("character")
for(i in human.move){
comp.move=rps(move[i])
comp.moves = append(comp.moves,comp.move, after = length(comp.moves))
}
return(comp.moves)
}
最佳答案
这里有一些建议。首先,更新您的功能。您可以通过使用一些带有 |
运算符的“或”语句来减少所有这些 if()
语句,以表示获胜或失败,并且使用 identical( )
平局函数。另外,据我了解,像这样的随机游戏应该一次玩一轮,并重复一轮以上。因此,该函数检查 move
中给出的单长度向量。
rps <- function (move) {
opts <- c("rock", "paper", "scissors")
stopifnot(length(move) == 1L, move %in% opts)
cpu <- sample(opts, 1)
names(cpu) <- if (identical(move, cpu)) {
"tie"
}
else if (move == "rock" & cpu == "scissors" | move == "paper" &
cpu == "rock" | move == "scissors" & cpu == "paper") {
"win"
}
else {
"loss"
}
cpu
}
这里有几个运行示例 -
rps("paper")
# win
# "rock"
rps("rock")
# loss
# "paper"
现在您无需手动创建包含 50 个项目的向量。我们可以通过使用 move
参数中的示例来重复该过程 50 次。
replicate(50, rps(sample(c("rock", "paper", "scissors"), 1)))
# win win loss win loss tie tie
# "scissors" "paper" "paper" "paper" "rock" "paper" "scissors"
# win loss loss tie loss win win
# "rock" "paper" "paper" "paper" "paper" "scissors" "scissors"
# tie loss tie win win tie loss
# "scissors" "rock" "scissors" "paper" "paper" "scissors" "rock"
# tie tie loss tie win win win
# "rock" "scissors" "scissors" "scissors" "rock" "scissors" "scissors"
# win win loss win tie tie win
# "scissors" "scissors" "paper" "paper" "paper" "paper" "paper"
# win tie win tie tie win win
# "paper" "rock" "rock" "paper" "scissors" "paper" "scissors"
# loss tie tie loss tie win win
# "rock" "rock" "paper" "scissors" "scissors" "rock" "rock"
# win
# "paper"
当然,如果您确实有输入向量,我们可以通过 sapply()
运行它,以查看与上面相同的结果(名称中包含或不包含输入向量)。
sapply(c("rock", "paper", "scissors"), rps)
# rock.loss paper.win scissors.tie
# "paper" "rock" "scissors"
sapply(c("rock", "paper", "scissors"), rps, USE.NAMES = FALSE)
# tie loss win
# "rock" "scissors" "paper"
更新:我突然意识到,在上述情况下,我们从 replicate()
获得的输入是不知道的,所以这里有一个使固定。如果我们将函数的最后一行更改为矩阵(或列表),我们还可以包含输入内容。我们可以在最后一行使用类似的内容 =
matrix(c(move, cpu), 1, dimnames = list(wlt, c("move", "cpu")))
然后我们会得到以下结果 -
rps("paper")
# move cpu
# loss "paper" "scissors"
rps("paper")
# move cpu
# tie "paper" "paper"
现在我们知道我们输入了什么作为输入,而无需做任何额外的工作。我们还可以与我们的老 friend do.call(rbind, ...)
一起将复制放入一个矩阵中。
关于r - 尝试在 R 中随机化石头、剪刀、布游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113184/
如何让玩家玩随机数量的比赛,然后以全部分数结束游戏? 我正在尝试做一个循环,让玩家玩多场比赛,并在最后询问是否还想玩。 public class RockPaperScissors { pub
我的石头剪刀布游戏遇到问题。当我玩游戏时,它会将胜利或失败记录为胜利和失败。我试图让它记录一场胜利和一场失败,并且不会为胜利和失败添加分数。有什么建议吗? import java.io.*; publ
#RoShamBo import random count=0 while count -2: compnum=random.randint(0,2) usernum=int(inpu
这是我的石头剪刀布游戏。 http://jsfiddle.net/Renay/hL3j5hm6/6/ 如何添加动画,在给出结果之前,图像上下弹跳时有 3,2,1 倒计时。我尝试过添加各种功
我的类(class)本周将举行机器人竞赛,我们应该让我们的机器人战胜其他人的机器人。比赛项目为石头、布、剪刀、炸药、水气球。炸药胜过一切,除了水气球,而水气球只胜过炸药。老师写了竞技场,还有其他一些机
我刚刚开始使用 python,需要一些帮助!我当时在做剪刀石头布游戏,我想在人或计算机赢得 3 场胜利后添加一个重启选项。 我已经四处寻找一些答案,但从我看到的所有其他代码来看,似乎超出了我的范围,或
我正在使用 Python 创建一个非常简单的石头剪刀布游戏,但无法解决这个问题。每次我在命令提示符中输入答案时,它都会输出消息“无效输入,请重试!”,这就是我告诉它在存在无效输入时执行的操作。但是,我
我需要实现一个石头剪刀布锦标赛模拟器,它将玩完所有回合并返回锦标赛。 这是我的锦标赛数组: tournament = [ [ [ ["Armando",
我遇到了一个问题,选择根本没有更新。我已经列出了每次选择后应显示最后结果和当前分数的位置。分数运行良好,但选择根本没有更新。谢谢。 Dynamic Web Squirtle,
我的图片和消息正在更改为显示获胜、失败、平局,但我的 javascript 增量似乎不起作用,因为我的分数没有改变。请帮忙:) Rock, Paper, Scissors Rock
我正在用 C# 制作石头、剪刀、布游戏,目前在有人输入非 R、S 或 P 的输入时尝试显示消息时遇到问题。例如,我正在尝试获取默认值在 switch 语句中工作,但我没有运气。这就是我目前所拥有的。如
我希望代码获取用户在输入字段中输入的值并将其传递给变量 userChoice。我不知道为什么这段代码不起作用,唯一的学习方法就是问你们。 HTML: Choose your destiny !
我正在用 C# 制作石头、剪刀、布游戏,目前在有人输入非 R、S 或 P 的输入时尝试显示消息时遇到问题。例如,我正在尝试获取默认值在 switch 语句中工作,但我没有运气。这就是我目前所拥有的。如
我的类(class)被分配了一个石头剪刀布游戏。以下是作业说明: 学习目标: 练习枚举的使用 创建一个包含构造函数、字段和方法的枚举 设计并实现您自己的 GUI 创建一个可运行的 jar 描述:编写一
我正在用Python创建一个石头剪刀布游戏。我的方法如下。然而,我不想打印玩家 1 和玩家 2,而是想让它们成为真实的名字。因此,可以说 John Wins 或 Joe Wins。如何实现每次打印玩家
我正在尝试完成类里面的石头、剪刀、布作业。 我收到“UnboundLocalError:赋值前引用的局部变量“绑定(bind)”” 错误。 有人可以告诉我为什么会收到此错误吗? import rand
我在 C++ 上学习石头剪刀布游戏时有一个游戏实例类。我想创建整数常量,它表示游戏中允许的符号数。对于经典的 rsp 游戏,它是 3(石头、剪刀和布),但是有一些有趣的 rcs 游戏扩展带有额外的符号
好吧,有件事一直困扰着我,但我一直找不到答案。这是 Codeacademy 的石头剪刀布游戏: var userChoice = prompt("Do you choose rock, paper o
我正在可汗学院编写一个剪刀石头布游戏,这样我就可以看到视觉效果,但是 var Compare = function(choice1, choice2) 无法正常工作。 html 它工作得很好。插入了我
我制作了一个基本的“石头、剪刀、布”游戏。我对这个项目有一些疑问/问题。 在我的浏览器上,不显示谁获胜的消息。如“计算机获胜”。我得到的结果如下: Computer: Paper You: rock
我是一名优秀的程序员,十分优秀!