drzzm32 发表于 2014-9-7 21:38:57

【11.22修改】AVG游戏引擎制作

本帖最后由 drzzm32 于 2014-11-22 22:22 编辑

经过论坛成员修订完善,将以此进行引擎开发工作,由技术区人员参与,并作为第一次活动的基础
大赛预备阶段,用自己熟悉的语言
修改过让风格接近汇编了
此引擎名字暂定为ThAVG
————————正文开始————————
ThAVG ~ 引擎设计方案
      从程序生命周期考虑:

启动程序 —(读取脚本)—》启动界面—(这里要按键才可运行过去)—》标题界面——》
——》开始游戏——\
                                 ——》End——》Credit——》标题界面
——》读取存档——/
——》CG收集
——》设置(在游戏外部设置)
——》退出游戏


      其中,启动界面,标题界面,游戏场景,读档界面,存档界面(暂停菜单),End,Credit均可抽象为同一事物,这里称作“场景”,其内容物称作“元素”。


(以下脚本语言均为中文关键字,若不妥可以修改)当前格式似乎接近汇编?
总体语法:(除指令关键字外其他字符开头均可作注释)
[指令] [数据] [注释,可选]
场景定义语法:
开始定义场景 [场景编号] [场景名,仅作注释,可用于Debug]

      [元素定义]

结束定义场景      其中,场景编号作为游戏进程控制的核心。


元素定义较为特殊,有三种,且不可混用。


       语法一:
[背景/音乐] [地址]
      这里的地址,是以程序所在路径为根目录的路径。如【BGM\01.wav】【Image\233.png】


       语法二:
开始定义立绘 [立绘编号] [立绘名,仅作注释,可用于Debug]
       这里的地址,是以程序所在路径为根目录的路径。如【BGM\01.wav】【Image\233.png】
      这里的位置,是指图片在游戏界面的位置,考虑到游戏Logo也可使用这个定义,现在先不确定这个参数
       的具体形式。


       语法三:
开始定义文字 [对话/旁白/标题画面/存档画面/读档画面]

      选择 [内容]       这里的场景编号与场景定义的编号一致,这个值仅在标题画面,存档画面,读档画面才有效。
       对话显示多行的可定义多个选择,但要自己测试字数。
      存档画面,读档画面需要自己定义 返回 选择项。

NOTE:
      场景过渡方法:从A到C,中间需要加一个相应元素为空白的B。如BGM切换,对话变换。
      注意BGM连续播放要在所有场景中都要有定义。
      (更多注释,有人(技术人员)无法理解的继续注释)

以下是数据结构
原本想写个给整个类初始化的函数
发现参数太多,而且参数里居然还有二维数组
并且我不知道VB .NET如何调用带参数的构造函数
并且类中定义的类还要实例化为数组
所以我放弃写整体构造(初始化)函数
下面是VB .NET版本的
希望有谁给个C++的定义
只作参考哦!这个已经过时了。


Public Class Scene
    Public Name As String
    Public SceneIndex As Integer
    Public Class Image
      Public Name As String
      Public Path As String
      Public Index As Integer
      Public BGM As String
      Public Sub Init(ByVal InName As String, ByVal InPath As String, ByVal InIndex As Integer)
            Name = InName : Path = InPath : Index = InIndex
      End Sub
    End Class
    Public Class Character
      Public Location As Point    'Can use Enum
      Public Name As String
      Public CharIndex As Integer
      Public CG() As Image
      Public Sub Init(ByVal InLocation As Point, ByVal InName As String, ByVal InCharIndex As Integer, ByVal InCG() As Image)
            Location = InLocation : Name = InName : CharIndex = InCharIndex : CG = InCG
      End Sub
    End Class
    Public BG() As Image
    Public Characters() As Character
    Public Class Word
      Public WordType As Integer    'Can use Enum
      Public Class Selection
            Public Context As String
            Public Index As Integer
            Public JumpSceneIndex As Integer
            Public Sub Init(ByVal InContext As String, ByVal InIndex As Integer, ByVal InJumpSceneIndex As Integer)
                Context = InContext : Index = InIndex : JumpSceneIndex = InJumpSceneIndex
            End Sub
      End Class
      Public Selections() As Selection
      Public Sub Init(ByVal InWordType As Integer, ByVal InContextArray() As String, ByVal InIndexArray() As Integer, ByVal InJumpSceneIndexArray() As Integer)
            WordType = InWordType
            For i = 0 To InContextArray.Length - 1 Step 1
                Selections(i).Init(InContextArray(i), InIndexArray(i), InJumpSceneIndexArray(i))
            Next i
      End Sub
    End Class
End Class


Nyasama
the WDJ - C, M
Dr.zzm32

白色睡帽 发表于 2014-9-7 21:45:35

给32顶一下,伪代码还是挺精简的呢。游戏引擎开发还是挺难的呢(虽然是AVG),要加油哦。

c3ctd 发表于 2014-9-7 22:24:08

顶一下先,让俺研究一下

Capt.Murasa 发表于 2014-9-8 00:03:43

