免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: __BlueGuy__
打印 上一主题 下一主题

[函数] 纪念我的第一个Lua程序 [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
31 [报告]
发表于 2012-10-20 17:58 |只看该作者
回复 30# __BlueGuy__


    你的目的到底是什么?是数据的大量存储,还是数据的读取处理?

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
32 [报告]
发表于 2012-10-20 18:01 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 18:05 编辑
starwing83 发表于 2012-10-20 17:58
回复 30# __BlueGuy__

我以前写手机游戏的时候,内存不够,
就把这种静态数组换成动态的了, 当时公司有工具转...
我想自己写个程序转下,一直没写,

遗留下来的问题,看看有没好心人帮忙解决一下

哥现在做网游了,时不时想起这个题,又没时间写,挺苦恼的..

工作很没意思,干几个月闪人...

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
33 [报告]
发表于 2012-10-20 18:27 |只看该作者
回复 32# __BlueGuy__


    那你把输入和输出描述一下呗。假设你有个工具(你自己命名),你给一个使用场景呗。

论坛徽章:
0
34 [报告]
发表于 2012-10-20 18:56 |只看该作者
这么巧,我也今天开始看lua,感觉和c差别好大啊

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
35 [报告]
发表于 2012-10-20 19:14 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 19:15 编辑

回复 33# starwing83

角色动画组肯定都是由一些不定长的数组构成,c 是没办法定义不定长的静态数组的,
所以得把动画数组导入到文件,然后解析成 c 的动态数组

输入:
char BlueGuy[5][5] =
{
   {1},
   {1, 1},
   {1, 2, 1},
   {1, 3, 3, 1},
   {1, 4, 6, 4, 1}
};

输出:
0005 0001 0100 0201 0100 0301 0201 0004
0103 0301 0005 0104 0604 01  

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
36 [报告]
发表于 2012-10-20 19:26 |只看该作者
回复 35# __BlueGuy__


    你确定输入就是这个?那就很简单了。你写一个template.c,然后写个程序,动态产生一个C程序,编译,然后产生下面的输出,这不难的。

还有,输入有哪些类型?确定数组的类型就是char吗?确定名字(BlueGuy)是没有用的吗?还有,这个数组是不是只有前面几项是有值的,后面都没有值吗?还是中间也有可能没有值?

这个输出必须是C程序吗?能不能是其他的格式?比如json或者是别的。输入是怎么来的?从其他程序抽出来,人手写,还是由其他程序输出的?能不能改变输入的格式?

最后,数组的维度一定是两维?可不可能有三维的或者其他维数的?数组最大多少?维数最大是多少?每维里面的数据的范围是什么?是否默认0就是无数据?

你这些都没搞清楚就想写工具,就如同一个珠宝匠人连要做的首饰样式都没弄明白就开工,能行么?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
37 [报告]
发表于 2012-10-20 19:56 |只看该作者
本帖最后由 starwing83 于 2012-10-20 19:58 编辑

回复 35# __BlueGuy__


    如果你要的输出给出的是二进制的格式,那么下面的Lua程序可以做到(但是仅仅满足你给出的输入,因为你对输入没有给出任何说明):
  1. local input = io.read "*a"
  2.     :gsub("^char %w+%b[]%b[]%s*=%s*", "")

  3. local res = assert(load("return "..input))()

  4. local function write_short(n)
  5.     io.write(("%c%c"):format(math.floor(n/256)%256, n%256))
  6. end

  7. local function write_byte(n)
  8.     io.write(("%c"):format(n%256))
  9. end

  10. write_short(#res)
  11. for i, v in ipairs(res) do
  12.     write_short(#v)
  13.     for i, v in ipairs(v) do
  14.         write_byte(v)
  15.     end
  16. end

  17. -- cc: run+='< in.txt > out.txt'
复制代码
如果你需要的就是这一串数字的文本结构,那么得到输出了以后用xxd神马的就可以直接得到。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
38 [报告]
发表于 2012-10-20 19:59 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 20:03 编辑
starwing83 发表于 2012-10-20 19:26
回复 35# __BlueGuy__

不是说过了,
输入是合法的c语言数组,暂时只考虑 char类型的二维数组就可以了...
你会 c 吗? 知道怎么定义一个 char类型的二维数组吗?

char BlueGuy[][] =
{
   {1},
   {1, 1},
   {1, 2, 1},
   {1, 3, 3, 1},
   {1, 4, 6, 4, 1}
};

BlueGuy 是要的,不过是会被过滤掉的,数组维度是可以没有的.

还有啊, 我要的是 c 程序,你为什么总是写 Lua代码呢?...

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
39 [报告]
发表于 2012-10-20 20:04 |只看该作者
回复 38# __BlueGuy__


    合法的C90数组还是C99数组?这是有很大差别的。

上面的程序可以处理这样的问题,前提是数组里面没有表达式:C99是允许在数组初始化中写变量表达式的。比如这样:

char BlueGuy[][] = {
  { __LINE__ },
  {1, 2+2, 3&4, 55555/44/4%2},
  ....
};

这样的也要处理么?

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
40 [报告]
发表于 2012-10-20 20:07 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 20:11 编辑

回复 39# starwing83
只有单一数字,
你真能扩展...

最简单的代码完成最基本的任务就好了...   

输入就定死成如下格式

char BlueGuy[][] =
{
   {1},
   {1, 1},
   {1, 2, 1},
   {1, 3, 3, 1},
   {1, 4, 6, 4, 1}
};

输出:
0005 0001 0100 0201 0100 0301 0201 0004
0103 0301 0005 0104 0604 01

程序要是 c 啊。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP