2012-01-09 5 views
1

私はScalaで書かれたConnectFourゲームで遊んでいます。私はゲームのロジック(モデルとコントローラ)を使ってLift Webappを作りたいと思っています。Scala Swing GUI as Lift Webapp

私の問題は、どうすればいいですか?私は純粋なHTMLテンプレートを持っていますが、このようなボードの作成など、ゲームのロジックをどのように使用できますか?

var board = new Board() 
    for(y <- 0 to 5; x <- 0 to 6) contents += new CoinComp(x, y) 

ありがとう!

敬具、 ジョン

答えて

0

まず、あなたはあなたの理事クラスからHTMLを生成する方法を知っておく必要があります。サーバーから

  1. 、scala.XMLクライアントから

その後、あなたはクライアントから呼び出すことができますAJAXサーバー側の関数を作成するJavaScript: は二つの選択肢があります:

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> 
} 

最後に、クライアント機能「reあなたのページにボードをレンダリングするためにnderBoard(b) "クライアントがクリックして移動すると「moveIt(x、y)」と呼びます

+0

こんにちはiron9light、ありがとう!もう少し手伝ってもらえますか?リフトは現時点で私を非常に混乱させています。私のメールアドレス:[email protected] – user1137701

+0

ここにお問い合わせいただくか、[forum](https://groups.google.com/forum/#!forum/liftweb) – iron9light

関連する問題