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

Project1

 找回密码
 注册会员
搜索

一个文字类游戏脚本的构思

查看数: 2025 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-4-19 23:48

正文摘要:

打算在开工之前讨论一下可行性 特点: 1、从其他文字编辑器中批量输入文本 2、支持批量导入条件判断和对话选项 3、提供显示文字信息模板,把”对话“、”获得物品信息“”任务“模块化 构思: interpret[index] 哈 ...

回复

6rp 发表于 2013-4-20 19:31:57
是啊,我也发现是成为main的临时变量了。
所以建议你先弄个全局变量作容器,在文本中调用容器函数给它赋值,回到游戏中再读出来。这样可能更合理一些。
RUBY 代码复制
  1. class Mydata
  2.     attr_accessor :name,:text,:lable
  3. end
  4.  
  5. $mydata=Mydata.new
  6. ######################
  7. class Mystory
  8.     def run
  9.       load 'a.txt'
  10.       p $mydata.text
  11.     end
  12. end


TXT 代码复制下载
  1. $mydata.text='hello,world'
6rp 发表于 2013-4-20 17:37:49
本帖最后由 6rp 于 2013-4-20 17:39 编辑
6rp 发表于 2013-4-20 16:42
建议你学习使用load方法。

练习:


message就是这样使用的:
TXT 代码复制
  1. $game_message.add('hello')


所有文本要使用utf-8格式(有BOM)

而且变量传递不能就那么简单的写,可以用全局变量传递。

文本中
TXT 代码复制
  1. $data[1]='hello'


RUBY 代码复制
  1. $data=[]
  2. load 'try.txt'
  3. p $data[1]
  4. $game_message.add($data[1])


这样你试试看吧。

顺便说一下,load 方法使用,好像要忌讳出现中文目录名,否则出错!

点评

那么那个人物肖像是怎么做到的?有参数么?  发表于 2013-4-20 18:14
6rp 发表于 2013-4-20 16:42:47
本帖最后由 6rp 于 2013-4-20 17:59 编辑

建议你学习使用load方法。

练习:

在游戏根目录下存入文本文件try.txt
TXT 代码复制下载
  1. $name='npc张三'
  2. $text='玩家你好,我是张三!'
  3. $label=2013
  4. $faceid=0 #不知道
  5. # 总之一切都是按照ruby中的规则写文本。


然后在游戏脚本中设定一个函数 loadtext

RUBY 代码复制
  1. def loadtext(filename='try.txt')
  2.   load filename
  3.   p $name
  4.   p $text
  5. end


用这样的方法就可以把外部的文件导入游戏脚本中,不用自己设定什么{}%@#之类的古怪符号。

至于输出,一般就简单的使用$message这个变量就行了,当你函数运行完毕后,message中的文字就会自动刷新到屏幕窗口中了。

点评

还有一个问题,读取的时候字符编码错误怎么办?txt应该保存成什么编码?  发表于 2013-4-20 17:03
谢谢,能详细说说message的用法么?我找不到这个全局变量,也不知道实例方法是什么。  发表于 2013-4-20 16:49
沉滞的剑 发表于 2013-4-20 15:35:14
本帖最后由 沉滞的剑 于 2013-4-20 15:41 编辑
6rp 发表于 2013-4-20 15:16
ruby 有load 方法,可以调入外部文本来执行的。
你的文本就设计成ruby认可的格式就行了,不用从新写编译器 ...


我是打算从外部读取的,因为RM内部没有好的文字编辑器。
但是读入的只是字符串,这些字符串没法表示上下文的关系,
没法表示出现的条件。还得进行2次编辑成一个集合了对话元素的类才行。
就算我读入了对话,我最多也只能按行读取,然后编号,但是关键的是我没有方法调用。
读取的文字还得带上处理标签,然后实例化。头像是什么,什么条件出现,哪一句台词指向它,它指向哪一句台词或者选项等等
读取了文字没法变成对话还是无用。
这是我写的Dialog类
已经debug完毕无误。
RUBY 代码复制
  1. $dialog = Array.new(72,Array.new)
  2. $text = '{1#2@3&4*5$我爱你<6>}'
  3. ##暂时用全局变量代替输入数据,io类我还在学习中
  4. #=============================================================================
  5. class Dialog
  6.   attr_accessor :index
  7.   attr_accessor :label
  8.   attr_accessor :label_target
  9.   attr_accessor :condition
  10.   attr_accessor :option
  11.   attr_accessor :picid
  12.   attr_accessor :content
  13.   @@interpret = [Hash.new]
  14. ##============================================================================
  15. ##============================================================================
  16.   def self.getsentence (text)
  17.   i = []
  18.   j = []
  19.   m = 0
  20.   x = 0
  21.   y = []
  22.   text.each_char {|char|
  23.     if char == '{'
  24.      i.push m
  25.     end
  26.     if char == '}'
  27.       j.push m
  28.     end
  29.     m = m + 1
  30.     }
  31.   while x < i.size
  32.   y[x] = text[i[x]+1...j[x]]
  33.   x = x + 1
  34.   end
  35.   return y
  36. end
  37.   def self.getindex (text)
  38.     i = ""
  39.     m = 0
  40.     text.each_char {|char|
  41.       if char == '#'
  42.         i =text[0..m]
  43.         return i
  44.       end
  45.       m = m + 1
  46.       }
  47.     return "0"
  48.   end
  49. ##=============================================================================
  50.   def self.getattri (text,tag1,tag2)
  51.     i = 0
  52.     m = 0
  53.     n = 0
  54.     l = ""
  55.     text.each_char {|char|
  56.       if char == tag1
  57.       m = i
  58.       end
  59.       if char == tag2
  60.       n = i
  61.       end
  62.       i = i + 1
  63.       }
  64.       return text[m+1...n]
  65.     end
  66. ##=============================================================================
  67.   def self.setup
  68.     @@interpret = [Hash.new]
  69.     s = []
  70.     i = 0
  71.     li = 0
  72.     p = 0
  73.     l = ""
  74.     lt = ""
  75.     c = ""
  76.     o = ""
  77.     con = ""
  78.     text = $text
  79.     s = Dialog.getsentence(text)
  80.     for f in s
  81.        i = Dialog.getindex(f).to_i
  82.        l = Dialog.getattri(f,'#','@')
  83.        c = Dialog.getattri(f,'@','&')
  84.        o = Dialog.getattri(f,'&','*')
  85.        p = Dialog.getattri(f,'*','$')
  86.        con = Dialog.getattri(f,'$','<')
  87.        lt = Dialog.getattri(f,'<','>')
  88.        $dialog[i].push(Dialog.new(i,l,c,o,p,con,lt))
  89.        $dialog[i].compact!
  90.        li = $dialog[i].size - 1
  91.      @@interpret[i] = Hash.new if @@interpret[i] == nil
  92.        @@interpret[i][l] = li
  93.     end
  94.   end
  95.   def initialize(i,l,c,o,p,con,lt)
  96.     @index = i
  97.     @label = l
  98.     @label_target = lt
  99.     @condition = c
  100.     @option = o
  101.     @picid = p
  102.     @content = con
  103.   end
  104. end



现在我是在想使用Windows base还是message来显示文本,message我现在还没搞懂怎么用。
6rp 发表于 2013-4-20 15:16:45
ruby 有load 方法,可以调入外部文本来执行的。
你的文本就设计成ruby认可的格式就行了,不用从新写编译器的。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-14 06:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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