ステップ6 - メッセージを送信する¶
このステップでは、Luaスクリプトからメッセージを送信する方法を学びます。
最初に、パズルが解かれたかどうかを確認する関数を作成し、次にパズルが解かれたときにメッセージを表示する機能を追加します。
パズルが解決されたことを検出する¶
パズルが解決されたことを検出するには:
パズルが解決されているかどうかを確認する関数を、
movePieceMessageHandlerを定義する前に定義します。-- Declare a function that checks for the victory condition. local function checkForVictory() -- Count the number of pieces in a wrong position. local misplacedCount = 0 for i = 0,PieceCount-1 do local piece = grid:getChild(i) local row = piece:getProperty(GridLayout2D.RowProperty) local column = piece:getProperty(GridLayout2D.ColumnProperty) local expectedRow = i // ColumnCount local expectedColumn = i % ColumnCount if row ~= expectedRow or column ~= expectedColumn then misplacedCount = misplacedCount + 1 end end if misplacedCount == 0 then print("Victory!") end end
movePieceMessageHandlerメッセージハンドラーの最後で関数を呼び出します。local function movePieceMessageHandler(args) ... checkForVictory() end
パズルを解くと、スクリプトは Victory! を ログ に出力します。メッセージを送信する--------------
メッセージを送信するには:
Kanzi Studio プロジェクトで定義されている VictoryMessage メッセージタイプを使用します。
スクリプト内で、他の変数の隣に変数を初期化します。
-- Find the "fifteen_puzzle.VictoryMessage" custom message type. local VictoryMessage = MessageType:new("fifteen_puzzle.VictoryMessage")
checkForVictory関数を修正して、メッセージを ログ に出力した後、関数がVictoryMessageを グリッド ノードに送信するようにします。Grid ノードは
VictoryMessageトリガーを使用して、Victory Overlay State Manager を勝利メッセージを表示する Visible ステートに設定します。VictoryMessage:newMessageArguments()を使用してメッセージ引数を作成し、dispatchMessageメンバー関数を持つノードにメッセージを送信します。local function checkForVictory() ... if misplacedCount == 0 then print("Victory!") -- Send a VictoryMessage to the grid node. local args = VictoryMessage:newMessageArguments() grid:dispatchMessage(VictoryMessage, args) end end
Luaスクリプトには、次の完全なゲームロジックが含まれています:
グリッドをランダムな順序でピースで埋めます。
パズルのロジックに従ってピースを動かすことで、入力メッセージに反応します。
パズルが解かれたことを検出し、アプリケーション内に勝利メッセージを表示するメッセージを送信して反応します。
次の作業¶
このチュートリアルでは、Kanzi でLuaを使用してアプリケーションロジックをプログラミングする基本を学びました。
詳細については、
Kanzi Studio で Kanzi Engine Lua API を使用するには、Luaを使用して を参照してください。
Kanzi Lua API リファレンス を参照して、Kanzi Lua スクリプトで使用できる Kanzi 関数。
Luaプログラミング言語については、https://www.lua.org/manual/5.4/ を参照してください。