﻿名称：最佳辩手 V4.0 By Jeffrey Tse

【作者寄语】
如果您看到了这里，那说明您已经离成功不远了，请不要看到“代码/剧本”二字就望而止步，只要您认认真真阅读完接下来的内容，相信您一定会有所收获！
也许这个小工具不仅可以应用在辩论赛上，或许您也可以结合您的创意将它应用到您的文案讲解亦或是产品展示等方面。
如果您觉得这个小工具对您有所帮助，请随意打赏，我将对您支持和鼓励表示最由衷地感谢!
如果您有什么意见或建议，也欢迎与我取得联系，感谢您的使用与支持！

///////////////////////////////////  剧本说明 /////////////////////////////////////////////////////

剧本说明：一共包含三种场景，按照需求使用场景，程序将会自动解析剧本并按场景的顺序依次进行。

【主要】
1.场景描述： 场景描述內容必须用标识符<!--ACTION-->包裹起来。
2.场景资源： 场景中使用到的资源（包括图像、音频）必须放置在脚本（剧本）所在的文件夹下，引用时使用相对路径。
3.场景类型： Type=caption|theme|timer（场景类型只可以为（标题|主题|计时器）三种中的一种）
4.场景背景： BkImage=[0,100]xxx.jpg（其中方括号括起来的部分为可选透明渐变动画，其中0表示完全透明，100为不透明，默认渐变动画为[0,30]，表示该背景图从透明度0变化到30）
5.背景声音： BkSound=[Loop@3]xxx.mp3 (音频文件只能为wav|mp3格式, 如果下一场景的背景音和循环数都相同或者为[LastBkSound]则继续播放该背景音，其中方括号括起来的Loop表示循环次数，@3表示循环3次，默认循环1次，[Loop]表示无限循环)
6.场景标题： Title=xxxx （场景的大标题仅限于一行）
7.文字效果： TextEffect=[Typing@80]（使用标识符[Typing]指定打字输出效果，默认打字速度为每秒80字，如需指定打字速度，可以使用标识符@N指定速度）
8.自动切换： AutoSwitch=[Switch,2]0 （场景自动切换时长，单位为秒, 0秒表示不自动切换，方括号括起来的Switch表示自定义切换，正数表示向下切换N个场景，负数表示向上切换N个场景, 默认值为[Switch,1]）
9.快捷按键： 默认快捷按键 激活窗口（ALT + Z）、上一幕（ALT + B）、下一幕（ALT + N）、重置1/2/3/4号计时器（ALT + Q/W/E/R）、开始或暂停1/2/3/4号计时器（ALT + A/S/D/F）

PS. 目前计时器场景支持至多4个计时器， 从左往右，从上到下，依次是1号、2号、3号、4号计时器。

【补充】
一、主题场景（Theme Action）
1.场景内容： Content=展示内容 （场景内容当前仅限于主题(theme)类场景中使用，多行内容必须包裹在标识符{|和|}之间才能有效）

