精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>游戏元素>>● 游戏开发>>程序开发>>程序架构>>我的RPG制作之路(八)

主题:我的RPG制作之路(八)
发信人: bb_boy()
整理人: nhyjq(2003-01-05 15:50:42), 站内信件
    游戏制作之我见----我的RPG制作之路(八)
                         
                        天眼
========================================================

    条件分支我们可以采用类似汇编语言的方法,在解释机内设
置一个判断专用的标志变量(if_flag),根据if(...)括号内的
表达式设置这个变量。然后then(....)再根据这个变量的值决定
是否转向括号内指定的标号行(这些都是在前面讲过的函数 val
里实现),如:

    if(cur_x<10) //条件成立设置判断标志为1,反之为0
xxxxxx
xxxxxx
then(label1) //判断标志位为1则转向label1否则继续
xxxxxx
xxxx
:label1
xxxxxx


我们在读入脚本进内存时时,同goto一样也要将then括号中
的标号转变为相应的行号。

这样我们就可以和汇编语言一样,结合其他变量实现循环。

s1=0 //给循环记数器设置初值
:label1
xxxxxxx //需要循环执行的语句
xxxxxx //需要循环执行的语句
s2=s1*10 //需要循环执行的语句
xxxxxx //需要循环执行的语句
s1+=1 //循环记数器自动增加
if(s1<10) //判断循环是否结束
then(label1) //如果没有结束跳转到label1
xxxxx //如果结束了继续执行下面这些行

另外还要说明的一点是,在RPG游戏时我们经常会遇到弹
出有多项选择。比如说在买东西的时候,会列出多个物品让你选
择。我们把这多项选择也做成函数:

int choose(char *str,int n,char *item,int must)

就拿前面买东西来说,你在一个武器店的地图中放置一个店
老板的NPC,他对应的脚本如下:

say(12,30,"您好,欢迎光临本店!")
:ask //询问您要什么
s1=choose("您要?",3,"买东西 卖东西 不要了",1)
if(s1==0)
then(buy) //跳转到买东西
if(s1==1)
then(sell) //跳转到卖东西
//不买也不卖
say(12,30,"不要了?您慢走!")
end
:buy //买物品
s1=choose("买什么?",5,"匕首 竹剑 钢剑 梭镖 铜锤",0)
xxxxxxxxxx //根据选择的选项s1
xxxxxxxxxxx //给玩家增加物品,减少金钱等等
xxxxxxxxx //
xxxxxxx //
xxxxxxxxxx //
if(s1==-1) //如果选择"买什么"时点了ESC退出
then(buy) //放弃买物品跳转到"您要什么"的选择
goto(ask) //买了一件物品后继续选择要买的物品
:sell //卖物品
s1=chooseobj() //从自己有的物品中选择一样
if(s1>100)      //判断物品的种类
    then(nosell)    //决定是否跳转到nosell
    xxxxxxxx        //根据玩家选择的物品s1
    xxxxxxxxx       //减物品,加金钱等等
    xxxxxx          //
    if(s1==-1)      //选择要卖的物品时点了ESC键退出
    then(ask)       //放弃卖物品跳转到"您要什么"的选择
    goto(sell)      //卖完一件,选择还要卖的
    :nosell         //不收这种物品
    say(12,30,"抱歉,这种东西我们不收!")
    goto(sell)      //继续选择要卖的物品

    这其中的choose函数是我们在游戏程序中实现的一个多项选择的
函数,以s1=choose("您要?",3,"买东西 卖东西 不要了",1)为例

    s1内放置的选项号码(第一个是0,第二个是1,依次类推)
    "您要?"是多项选择时的提示
    3是选项的个数
    "买东西 卖东西 不要了"是三个供玩家选项,中间以' '分隔
    1是强制玩家必须从这些选项中选择一个,不能按ESC键放弃
          选择(此时返回-1给s1),如果是0则可以按ESC键放
          弃选择。

    另外 chooseobj()也是我们在游戏中实现的一个函数。从玩家的
物品中选择一样,返回它在玩家物品匣中的位置,它在地图行走、战
斗中的物品使用都可以使用。


============《待续》==============

--
路漫漫其修远兮,吾将上下而求索。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.100.17.241]

[关闭][返回]