文件讀寫 文件讀寫對製做遊戲頗有幫助。能夠調用別的文件中的代碼,保存最高分、遊戲存檔、玩家狀態等信寫到文件中。 首先,讓咱們看一個簡單的命令:dofile。這個命令會讀入另外一個文件的代碼並當即執行。 代碼: dofile("./test.lua") 很簡單的命令。注意 ./ 是指根目錄,不是子目錄。若是是子目錄,應該這樣用: 代碼: dofile("./files/test.lua") 那麼,若是咱們的文件 test.lua 包含下述代碼: 代碼: playerx = 10 playery = 20 enemyx = 40 enemyy = 50 一旦咱們用 dofile 調用這個文件,這些變量將當即獲得聲明。文件不是非得用 lua 後綴,txt 或其餘後綴均可以。 從文件中讀取一行: 假設你有一個不少行文本的文件,你想從中讀取一行,並打印到屏幕上。爲此咱們可使用 io.open() 命令打開文件並讀取。 命令的語法是 io.open(filename, mode)。此處咱們將使用 r 做爲 mode 的值,意指讀取(read)模式。做爲參考,下面是全部可用模式的列表: 引用: r - 讀取模式w - 寫入模式(覆蓋現有內容) a - 附加模式(附加在現有內容以後) b - 二進制模式 r+ - 讀取更新模式(現有數據保留) w+ - 寫入更新模式(現有數據擦除) a+ - 附加更新模式(現有數據保留,只在文件末尾附加) 第一件要作的事情就是打開文件並存爲一個變量。看下面。 代碼: file = io.open("testRead.txt", "r") 如今咱們的文件 testRead.txt 已打開並處於讀取模式。接着咱們使用 read() 命令讀取文件中的單行內容存爲另外一個變量。 代碼: ourline = file:read() 這將讀取咱們的文本文件的第一行。下一次咱們使用 read() 命令它將讀取第二行。再下一次它會讀取第三行,依此類推。 請注意,此命令前的 file 是咱們以前打開文件並保存的變量名,你可使用任何其餘名字。file.read() 還可使用下列任一個參數,只要用引號括起來放入括號裏就能夠。 引用: *n - 讀取一個數字並返回它。例:file.read("*n") *a - 從當前位置讀取整個文件。例:file.read("*a") *l - (默認) - 讀取下一行,在文件尾 (EOF) 處返回 nil。例:file.read("*l") number - 返回一個指定字符個數的字符串,或在 EOF 時返回 nil。例:file.read(5) 既然咱們已經讀取到所要的那一行,咱們須要關閉打開的文件,像這樣: 代碼: file:close() 如今要打印咱們的文件至屏幕咱們只要這麼作: 代碼: screen:print(10,10,ourline,white) 讀取全部行 要讀取一個文件的全部行,你能夠在一個 for 語句中使用上述技巧。請看下述代碼: 代碼: y = 10 file = io.open("testRead.txt","r") for line in file:lines() do y = y + 10 screen:print(100,y,line,white) endf ile:close() 這個代碼設置了一個起始值 y 用於打印,這樣它能夠在屏幕不一樣的縱座標打印每一行。照例,先打開文件。而後是 for 語句,這句代碼是說文件的行數有多少下面的代碼就執行幾回。咱們的 y 座標則每次循環加上 10 以便打印命令能夠打印下一行。 寫入文件(覆蓋) 寫入文件的方式大體相同。下面的代碼將覆蓋任何先前寫入文件的內容: 代碼: file = io.open("testRead.txt","w")file:write("hello")file:close() 注意,咱們此次使用了 w 模式,而不是 r 模式,由於咱們是要寫入而不是讀取。咱們用 file:write() 寫入括號裏做爲參數的、用引號括起來的文本。你也能夠用變量替代。若是你使用變量就不要用引號,請看下例: 代碼: file = io.open("testRead.txt","w")myText = "Hello"file:write(myText)file:close() 寫入文件(附加) 你可使用附加模式,這樣就能夠在寫入文件時將新內容附加在已有文本末尾,而不是刪除原來的。作法與上面基本相同,除了模式換成「附加」以外。請看代碼: 代碼: file = io.open("testRead.txt","a")myText = "\nHello"file:write(myText)file:close()