二、计时器场景(Timer Action)
1.副标题：Caption=开篇陈述 （计时器可以拥有副标题，副标题用||隔开）
2.计时器时长： Time=600 （计时器时长用来控制计时器场景中计时器的总时长，单位为秒）
3.多计时器：Time=300||500 （多个计时器的时长用||隔开，支持至多4个计时器）
4.计时器警告： Alert=120,[xxx.mp3]200，280 (数字表示警告时刻，可以有多个并用逗号隔开,如需自定义警告音，请用方括号指明声音文件的相对路径，音频文件只能为wav|mp3格式)
5.计时器闪动： Alert=120,[Flash@5]200,[Flash]280 (使用标识符[Flash]表示在指定的时刻闪动计时器, 默认闪动次数为5次，如需指定闪烁次数，可使用标识符@N指定闪烁N次)
6.计时器格式:  TimeFormat={Format} (自定义时间格式使用的格式化语法，具体参见【高级格式化】）

PS. 时间格式使用高级格式化中所使用的语法来描述内容格式，其中的当前时间的分钟数和秒钟数用表示如下：
[MM] 表示分钟数
[SS] 表示秒钟数
[DEFAULT] 表示默认计时器格式，[MM]:[SS]

示例：
[MM]分[SS]秒    显示的时间格式为：00分00秒
[MM]:[SS]       显示的时间格式为：00:00
[DEFAULT]       默认格式为[MM]:[SS]
<c #Red>[DEFAULT]</c>    显示红色的默认时间格式：00:00 (红色字体)

7.计时器关键颜色: KeyColor=[#red]120,[#ff0000]100,50 (数字表示关键时刻，方括号括起来的部分表示变化的颜色，若不指定颜色，将恢复默认计时器颜色)
8.计时器关键背景: KeyImage=[xxx.jpg]120,[#blue]100,50 (数字表示关键时刻，方括号括起来的部分表示变化的背景图片，若不指定图片，将恢复默认计时器背景)

9.计时器模式: TimerMode={模式选项} (模式选项可以有多个，依次填入即可)

模式选项如下：
[SingleTime]   单一计时模式选项，表示同一时刻只能有一个计时器在计时，一个计时器开始计时，其余计时器将自动暂停计时 ( 开启使用@On，关闭使用@Off，默认为@On )
[SingleAlert]  单一警告音选项，表示同一时刻只能有一个计时器的警告音在播放，一个计时器播放警告音，其余计时器将自动停止播放警告音 ( 开启使用@On，关闭使用@Off，默认为@On )
[PauseFlash]   暂停时闪烁选项，表示当计时器暂停计时时是否进行闪烁 ( 开启使用@On，关闭使用@Off，默认为@Off )
[AutoReset]    自动重置选项，表示当切换场景的时候否自动重置计时器 ( 开启使用@On，关闭使用@Off，默认为@Off )
[ZeroReset]    归零重置选项，表示当计时为零时是否自动重置计时器 ( 开启使用@On，关闭使用@Off，默认为@Off )

10.计时器按钮格式化 (自定义按钮格式使用的格式化语法，具体参见【高级格式化】）

[DEFAULT] 表示默认文字内容

重置按钮：ResetText={Format} 
开始按钮：StartText={Format} 
播放按钮：PauseText={Format} 

示例：
ResetText=<c #Red>[DEFAULT]</c>    显示红色的默认文字：重置 (红色字体)
StartText=<c #Blue>[DEFAULT]</c>   显示蓝色的默认文字：开始 (蓝色字体)
PauseText=<c #Yellow>PAUSE</c>     显示黄色的自定义文字：PAUSE (黄色字体)

三、通 用（Common）
1.色彩表示：所有色彩使用“#”加十六进制RGB，如：#000000，或者“#”加色彩名，如：#blue，#orange
2.背景颜色：当您不想使用图片作为背景的时候，可以使用指定颜色作为背景，如：蓝色背景：BkImage=#blue

PS. 为了方便编写剧本，默认预定义了一些颜色，如：
#red       （红色）
#blue      （蓝色）
#lightblue （浅蓝色）
#darkgray  （深灰色）
#yellow    （黄色）
#green     （绿色）
#orange    （橙色）

PS. 更多预定义颜色请参见 https://developer.mozilla.org/zh-CN/docs/Web/CSS/color_value

四、其 他（Addition）
1.宏 定 义： #define NAME = VALUE (用来定义一些可以用于重复使用的值，方便通过名字直接引用该值, 简单的来说它就是替换)

PS. NAME = VALUE 间需要用空格间隔。当定义的宏名称与内容有刚好相同时，为了避免命名冲突，使用时应将宏名字包裹在#!与!#之间。
例如：#define BkImage = 背景图片 （BkImage刚好与场景属性名相同，因此需要使用宏名称的时候必须使用#!与!#包裹，否则将会导致背景设置失效）

如果您希望忽略宏替换可以使用\将名称包裹，系统将会原样输出该名称，而不会进行宏替换。
例如：Content={| \BkImage\属性表示背景图片 |} (这里我们希望“BkImage”按原样输出，而不是替换成“背景图片”四个字)

2.换 行 符： <br/> (使用换行符号使可以使显示的文本换行，也可以使用<br>或者<n>)
3.续 行 符： \\\\ (为了剧本可阅读性，可以使用续航行符号将剧本代码换行，程序会自动将续行与上一行合并)
4.注 释 符： /* 内容 */ （有时候您想暂时注释掉一段剧本片段，而不想删除掉，您可以使用/*与*/将内容包裹，这样程序就会直接忽略掉这段内容）


【高级格式化】
当您需要展现更为丰富的内容的时候，如修改标题颜色、字体，插入图片或者或者插入超链接等，可以使用我们的高级格式化功能，它将给您带来更为精彩的展示体验。

一、资源定义:
定义一个资源的语法为 #define {类型} {名字} {属性} (用来定义一些资源，如字体、图片等，通过名字直接引用该资源, 主要使用在场景内容的高级格式化中)
1. 定义字体：#define FONT {名字} {字体} {字号} Bold Underline Italic （属性间用空格隔开，其中字体名和字号不可省略，字体名如果存在空格则需要使用双引号引起来，其余三种属性粗体（Bold）、斜体（Italic）、下划线（Underline）可以随意组合）
2. 定义图片：#define IMAGE {名字} {路径} (图片路径可以是相对路径，相对于剧本所在文件夹如：Image\xxx.png，也可以是绝对路径如：C:\xxx\xxx.png)
3. 定义颜色：#define COLOR {名字} {色彩} (名字必须使用“#”作为开头，如：#blue，色彩使用“#”加十六进制表示RGB，如：#000000)

二、格 式 化:
格式化使用一种经过简化的类html格式文本来描述复杂的图文格式。使用<>符号来标识语法标签，支持标签嵌套，如<l><b>text</b></l>。
a:超链接功能；
如: <a http://www.google.com>谷歌</a> 一个网址链接;
   <a notepad.exe>记事本</a> 打开记事本程序;
   <a calc.exe>计算器</a> 打开计算器程序;
   <a explorer.exe>资源管理器</a> 打开资源管理器;
   <a c:\xxx.ppt>PPT</a> 打开一个文件;
   <a switch:n>Switch</a> 向上或者向下切换n个场景;
   <a script:c:\xxx.txt>加载剧本</a> 加载一个剧本文件;
   <a image:c:\xxx.png>Image</a> 显示图片;
   <a image:[0,80]c:\xxx.png>Image</a> 显示图片，渐变动画为[0,80];
   <a sound:c:\xxx.mp3>Sound</a> 播放声音;
   <a sound:[Loop@3]c:\xxx.mp3>Sound</a> 播放声音,并循环3次;

i:表示内容使用斜体或插入图片；
如：<i>text</i> 表示text内容使用斜体; 
   <i image1> 表示插入图片image1，需要预先定义图片资源;

b:表示字体是否使用粗体；
u:表示内容使用下划线；
s:表示内容被选中；
c:表示字体使用的颜色； 如：<c #xxxxxx>text</c> 表示text内容使用#xxxxxx颜色，#xxxxxx表示16进制的RGB值;
f:表示使用指定字体； 如：<f font1>text</f>表示text内容使用名称为font1的字体，需要预先定义字体资源;
n:表示换行；
p:表示一段落； 如：<p x>text</p>表示text内容是一个段落（以新行开始），x表示此段落文字水平距离（可省略）;
r:表示包含内容不使用标签语法功能；如：<r><i>text</i></r> 内部的文字原样输出;
x:表示从该处移动x个像素值； 如： <x 5>
y:表示该行固定位y个像素值； 如： <y 8>

【自定义快捷键】
如果您不想使用系统提供的默认快捷按键，也可以自定义, 如下：
#define SHORTCUT {动作} {键名} (键名可以是字母A-Z 或 数字0-9，定义好后使用 Alt键 + {按键} 即可触发相应的动作)

动作可选值如下：
ActiveApp     /* 激活应用窗口 */
LastAction    /* 上一幕 */
NextAction    /* 下一幕 */
TimerReset1   /* 1号计时器重置 */
TimerReset2   /* 2号计时器重置 */
TimerReset3   /* 3号计时器重置 */
TimerReset4   /* 4号计时器重置 */
TimerOpt1     /* 1号计时器开始或暂停 */
TimerOpt2     /* 2号计时器开始或暂停 */
TimerOpt3     /* 3号计时器开始或暂停 */
TimerOpt4     /* 4号计时器开始或暂停 */

例如：#define SHORTCUT TimerOpt1 T (按 Alt+T 组合键就可以操作1号计时器的开始与暂停)
     #define SHORTCUT TimerOpt2 Y (按 Alt+Y 组合键就可以操作2号计时器的开始与暂停)
     #define SHORTCUT ActiveApp U (按 Alt+U 组合键就可以在主动激活应用窗口了)

【包含外部剧本】
当您在编写一个较为复杂的剧本时，您可能会觉得将所有的剧本内容都写在同一个文件里太过冗长，这个时候您可以将您的剧本内容写在多个剧本文件中，然后在主剧本文件中将其引入，如下：
#include {剧本文件路径} （剧本文件路径使用相对路径 xxx.txt，但也可以使用绝对路径c:\xxx.txt，程序会在您使用#include引入的地方插入外部剧本文件的内容）


【注意】
一 、编码问题
1. 剧本文件必须是UTF8或者GBK编码，建议使用UTF8编码保存文件，该示例剧本文件的编码即是UTF8，否则程序解析剧本文件的时候将有可能会出现乱码。
2. 您可以使用系统自带的记事本打开或创建一个文本文件，然后选择文件->另存为，在这里即可看到在保存按钮一旁的编码选项，您可以选择使用UTF8编码格式进行存储。

PS. 如果您对编码问题仍然感到困惑，也可以直接忽略文件的编码问题，我们为您提供了更为简便的解决方案，您只需要将该剧本文件复制一份，然后直接修改剧本示例的内容即可。


【示例】
您可以使用软件主程序(Debate.exe)打开示例文件查看示例的效果了，当然您可以使用系统自带的记事本程序打开剧本文件以查看剧本内容，并根据自己的要求来修改或重新编写自己的剧本，很快您就会发现，其实它并不是想象中的那么困难，祝您编写愉快。
