中文偽春菜後援會論壇  

打印

[問題] 关于橘花那个 学习对话 和 对话 的功能

关于橘花那个 学习对话 和 对话 的功能

貌似没看出代码问题,为什么教完她却说听不懂呢?不知哪位大大 注意到这个问题了(或者说我火星了)?

根据愚者所见,教学系统(学习对话)是完美而和谐的,一切var中的存档都与预想的一样

难道导致这个悲剧发生的原因是 用于检验输入的话是否同存档中的一样 的那个函数?
即:
$sentence check
{
{$if ({$insentence({$save sentence {$check number Temp}},{$inputTemp})}) { {$sentence right} } else { {$check again} } }
\e
}

这其中当满足$if中条件时才能执行$sentence right,不过貌似总是执行check again?(执行到不能执行为止而导致人格说我听不懂~)

[ 本帖最後由 lika1 於 2008-7-11 06:04 編輯 ]

TOP

恩,果然很神奇,把落鸟里的那个同名函数拿来复制粘贴一下,就突然一切OK了,估计是空格之类的东西所导致的问题吧?

TOP

最新发现,又发现了个有趣的情况
我的代码如下:
//--------------------------------谈话系统---------------------------------------

$OnChoiceSelect,{$if ({$reference(0)}=="speaking")}
{
\0\s[4]{$username}要和Chii说什么呢?\n\n
\![open,inputbox,talking,-1]
}

$OnUserInput,{$if ({$reference(0)}=="talking")}
{
{$inputTemp={$reference(1)}}
\w8\w8
{$sentences check}
}

$sentences check
{
{$if ( ({$insentence({$inputTemp},"对不起")}) || ({$insentence({$inputTemp},"你好")}) ) { {$sentences base} } else { {$sentence check} } }
}

$sentences base;{$if ({$insentence({$inputTemp},"对不起")})}
{
{$talk1}
}

$sentences base;{$if ({$insentence({$inputTemp},"你好")})}
{
{$talk2}
}

$sentence check
{
{$if ({$insentence({$save sentence {$check number Temp}},{$inputTemp})}) { {$sentence right} } else { {$check again} } }
\e
}

$sentence right
{
\0\s[0]{$sentence answer {$check number Temp}}
{$check number Temp=0}
\e
}

$check again
{
{$check number Temp++}
{$if ({$check number Temp}>={$save number Temp}) { {$unknow sentence} } else { {$sentence check} } }
\e
}


$unknow sentence
{
\0\s[2]Chii不懂\w8.\w8.\w8.\n
\0\s[1]{$username}现在可不可以教我?\n\n
\q[可以的,teach]\n
\q[现在没有空,cancel]
{$check number Temp=0}
\e
}

$talk1
{
\0\s[2]asdfgh!~~~~~~~~~~~~~~~~~\w8.\w8.\w8.\n
}

$talk2
{
\0\s[2]zxcvbn!~~~~~~~~~~~~~~~~~\w8.\w8.\w8.\n
}

//----------------------------------教学系统

$OnChoiceSelect,{$if ({$reference(0)}=="teach")}
{
\0\s[3]Chii?\w8要教Chii什么呢?
\0\s[3]\![open,inputbox,teach sen,-1]
}

$OnUserInput,{$if ({$reference(0)}=="teach sen")}
{
{$LanguageTeachInputTemp={$reference(1)}}
{$save sentence {$save number Temp}={$LanguageTeachInputTemp}}
\0\s[3]Chii……\w7\w7\n当{$username}说这句话的时候Chii应该怎么说呢?\0\s[3]
\![open,inputbox,teach over,-1]
\e
}

$OnUserInput,{$if ({$reference(0)}=="teach over")}
{
{$LanguageTeachInputTemp1={$reference(1)}}
{$sentence answer {$save number Temp}={$LanguageTeachInputTemp1}}
\0\s[4]当{$username}说“{$save sentence {$save number Temp}}”的时候,Chii应该说“{$sentence answer {$save number Temp}}”,Chii记住了。
{$save number Temp++}
{$LanguageTeachInputTemp=0}
{$LanguageTeachInputTemp1=0}
\e
}

TOP

功能思路为:当和人格说话时,先检验是否与固定的词库有相同的,如果没有检查存档(var),如果还没有则问是否教学。
现在问题就出在这了
假如我的人格第一次运行,然后和人格说话,他问我是否教学,我答应教给她,这样输入的问答,能正确记录,但是再和她对话,一概跟我说不知道,如果再次用这种被动的方式教给他,他就能正确回答了。
假如我的人格第一次运行,第一次用被动方式教给他,他说不知道(如同上面那句话的情况),第二次我先点学习对话主动教给他,然后再找他说话,他能正确回答
假如我的人格第一次运行,直接选择主动教给他,他也能正确回答,以后无论用被动还是主动方式教给他都能正确回答
也就是说我教给他的第一个词,必须用主动方式教给他,它才能正确回答。以后的词无论主动被动都能正确回答

这到底是为什么呀?(以上三种情况,在重启后仍然存在~)

经过试验发现第一次主动的话比第一次被动的var档少了一个$check number Temp,0

恩,目前这个bug通过$_Variable中加了个{$save number Temp=1}解决了(相当于避开第一次),解决固然简单,但是为什么导致这种情况呢?

[ 本帖最後由 lika1 於 2008-7-11 07:54 編輯 ]

TOP

這種問題在程式語言上
應該類似於「沒有預先宣告變數」這樣的錯誤
然後因為呼叫到不存在的變數
產生了未知的錯誤而終止存取

事實上造成這種原因也不完全是美坂的錯
即使是YAYA也會有這類的問題
主要是寫程式的人要能養成預先宣告變數的習慣
畢竟不管用哪種語言寫怎樣的程式
預先宣告變數總是不會錯的
(C語言課本上的名言啊...XD)

[ 本帖最後由 時原砂 於 2008-7-11 20:57 編輯 ]
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

恩,的确美坂这个拿来就用让我很不习惯~,学C语言声明变量声明习惯了,每次看人格都会问自己:这个变量声明了么?哦,对,貌似不用声明也能做~。(其实偶是省事主义者)

TOP



當前時區 GMT+8, 現在時間是 2023-6-9 19:23

Processed in 0.015511 second(s), 10 queries, Gzip enabled.

清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格