lua学习:使用Lua处理游戏数据
在之前lua学习:lua作配置文件里,我们学会了用lua作配置文件。
其实lua在游戏开发中可以作为一个强大的保存、载入游戏数据的工具。
1.载入游戏数据
比如说,现在我有一份表单:
data.xls
用什么工具解析这个Excel文件并将数据载入游戏?
我们可以使用Lua来完成这个工作。不过要先将表单保存为csv文件(数值用逗号隔开的文件)。
从表单中,我们可以得知第一行是键名,剩下的行是数值。我们可以用下面的lua函数载入该csv文件并保存到表中。
function GetLines(fileName)index = 0myLines = {}for line in io.lines(string.format("%s%s", "./", fileName)) doindex = index + 1myLines[index] = lineendreturn index, myLines --返回文件的行数和一个包括所有行的表
end
io.lines ([filename]):打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件。
然后,可以再创建一个函数解析每行的字符,并创建表格保存该行的所有数据。
function GetValues(myString)num = 0values = {}if myString ~= nil thenwhile string.find(myString,",") ~= nil doi,j = string.find(myString,",")num = num + 1values[num] = string.sub(myString,1, j-1)myString = string.sub(myString, j+1, string.len(myString))endnum = num + 1 --接着对第二行数据values[num] = myStringendreturn num, values
end
string.find(s, pattern, pos):从源字符串s找到匹配pattern返回,pos参数可选, 表示起始位置,如果匹配不成功,返回nil。
string.sub():函数截取字符串s的从第i个字符到第j个字符之间的串。
在这个函数中,我们传入字符。通过调用string.find()和string.sub,返回数值的个数和包含了所有数值的表。通过这两个简单的处理步骤可以让用户解析几乎所有的csv文件,不论简单还是复杂的文件。
我们可以写个函数测试一下:
function LoadDatas()myCharacters = {}numLines, allLines = GetLines("data.csv")--读第一行的键值count, myLabels = GetValues(allLines[1])--忽略第一行for index = 2, numLines docount, charHold = GetValues(allLines[index])myCharacters[index-1] = {}for index2 = 1, count domyCharacters[index-1][index2] = charHold[index2]endend--now print themfor index = 1, 3 dofor index2 = 1, table.getn(myLabels) doprint(myLabels[index2], myCharacters[index][index2])endend
end
得到一个二维表:
2.保存游戏数据
function save()myFile = io.open("save_data.lua", "w")if myFile ~= nil thenmyFile:write("-- 游戏数据保存文件")myFile:write(string.char (10))myFile:write(string.char (10))myFile:write(string.format("%s%s", "-- 文件创建于: ", os.date()))myFile:write(string.char (10))myFile:write(string.char (10))myFile:write("myValue = 5")io.close(myFile)end
end
3.载入保存的数据
lua学习:使用Lua处理游戏数据相关推荐
- 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)
游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...
- lua 学习笔记---游戏开发第一步
lua 学习笔记-从数组开始 数组 数组大小范围不一定需要在声明是确定,可以改变 一维数组 例 > array = {"Lua", "lualu"} &g ...
- Lua学习笔记(一)
一.先来说说什么是lua 至于什么lua 的起源啊,什么大道理一样的东西就自行百科吧 我们重点谈谈为什么要学lua 目前lua的主要应用有 游戏方面的热更新框架,由于lua属于脚本语言,说起脚本语言你 ...
- cocos2d lua 学习文档
游戏 : 2048 功能 : 开始 ,进入游戏 ,设置 ,分数系统,任务系统,金币系统 , 待开发(背包,抽奖,签到,以及sdk和分享) 游戏源码地址: https://github.com/li ...
- 从Lua学习JavaScript(一)
学习 Lua 对于了解 Javascript 的人来说就是小菜一碟,Tyler Neylon 写了三篇文章来解释其中的原因,这是其中的第一篇. 这是通过 Javascript 来学习 Lua 系列文章 ...
- 【lua学习】3.字符串
[lua学习]3.字符串 Lua字符串的概况 字符串实现 字符串结构TString 全局字符串表stringtable 新建字符串luaS_newlstr (先查表,再决定创建与否) 新建字符串 ne ...
- lua学习之类型与值篇
类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 type 可以返回这个值的类型的名称 将一个变量用于不同类型,通常会导致混乱的代码 但合理 ...
- Python 和 Lua 学习比较 一
好记性不如烂笔头. 作的笔记以后也能来再看看. python有多种语言写成的版本,这里只记录C/C++写的版本,lua本身是使用标准C/C++编写的. 所以各位同学知道C的强大了吧,我觉得作为程序员, ...
- lua学习01:c调用lua、lua调用c、lua的协程、lua的常见API、lua读取配置文件总结
文章目录 1.c通过虚拟机和虚拟栈调用lua test-vm.c test-vm.lua 打印效果 2.lua通过虚拟机和虚拟栈调用c lua-tbl.c test-tbl.lua 3.lua的协程 ...
最新文章
- 浅析_tmain()与main()的区别
- Redis学习(2)-redis安装
- hdu4179 限制最短路
- linux 比较新的设备树 详解 device tree
- 笔记-项目人力资源管理-建设项目团队
- Eclipse is running in a JRE, but a JDK is required 解决方法(转)
- Android之Gradle Plugin Samples 之Gradle Library Projects
- 思科命令 service password-encryption
- 最新python中一升级所有已安装的包方法
- vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件
- excel自动合并两列
- iOS 开发的一些奇巧淫技
- 【复盘】如何写一份教程?
- POE供电 网线 电源 网络情况图
- 【狂神说Java】Docker最新超详细版教程通俗易懂 - 学习笔记
- 【STM32篇】驱动MXL90614红外测温模块
- 温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 2 Kotlin语法
- 抖音测试像哪个明星的软件,抖音中的测测你像哪位明星特效如何拍摄
- Compiling C
- Django restframework中 Serializer 序列化方法详细介绍
热门文章
- 基于re模块的计算器
- B/S系统常见缺陷整理和解决方案
- SharePoint 2010 BCS - 简单实例(二)外部列表创建
- Zend Framework数据库操作
- 2009_01_15_星期三
- 《LeetCode力扣练习》第46题 全排列 Java
- python unicodeencodeerror_解决 Python UnicodeEncodeError 错误
- 鸿蒙系统手机还会出吗,华为最强手机即将到来,可能还有华为鸿蒙系统加入!你期待吗?...
- C++知识点16——使用C++标准库(IO流格式控制)
- To connect to files.phpmyadmin.net insecurely, use `--no-check-certificate‘