查看: 86|回复: 0

[转载发布] 地图菜单窗口插件3:与公共事件交互【送:猜数字】

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月七日(秋) | 显示全部楼层 |阅读模式
    与公共事件交互

    菜单内部是死循环,所以所有的操作都需要预先定义好才行,但是按键的处理目前只开放了确认、取消和方向键,如果要玩家输入一个整数,就很尴尬了。

    一个合适的方法是,需要玩家输入整数的时候,使用公共事件里的输入数字的指令,得到需要的数字指令后,再回到这个菜单里。

    下面拿已经被轮子了无数遍的《猜数字》小游戏来举例子。

    小游戏的规则:随机生成 4 个0-9之间不同的数字,然后玩家有多次机会去猜数字。如果位置和数字都对了,就会得到A,位置不对但数字对了,就会得到B。

    比如答案是 1234 ,猜的是 1356,就会返回 1A1B。当返回 4A0B的时候,开启奖励选项,否则玩家只能选择退出重来。

    那么先说实现的逻辑吧~

    按照模板来:
    1. 首先在 init 的时候要生成一个答案字符串 string, 还要有胜利标志: judge 和历史记录,这里用数组 history。
    2. 主菜单是猜数字,子菜单有三个,“开始”、“退出”、“领奖”,点进去后分别触发打开开关123,并退出菜单。设置 3 个公共事件自动执行,开关分别是 123。
    3. 公共事件 2,3比较简单,就是退出和领奖。公共事件 1 里让玩家输入一个数字,并且分析这个数字和答案是不是一样的~如下图:


    注意到要限制一下猜的次数,脚本这么写就行了(6R的bug,这里是主要的部分)
    RUBY 代码
    1. class Interpreter
    2.   # 用于在事件脚本中调用的初始化方法
    3.   def init_plugin_CaiShuZi
    4.     # 生成答案字符串的蠢方法
    5.     a0 = rand(10).to_s
    6.     a1 = rand(10).to_s
    7.     until a1 != a0
    8.       a1 = rand(10).to_s
    9.     end
    10.     a2 = rand(10).to_s
    11.     until a2 != a1 && a2 != a0
    12.       a2 = rand(10).to_s
    13.     end
    14.     a3 = rand(10).to_s
    15.     until a3 != a2 && a3 != a1 && a3 != a0
    16.       a3 = rand(10).to_s
    17.     end
    18.     # 答案字符串
    19.     $_CaiShuZi_string = a0 + a1 + a2 + a3
    20.     # 猜对
    21.     $_CaiShuZi_judge = false
    22.     # 历史记录
    23.     $_CaiShuZi_history = []
    24.   end
    25. class Game_Party
    26.   # 插件 Task 设置
    27.   alias _CaiShuZi_set_mapwindow_task set_mapwindow_task
    28.         def set_mapwindow_task
    29.     # 保留之前的 task 设置
    30.     _CaiShuZi_set_mapwindow_task
    31.     # 新的内容只有插件开启的时候会添加
    32.     if$plugin_CaiShuZi_enable
    33.       # 具体的 Task 设置
    34.       if$_CaiShuZi_history.size < 8
    35.         name = "猜数字:开始@Quitmenu-Switchon[1]"
    36.         text = "回合数:  #{$_CaiShuZi_history.size}\n"
    37.         $_CaiShuZi_history.eachdo |t|
    38.           text = text + t + "\n"
    39.         end        
    40.       else
    41.         name = "猜数字:开始@Quitmenu"
    42.         text = "回合数已达 8 次,无法继续猜!"
    43.       end
    44.       @tasks_info.push Game_Task.new(name,text)
    45.       name = "猜数字:退出@Quitmenu-Switchon[2]"      
    46.       text = "直接退出游戏,不获取任何奖励"
    47.       @tasks_info.push Game_Task.new(name,text)
    48.       if$_CaiShuZi_judge
    49.         name = "猜数字:领奖@Quitmenu-Switchon[3]"
    50.         text = "回合数:  #{$_CaiShuZi_history.size}\n奖励是:回复剂 x#{10-$_CaiShuZi_history.size}"
    51.         @tasks_info.push Game_Task.new(name,text)
    52.       end
    53.     end
    54.   end
    55. end
    复制代码


    附上范例工程:


    其实原来的任务系统脚本还有些要修改的地方,等以后再更新吧~


    多说一点,这个地图菜单脚本为了力求简洁,里面只有Window,其他什么都没有,如果想显示菜单的背景图片,可以在事件里用显示图片,退出菜单后再释放。
    接下来可能要做的是,在修改某些设置的情况下,让子菜单内容和主菜单的选项同步更新。以前也试过,但是比想象中的要麻烦一些……
                本帖来自P1论坛作者q8832010,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=399503  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-13 19:24 , Processed in 0.047438 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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