詳解LUA 5.1編譯及實(shí)例操作
LUA 5.1編譯及實(shí)例操作是本文要介紹的內(nèi)容,以前沒(méi)接觸過(guò),并且能找的資料也少之又少, 花了兩天的時(shí)間才搞定..一般的都是在vs2005中開發(fā)(我的就是),以下是關(guān)于vs2005中使用lua。
以下是我在vs2005中編譯方法:
1、打開vs命令行工具、 工具->visual studio 2005 command prompt
2、到lua-5.1的目錄也就是etc的上一級(jí)目錄 :cd/d d:\lua-5.1
3、執(zhí)行:etc\luavs.bat(注意:這里是\,不是/)
4、然后lua51.dll ,lua51.lib,lua.exe就生成在src路徑下了~(注意因?yàn)槭莑ua5.1的所以沒(méi)有l(wèi)uac.exe,以前的版本有)
因?yàn)樵趘s2005中l(wèi)ua是外來(lái)的,所以要讓vs2005能找到lua的頭文件和庫(kù)文件(lua5.1中只有一個(gè)lua51.lib),在vs中包含,于是:工具->選項(xiàng)->項(xiàng)目和解決方案->vc++ 目錄 右邊選擇包含文件把src的路徑包含進(jìn)來(lái)(關(guān)于頭文件的)。
還有庫(kù)文件同意的操作,不過(guò)這里就是后來(lái)一直出錯(cuò)的點(diǎn),這里這種方式包含的庫(kù)文件是包含不進(jìn)來(lái)的,后面講到的一種方法可正確包含
頭文件和庫(kù)文件都包含進(jìn)來(lái)后就可以在c++中使用lua了
看一個(gè)實(shí)例如下:
- #include <stdio.h>
- #include <iostream>
- extern "C"
- {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- }//在工具中包含文件的那個(gè)~~
- /* Lua解釋器指針 */
- lua_State * L;
- #pragma comment(lib,"lua51.lib")//包含庫(kù)文件~~在工具里包含不進(jìn)來(lái),上面的包含不進(jìn)來(lái)的處理辦法是:
- //把lua51.dll 拷到項(xiàng)目的dubug目錄下,把lua51.lib拷到項(xiàng)目目錄的項(xiàng)目名的文件夾下
- int main ()
- {
- /* 初始化Lua */
- L = lua_open();
- /* 載入Lua基本庫(kù) */
- luaL_openlibs(L);
- /* 運(yùn)行腳本 ,注意路徑*/
- luaL_dofile(L, "d:\\test.lua");
- /* 清除Lua */
- lua_close(L);
- //printf( "Press enter to exit…" );
- //getchar();
- return 0;
- }
上面是c++的一個(gè)空工程
下面是test.lua的代碼:是一個(gè)石頭剪子布的小的游戲?qū)嵗?/p>
代碼如下:
- ---[[
- math.randomseed(os.time()) --[[為隨機(jī)數(shù)產(chǎn)生器生成一個(gè)種子--]]
- user_score = 0
- comp_score = 0 -- 全局變量存分?jǐn)?shù)
- lookup = {}; --輸贏對(duì)照表
- lookup["rock"]={rock = "draw",paper = "lose",scissors ="win"}
- lookup["paper"]={rock = "win",paper = "draw",scissors = "lose"}
- lookup["scissors"]={rock = "lose",paper = "win",scissors = "draw"}
- function GetAiMove() --Ai的函數(shù)
- local int_to_string = {"rock","paper","scissors"} --局部一個(gè)table,對(duì)照用
- return int_to_string[math.random(3)]
- end
- function EvaluateTheGuess(user_guess,comp_guess) -- 計(jì)算結(jié)果的函數(shù)
- if(lookup[user_guess][comp_guess]=="win") then
- print ("user win the game")
- --print()
- user_scoreuser_score=user_score+1 --小錯(cuò)誤 ~已改
- elseif (lookup[user_guess][comp_guess]=="lose") then
- print ("user lose the game")
- --print()
- comp_scorecomp_score=comp_score+1
- else
- print ("draw!")
- --print()
- end
- end
下面開始
- print ("game begin:enter q to guit game")
- --print() --換行?
- loop = true
- while loop==true do
- --print()
- print("user: "..user_score.." comp: "..comp_score)
- print()
- print("p--布 r--拳頭 s--減")
- print("請(qǐng)輸入:")
- --io.open()
- user_guess =io.stdin:read '*l' --出錯(cuò)的地方,這里是l不是1
- --user_guess = "r"
- print()
- local letter_to_string = {r="rock",s="scissors",p="paper"} --亦是局部的一個(gè)table 對(duì)照用的
- if(user_guess == "q") then
- loop = false
- elseif(user_guess == "r") or (user_guess == "s") or(user_guess =="p") then
- comp_guess=GetAiMove()
- EvaluateTheGuess(letter_to_string[user_guess],comp_guess)
- else
- print ("invalid input,try again")
- end
- end
- --]]
小結(jié):關(guān)于詳解LUA 5.1編譯及實(shí)例操作的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!