等价于R中的C getch()
为了好玩,我正在等价于R中的C getch(),r,R,为了好玩,我正在R中开发一款2048游戏。我使用扫描(n=1)用户输入他/她的移动键。但与脚本语言一样,它需要按Enter键才能继续 问:有没有什么方法可以让C中的getch这样的东西在R中应用,只需按购买按钮而不按Enter 任何帮助都将不胜感激。我建议您使用windows/x11图形环境处理程序() 下面是一个打开窗口的示例,您可以使用键盘箭头移动蓝色正方形: keyboardAwareSquare <- function(){ currPosition <- c(0,0,1
R
中开发一款2048
游戏。我使用扫描(n=1)
用户输入他/她的移动键。但与脚本语言一样,它需要按Enter
键才能继续
问:有没有什么方法可以让C
中的getch
这样的东西在R
中应用,只需按购买按钮而不按Enter
任何帮助都将不胜感激。我建议您使用windows/x11图形环境处理程序() 下面是一个打开窗口的示例,您可以使用键盘箭头移动蓝色正方形:
keyboardAwareSquare <- function(){
currPosition <- c(0,0,1,1)
drawRect <- function(){
plot(c(0, 4), c(0, 4), type= "n", xlab = "", ylab = "",xaxt='n',yaxt='n')
rect(currPosition[1],currPosition[2],currPosition[3],currPosition[4],col='lightblue')
}
keydown <- function(key) {
offsetX <- 0
offsetY <- 0
if(key=='Left') offsetX <- -1
if(key=='Right') offsetX <- 1
if(key=='Down') offsetY <- -1
if(key=='Up') offsetY <- 1
if(!any(currPosition[c(1,3)] + offsetX < 0) && !any(currPosition[c(1,3)] + offsetX > 4)){
tmp <- currPosition
tmp[c(1,3)] <- tmp[c(1,3)] + offsetX
currPosition <<- tmp
}
if(!any(currPosition[c(2,4)] + offsetY < 0) && !any(currPosition[c(2,4)] + offsetY > 4)){
tmp <- currPosition
tmp[c(2,4)] <- tmp[c(2,4)] + offsetY
currPosition <<- tmp
}
drawRect()
}
drawRect()
setGraphicsEventHandlers(prompt='use the keyboard arrows to move',onKeybd = keydown)
eventEnv <- getGraphicsEventEnv()
}
# this part works differntly according to your OS
if(.Platform$OS.type == 'unix') x11(type = "Xlib") else x11()
keyboardAwareSquare()
getGraphicsEvent()
keyboardawarsquare当然@digEmAll会为我提供完美的解决方案。出于我的目的,twitter上的Henrik Bengtsson给了我一个与getch
完全等效的解决方案。
为此,我们需要安装keypress
cran
软件包:
install.packages(“按键”)
然后就可以使用了:
图书馆(按键)
y=keypress()
然后等待第一个按键。这个软件包最棒的地方在于它支持非字符键,比如pagedown
、up
、down
等等。我建议您不要使用控制台,而是看一看:@digEmAll我读了您发送的手册!我可以说这是很好的工具。但是当我尝试安装grDevices
包时,它不存在于此:包'grDevices'不可用(对于R版本3.3.2)
该包应随R-base一起提供,您不需要在setGraphicHandler
中安装它,我遇到此错误错误:未设置图形事件处理程序
您使用的是windows、linux还是mac?我已将windows函数替换为x11,可能现在可以使用x11启用了吗?你能在R中查看功能()的输出吗?@digmall是的!它已启用。我有时也用它!