相当于R中的C getch()

时间:2017-02-07 07:42:54

标签: r

我正在2048开发一个R游戏,以获得乐趣。我使用scan(n=1)用户输入他/她的移动键。但是在脚本语言中,它需要按Enter键才能继续。

问:有没有办法让getchC的{​​{1}}适用于R,只需按下Enter即可按下按钮?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

我建议你使用windows / x11图形环境处理程序(LINK)。

以下是打开窗口的示例,您可以使用键盘箭头移动蓝色方块:

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()

答案 1 :(得分:0)

当然@digEmAll为我的目的指导我完美的解决方案,Henrik Bengtsson在twitter上给了我一个完全相当于getch的解决方案。 为此,我们需要安装keypress cran包:

install.packages("keypress")

然后就可以使用了:

library(keypress) y = keypress()

然后等到第一次按键。关于这个软件包的最好的事情是它支持非pagedownupdown等非字符键。