设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6268|回复: 5
打印 上一主题 下一主题

自定义并读取Game.ini文件

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2005-11-29
帖子
141
跳转到指定楼层
1
发表于 2007-12-22 09:28:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
正好最近工作中要用,上网查了一下相关资料,觉得都不合用,就自己动手写了个比较简单的。

就拿RMXP的Game.ini文件做示范吧。

  1. f = File.open(Dir.getwd << '\Game.ini')
  2. $ini_hash = {}

  3. f.each {|line|
  4. line.gsub!(/\n/,"")
  5. k,v = line.split(/=/)
  6. $ini_hash[k] = v if v !=nil
  7. }


  8. p "Library的值是" + $ini_hash["Library"].to_s
  9. p "Scripts的值是" + $ini_hash["Scripts"].to_s
  10. p "Title的值是" + $ini_hash["Title"].to_s
  11. p "RTP1的值是" + $ini_hash["RTP1"].to_s
  12. p "RTP2的值是" + $ini_hash["RTP2"].to_s
  13. p "RTP3的值是" + $ini_hash["RTP3"].to_s
  14. p "OtherThing1的值是" + $ini_hash["OtherThing1"].to_s
  15. p "OtherThing2的值是" + $ini_hash["OtherThing2"].to_s

复制代码


以下是Game,ini的内容
[Game]
Library=RGSS102J.dll
Scripts=Data\Scripts.rxdata
Title=Project1
RTP1=Standard
RTP2=
RTP3=
OtherThing1=1234
OtherThing2=abcde

代码很短,符合Ruby的风格。

需要补充的几点:

1,整个ini文件的内容读入一个hash表,也就是$ini_hash这个全局变量。调用时使用$ini_hash[key]。加上 .to_s 是为了防止没有该键或该键没有赋值的情况。

2,程序虽然读入了[Game]这个东西,但并没有进行处理,个人觉得一般自己用的ini没必要再分层,一层够用了。多层的话调用起来也麻烦。

3,注意这句话:$ini_hash[k] = v if v !=nil 。如果没有给键赋值(比如上面的RTP2和RTP3),那么不写进$ini_hash,主要是为了节省空间。当然不满意也可以把 if v !=nil 去掉。不过,相信总会有乱改 ini 的情况出现。^ -^

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2005-11-29
帖子
141
2
 楼主| 发表于 2007-12-22 09:28:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
正好最近工作中要用,上网查了一下相关资料,觉得都不合用,就自己动手写了个比较简单的。

就拿RMXP的Game.ini文件做示范吧。

  1. f = File.open(Dir.getwd << '\Game.ini')
  2. $ini_hash = {}

  3. f.each {|line|
  4. line.gsub!(/\n/,"")
  5. k,v = line.split(/=/)
  6. $ini_hash[k] = v if v !=nil
  7. }


  8. p "Library的值是" + $ini_hash["Library"].to_s
  9. p "Scripts的值是" + $ini_hash["Scripts"].to_s
  10. p "Title的值是" + $ini_hash["Title"].to_s
  11. p "RTP1的值是" + $ini_hash["RTP1"].to_s
  12. p "RTP2的值是" + $ini_hash["RTP2"].to_s
  13. p "RTP3的值是" + $ini_hash["RTP3"].to_s
  14. p "OtherThing1的值是" + $ini_hash["OtherThing1"].to_s
  15. p "OtherThing2的值是" + $ini_hash["OtherThing2"].to_s

复制代码


以下是Game,ini的内容
[Game]
Library=RGSS102J.dll
Scripts=Data\Scripts.rxdata
Title=Project1
RTP1=Standard
RTP2=
RTP3=
OtherThing1=1234
OtherThing2=abcde

代码很短,符合Ruby的风格。

需要补充的几点:

1,整个ini文件的内容读入一个hash表,也就是$ini_hash这个全局变量。调用时使用$ini_hash[key]。加上 .to_s 是为了防止没有该键或该键没有赋值的情况。

2,程序虽然读入了[Game]这个东西,但并没有进行处理,个人觉得一般自己用的ini没必要再分层,一层够用了。多层的话调用起来也麻烦。

3,注意这句话:$ini_hash[k] = v if v !=nil 。如果没有给键赋值(比如上面的RTP2和RTP3),那么不写进$ini_hash,主要是为了节省空间。当然不满意也可以把 if v !=nil 去掉。不过,相信总会有乱改 ini 的情况出现。^ -^

Lv4.逐梦者

梦石
1
星屑
10090
在线时间
4431 小时
注册时间
2005-10-22
帖子
6950

开拓者贵宾

3
发表于 2007-12-22 09:34:34 | 只看该作者
[看不见偶~看不见偶]
#这里是不厚道的比较详细注释
f = File.open(Dir.getwd << '\Game.ini') #这里是打开文件GAME.INI
$ini_hash = {}                          #这里是建立哈希表

f.each {|line|                        #这里开始叠代(整个大括号里都是)
line.gsub!(/\n/,"")                   #这里是传说中的每行之间以换行符割开
k,v = line.split(/=/)                 #这里是每行之中用等于号前后分成两段存在K和V里
$ini_hash[k] = v if v !=nil           #这里是将哈希组的第K个的值变成V,如果V不是空
}
#总结....其实66大的那个英语背单词软件的IO写得差不多....
[/看不见偶~看不见偶]

我晕...刚发完帖,发现老大把帖加了1VIP限制 -_-0
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2005-11-29
帖子
141
4
 楼主| 发表于 2007-12-22 09:38:20 | 只看该作者
line.gsub!(/\n/,"")                   #这里是传说中的每行之间以换行符割开


这个是把换行符删掉。{/hx}
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
10090
在线时间
4431 小时
注册时间
2005-10-22
帖子
6950

开拓者贵宾

5
发表于 2007-12-22 09:39:55 | 只看该作者
汗....看漏行看到split那里去了{/gg}

不过话说RUBY里带感叹号的方法都非常的强大-_-0
(被众人发现故意扯开话题,自己PIA飞,{/tp})
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
6
发表于 2008-1-26 03:50:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-6-18 21:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表