文字遊戲吶......自身興趣和能力都不大{:17:},是解迷遊戲和射雞遊戲就好了{:ml34:}
暑假完了,在學校又要忙著搞工程............

ofz 发表于 2014-9-8 12:07:55

zzm 博士好强的执行力,赞一个

关于活动的规则 OFz 觉得至少还有下面几个问题需要深入考虑:
1. 这个活动其实是“引擎制作比赛”而不是“游戏制作比赛”吧?要从头制作一个游戏来参赛实在太花时间了呢,我觉得应该由活动方提供脚本(剧本)和素材,参赛者只负责程序就好了
2. 看到上面的场景定义,OFz 觉得最简单的方法是写个程序把 脚本 转化成 幻灯片(ppt) 这样的方式。但是这样子写出来的程序最多算“转换器”而不能算“引擎”。如何规范这种行为?
写完发现我理解错了...请无视上面两点


然后是关于细节的一点建议
1. 中文关键字容易遇到编码问题,而且对用 vi 模式编辑文本的人非常不便
2. 在不同的场景中如果出现同样的立绘,每次都重新定义一次略显繁琐
3. 缺少更多关于细节的定义(如动画效果,持续时间等
4. 想让更多不会写(也不喜欢)代码的人来参与,一个可视化编辑器应该比一个引擎要更有吸引力

drzzm32 发表于 2014-9-8 12:36:34

ofz 发表于 2014-9-8 12:07
zzm 博士好强的执行力,赞一个




这个只是初步方案。。。

1.现在也只是伪代码。到时候可以用英文的,考虑到中文可以吸引很多不会编程的人。
2.因为不同场景元素可能不同,相同立绘定义也只是一个标志,不会再次加载。而且我要考虑场景切换嗯处理,因此过渡场景是必要的。
或许可以检测场景元素变化?(但是场景编号是游戏进程的核心)
3.按照上面所述,此引擎没有游戏时间参数,只有场景编号作为进程控制参数,同时存档也依赖于此参数。这个只是初步方案,具体将在后面讨论。
4.我也有做GUISDK的想法,但当前是做出引擎,后面再做GUI。
话说OFz,这个WEB化的难度怎样?我们先把这个讨论完善怎样?

ofz 发表于 2014-9-8 13:28:11

drzzm32 发表于 2014-9-8 12:36 static/image/common/back.gif
这个只是初步方案。。。

1.现在也只是伪代码。到时候可以用英文的,考虑到中文可以吸引很多不会编程的 ...

最基本的实现不难,大概也就几百行代码吧。选择 json 格式的话还能更少些(那样只要一行代码就能把数据导进去了。其实 vb 也有 json 的库的哦

如果要考虑做可视化编辑的话,那可是个不小的坑(具体工作量取决于你想做到多好了

drzzm32 发表于 2014-9-8 13:52:32

ofz 发表于 2014-9-8 13:28
最基本的实现不难,大概也就几百行代码吧。选择 json 格式的话还能更少些(那样只要一行代码就能把数据导 ...

可视化。。。这个坑的确不小。。。
AVG故事结构类似树,而每个场景又是一个类,嗯。。。
还是要把方案挂几天,看看还有没有问题,没有的话,我会详细的说明这个。
当前来看,场景跳转必须要按Z键。用一个计时器来控制绘画。程序默认从场景编号0开始处理,但是要考虑编号数据类型,或者可以用十六进制。

lrdcq 发表于 2014-9-8 15:22:36

本帖最后由 lrdcq 于 2014-9-8 15:24 编辑

话说我记得MCBilibili服二周目的时候出现了一个webAVG引擎作为用户入门手册来着,不知道哪个东西怎么样了另外橙光游戏的flash版在线AVG引擎也非常成熟了

lrdcq 发表于 2014-9-8 15:46:10

本帖最后由 lrdcq 于 2014-9-8 16:11 编辑

@drzzm32AVG引擎我勉强也算接触过(http://lrdcq.com/右下角的伪春菜系统即是一个超级精简的AVG引擎),AVG系统构建确实就是一个简单的PPT系统,图像处理,tween,文字显示,音乐播放,鼠标和键盘监听都是有涉及到的,变化和创新处确实不是手到擒来
另外数据的话,当然是赞成ofz君所说的JSON数据(那个的伪春菜也实际使用的JSON)。当然, 数据的可读性易用性 和 简洁性 也是成反比的.......如果是要推广使用的话,确实得斟酌斟酌了总之,各种语言都尝试做一下总是有好处的

然后对这个方案的一些问题
1.加入使用如LZ所说的中文标签式语言,是否有必要规范为英文的xml作为游戏读取资源使用,以避免ofz君所说的问题(同时规范一下代码)(当然还要写一个转换器)。另外脚本语言也推荐一下lua吧。
2.场景过度场景的控制脚本具体会怎样?
3.LZ列出来的脚本均为资源定义脚本,那么将这些资源按照脚本编写者的逻辑和需求联系在一起呢?
页: [1] 2 3 4
查看完整版本: 【11.22修改】AVG游戏引擎制作