@@ -20,6 +20,7 @@ const wanakana = require('wanakana')
20
20
const smallKanas = 'ぁぃぅぇぉゃゅょ'
21
21
let kuroshiroLoaded = false
22
22
23
+ // 辞書のローディング。
23
24
exports . loaded = new Promise ( ( resolve , reject ) => {
24
25
kuroshiro . init ( function ( err ) {
25
26
if ( err ) {
@@ -31,7 +32,7 @@ exports.loaded = new Promise((resolve, reject) => {
31
32
} )
32
33
} )
33
34
34
- // Check the first word against remaining of the shiritori chain.
35
+ // しりとりのルールのチェック。
35
36
exports . check = ( word , chain ) => {
36
37
if ( ( chain === undefined ) || ( chain . length === 0 ) ) {
37
38
return true
@@ -42,13 +43,16 @@ exports.check = (word, chain) => {
42
43
chain = chain . map ( ( e ) => kuroshiro . toHiragana ( e ) )
43
44
}
44
45
46
+ // 漢字からひらがなにする。
45
47
const wordHira = wanakana . toHiragana ( word )
46
48
const chainHira = chain . map ( wanakana . toHiragana )
47
49
50
+ // 使った名詞をチェックする。
48
51
if ( chainHira . indexOf ( wordHira , 0 ) !== - 1 ) {
49
52
return false
50
53
}
51
54
55
+ // しりとりの最初の文字をチェックする。
52
56
const validKanas = exports . kanas ( chain [ 0 ] )
53
57
for ( const k of validKanas ) {
54
58
const begin = wordHira . slice ( 0 , k . length )
@@ -59,7 +63,7 @@ exports.check = (word, chain) => {
59
63
return false
60
64
}
61
65
62
- // Returns a Set of valid kana sequences for the next word.
66
+ // 名詞からしりとりのひらがなを選ぶ。
63
67
exports . kanas = ( word ) => new Set ( ( ( ) => {
64
68
if ( kuroshiroLoaded ) {
65
69
word = kuroshiro . toHiragana ( word )
@@ -93,14 +97,13 @@ exports.kanas = (word) => new Set((() => {
93
97
]
94
98
} ) ( ) )
95
99
96
- // Evaluate one round of game with for given word and previous inputs.
100
+ // しりとりのゲームループ。
97
101
exports . interact = ( dict , word , previousInputs , callbacks ) => {
98
102
const next = exports . kanas ( word )
99
103
if ( ( next . size === 0 ) || ! exports . check ( word , previousInputs ) ) {
100
104
return callbacks . lose ( )
101
105
}
102
106
const key = next . values ( ) . next ( ) . value
103
- // TODO(proppy): add multiple key lookup
104
107
dict ( key ) . then ( ( words ) => {
105
108
const unused = [ ]
106
109
if ( words ) {
0 commit comments