变量与定义角色
# 变量与定义角色
这次,我们学习的内容非常的简单,你不用担心过于复杂。
# 变量
在编程中,变量是一个重要的因素。而 Python 里的变量可以存储各种值,如布尔值、整数值、字符串...(这些在之前存档文件那一章也有稍微提到过。)
这是上次的脚本:
label ch1_start:
$ persistent.playthrough = 0
$ persistent.anticheat = renpy.random.randint(1000, 0)
$ delete_all_saves()
stop music fadeout 2.0
scene bg club_day with dissolve_scene_full
"今天是学园祭的第一天。"
show monika 2 at t42
m "好了,各位!我们开始准备吧!"
show sayori 4r at t43
s "耶!小饼干!"
show natsuki 2l at t41
n "要不也来尝下我的纸杯蛋糕?"
show yuri 3m at t44
y "...其实都可以了。"
$ n_aff = 0
$ s_aff = 0
menu:
"那么,我该先吃些什么呢?"
"纸杯蛋糕":
n "怎么样,是不是很好吃啊?"
$ n_aff += 1
$ s_aff = s_aff - 1
"小饼干":
s "怎么样,是不是很好吃?"
$ s_aff += 1
$ n_aff = n_aff - 1
menu:
"我该先和谁交流?"
"纱世里":
s "你好啊!在文学部感觉怎么样?"
"莫妮卡":
m "嗨,有什么事吗?"
"夏树":
n "哼,看我干什么?"
"优里":
y "你好..."
if s_aff >= 1:
s "诶嘿嘿~"
mc "总之,以后也要多多关照!"
让我们来增加一些新东西:
label ch1_start:
$ persistent.playthrough = 0
$ persistent.anticheat = renpy.random.randint(1000, 0)
$ delete_all_saves()
stop music fadeout 2.0
scene bg club_day with dissolve_scene_full
"今天是学园祭的第一天。"
show monika 2 at t42
m "好了,各位!我们开始准备吧!"
show sayori 4r at t43
s "耶!小饼干!"
show natsuki 2l at t41
n "要不也来尝下我的纸杯蛋糕?"
show yuri 3m at t44
y "...其实都可以了。"
$ n_aff = 0
$ s_aff = 0
menu:
"那么,我该先吃些什么呢?"
"纸杯蛋糕":
n "怎么样,是不是很好吃啊?"
$ n_aff += 1
$ s_aff = s_aff - 1
"小饼干":
s "怎么样,是不是很好吃?"
$ s_aff += 1
$ n_aff = n_aff - 1
menu:
"我该先和谁交流?"
"纱世里":
s "你好啊!在文学部感觉怎么样?"
"莫妮卡":
m "嗨,有什么事吗?"
"夏树":
n "哼,看我干什么?"
"优里":
y "你好..."
if s_aff >= 1:
s "诶嘿嘿~"
mc "总之,以后也要多多关照!"
if s_aff >= 1:
call ch1_exc_sayori
elseif n_aff >= 1: # 这本来可以不用加,但是保险起见...
call ch1_exc_natsuki
return
label ch1_exc_sayori:
stop music fadeout 2.0
scene bg club_day with dissolve_scene_full
show sayori 1a at t11 zorder 2
s "[player]?"
mc "怎么了?"
$ sleep_time = renpy.random.randint(0, 4)
while sleep_time == 0:
$ sleep_time = renpy.random.randint(0, 4)
s "你已经睡了[sleep_time]个小时了!"
s "这里又不是午睡部!"
mc "好啦好啦,就让我睡一会。"
return
label ch1_exc_natsuki:
stop music fadeout 2.0
scene bg club_day with dissolve_scene_full
show natsuki 2c at t11 zorder 2
n "对了,[player]。"
n "你说过你喜欢漫画对吧?"
mc "是啊,怎么了?"
n 2l "我想你一定会喜欢这个!"
"夏树把我带到了橱柜旁。"
hide natsuki
play sound closet_open
scene bg closet
"橱柜里放满了漫画。"
mc "哇!"
show natsuki 4z at t11 zorder 2
n "怎么样?喜欢吧?"
return
运行脚本,如果 s_aff 大于或等于 1,就会触发 Sayori 支线; 否则如果 n_aff 大于或等于 1,就会触发 Natsuki 线。 你可能也会发现,在这两条线路中,Sayori 和 Natsuki 都会说出 MC 的名字。
扩展知识
这里的 [player] 会被引擎自动替换成 MC 的名字。
while
是 Python 中的一种循环,用法如下:
while <条件>: # 如果条件符合:
# 执行代码...
而在这里,Sayori 支线中的以下代码就利用了 while
:
$ sleep_time = renpy.random.randint(0, 4)
while sleep_time == 0:
$ sleep_time = renpy.random.randint(0, 4)
s "你已经睡了[sleep_time]个小时了!"
代表着如果 sleep_time
这个变量等于 0 就重新随机生成整数并赋值到 sleep_time
,如果它还是等于 0 就会继续循环,否则会继续运行下面的代码。
下面的对话就会调用刚刚定义的变量,使 Sayori 说出“你已经睡了2个小时了!”之类的话。
(Ren'Py 的官方文档有对 renpy.random.randint
这个函数的介绍,如果你有所了解,会知道刚刚其实不用这么麻烦,但毕竟刚好可以演示 while
。)
可见,如果想要在对话中说出变量值,只需要加上一个 []
并在里面写上变量名(当然也可以是任何有效的 Python 表达式)就可以了。
# 定义角色
有时候,我们可能需要增加一些其他的角色来丰富剧情。所以,我们现在就来动手添加一个角色吧。
Next 分支:
- 打开 definitions.rpy 文件,然后 Ctrl+F 查找
# 角色变量
,找到下面的代码:
# 角色变量
# This configure the character variables for writing dialog for each character
## To define a new character with assets, do so like this
# define e = DynamicCharacter('e_name', image='eileen', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
## To define a new character without assets, do so like this
# define en = Character('Eileen & Nat', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define narrator = Character(ctc="ctc", ctc_position="fixed")
define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define s = DynamicCharacter('s_name', image='sayori', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define m = DynamicCharacter('m_name', image='monika', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define n = DynamicCharacter('n_name', image='natsuki', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define y = DynamicCharacter('y_name', image='yuri', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define ny = Character('夏树 & 优里', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
- 复制这一行:
define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
- 然后换行并粘贴,把
mc
改成任意字符,如a
;括号后的'player'
改成之后要用的变量名,如'a_name'
; - Ctrl+F 查找
default s_name = "纱世里"
,复制换行并粘贴,把s_name
改成你前面输入的变量名。 比如,前面我们把括号后的变量名改成了a_name
,那么这一步这里的s_name
就要改成a_name
。 - 把
"纱世里"
改成你想要的名字,比如这里改成"Allen"
。
到这里,一个角色就定义完成了!最后的代码应该长这样:
# 角色变量
# This configure the character variables for writing dialog for each character
## To define a new character with assets, do so like this
# define e = DynamicCharacter('e_name', image='eileen', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
## To define a new character without assets, do so like this
# define en = Character('Eileen & Nat', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define narrator = Character(ctc="ctc", ctc_position="fixed")
define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define s = DynamicCharacter('s_name', image='sayori', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define m = DynamicCharacter('m_name', image='monika', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define n = DynamicCharacter('n_name', image='natsuki', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define y = DynamicCharacter('y_name', image='yuri', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define ny = Character('夏树 & 优里', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define a = DynamicCharacter('a_name', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
# ...
# Default Name Variables
## To define a default name do so like this
# default e_name = "Eileen"
default s_name = "纱世里"
default m_name = "莫妮卡"
default n_name = "夏树"
default y_name = "优里"
default a_name = "Allen"
在之后的章节里,本文档会详细讲解如何为 Mod 增加资源(包含增加立绘),而以后会继续教您怎么扩展这个角色。
上次更新于: 1/22/2022, 3:45:15 AM