我正在玩一个用Scala编写的ConnectFour游戏。我想使用游戏中的逻辑(模型和控制器)制作一个Lift Webapp。
我的问题是,我应该如何开始?我有纯HTML模板,但我如何使用游戏中的逻辑,例如创建这样的板?
var board = new Board()
for(y <- 0 to 5; x <- 0 to 6) contents += new CoinComp(x, y)
谢谢!
祝你好运, 约翰
答案 0 :(得分:0)
首先,您需要知道如何从Board类生成HTML。 有两种选择:
,scala.XML
来自客户端,javascript
然后,创建一个可以从客户端调用的ajax服务器端函数:
def render = {
import JsCmds._
var board = initBoard()
def moveAction(s: String): JsCmd = {
val moveXY = parseXY(s) // s should be like "{x: 1, y: 2}"
board = move(board, moveXY) // your logic here
val newBoardToSend = boardToCmd(board) // generate board HTML or json here
Call("renderBoard", newBoardToSend) // call the client-side render function
}
val script = S.fmapFunc(S.contextFuncBuilder(moveAction _)) { funcName => {
val func = JsRaw("'" + funcName + "='") + Call("encodeURIComponent", LiftRules.jsArtifacts.jsonStringify(JsRaw("{x:x,y:y}")))
JsCmds.Function(
"moveIt", // the js function name you will call
"x" :: "y" :: Nil,
SHtml.makeAjaxCall(func).cmd
)
}} // generate a client ajax function: function moveIt(x, y)
yourRenderXml ++ <tail>{JsCmds.Script(script)}</tail>
}
最后,你应该有一个客户端函数“renderBoard(b)”来渲染你的页面。当客户点击移动时,调用“moveIt(x,y)”