3章3話:スパゲッティ
▌// [LOG] 2018-08-27 13:55 JST
照がゲームを作り終えてWebサーバーに上げた。
1日で作るゲームだったはずが、数日ガチで作り込んだものだった。
やり出したら止まらなくなったそうだ。
今は3年の手伝いだが部のパソコンに向かっている。それもイヤフォンをしながら。
照も音楽聴くんか~と僕はちょっと嬉しくなって、遅い昼メシを食べながら訊ねたら、聴かせてくれた。アニソンだった。
意外すぎて笑った。いや、そうでもねえのか? ゲームやるし?
外部指導者が来て、照が作ったゲームをみんなでテストした。
試用に関する説明は各自手元のパソコン画面で見た。
それによると「わらしべ長者」をベースにした交換ゲームだった。
ただし湯島が最初に見た「一本道」フローが変更して、「誰に」「何を渡すか」で結果が変わる仕組みだった。
構造はシンプルに3つ。
1つめ、Webインターフェースとの接続部分
2つめ、ゲームロジック
3つめ、データ
ゲームの中身はJSONに書いてあり、NPCが何を欲しがっていて、何をくれるかはここで管理するとある。
「わざわざ書く意味がわかるかな?」と指導者に聞かれて、僕はドキッとした。
「えっと、ここを弄るだけでアイテムを変更したり増やしたりできる?」
「そういうこと。コードを書き換えなくても内容を増やせる構造だよ」
交渉の仕組みは、プレイヤーが提示したアイテムの組み合わせが、NPCの条件と一致したら成立する。「状況を見て交換するゲーム」にしたことで、面白みある。
✦フローチャート
開始
↓
アイテム取得
↓
交渉・交換ループ
↓
条件分岐(行動ログ蓄積)
↓
ゴール到達 or 終了条件
↓
評価計算
↓
エンディング決定
↓
ランキング反映
エンディングは4つ。
富豪エンド(最大資産)
仲介者エンド(交換回数最多)
人助けエンド(満足度最大)
カオスエンド(意味不明ルート)
部員たちでやった結果、僕の画面はこうなった。
総価値:85
交渉成功率:72%
特殊ボーナス:+20(困っている人を3人助けた)
ランキング:
1位:YUSHIMA 110点
2位:IORI 98点
ランキングまで出せるのかよ。
僕はポカンとした。超簡単ボットで四苦八苦している僕には絶句レベル。アイテム増やせるとかのレベルじゃねえ。部品全部作ったんかな。
やべえな、照。
▌// [LOG] 2018-08-27 22:55 JST
僕は2学期の部のマニュアルを見て、突然、猛烈に進めないとまずい気がした。
次に学ぶことにMeCab導入があった。
和布蕪だ、また食べ物かよと思ったら、開発者の好物だった。
MeCabは、日本語の文章を単語ごとに分解し、品詞や読みなどを解析する形態素解析エンジンだという。
英語はスペースで区切られている。
→ “I love mekabu”
日本語だとどこで区切るか不明だから処理できない。そこでMeCabを使って区切りを入れる。
→ 「私は和布蕪が好き」
→ 「私 は 和布 蕪 が 好き」
解説サイトを見て、導入を始めたがぜんぜんうまく動かない。
インストールして開いたらすぐ使えると思ったら、Pathが見つからないと言われる。 夕飯も食わんと一個ずつ確認して、やっと使えるようになったときには23時近かった。
クーラーで冷えすぎた部屋が寒くて、一度切ったら今度は汗が噴き出した。
夏は嫌いだ。
最初に書いたPythonのファイルにMeCabの部分を反映させて、動作確認した。
方言:えらい
標準語: 辛い
方言:はよせい
標準語: は よせ い
方言:えんかった
標準語: え ん かっ た
結果、「はよせい」「えんかった」の置き換えはなかった。
そりゃそうだ。JSONには分かち書きされる前の「はよせい」「えんかった」がある。「は よせ い」の形で「早くして」に置き換えないとマッチしない。MeCabを使うことで、意味のあるフレーズが区切られてしまったのだ。
一方で、「考えんかった」は「考えん かっ た」になって、MeCab導入前の「考いなかった」にはならなかった。
だが結局のところ、「拓人はえらいね」は「拓 人 は 辛い ね」になるから、文脈を判断するために品詞処理が必要になる。
時計を見て、〈ことつて〉のSOSは避けた。
照は夜型で起きているのは知っているが、朝にしよう。
いや。夏休みやし、朝は寝てるよな。
うじうじしていたら、照からキタ!
照『今だんね?』
「へ?」
だんねは、「大丈夫」の意味だが祖父母くらいしか使っていなかった。
照のやつ、調べたんだな。
僕は笑った。
拓『だんねぞ~』
照『何か困ってる? 今聞くよ? 起きてる前提』
拓『どうせ部活だけやし夜更かし中』
照『どこまで何を考えて何をやったか話してみて』
拓『今メカブ入れて、分かち書きってのやったんだけど、「拓人はえらいね」の変換問題は解消できんかった。その前は、ifで書いてて』
照『ここに貼って』
拓『
# 3. 変換
result = input_text
if "目に" in input_text:
result = result.replace("えらい", "辛い")
elif "しんどい" in input_text:
result = result.replace("えらい", "辛い")
else:
for dialect, standard in d.items():
result = result.replace(dialect, standard) 』
照『見た』
僕が書いたのは、「目に」が含まれているとき、「えらい目にあった」→「えらい」を「辛い」に変換して終わる。
elseには行かない。
「目に」はないが「しんどい」が含まれているとき「えらいしんどい」→「えらい」を「辛い」に変換して終わるだ。
でも照には見せられないほど、大量に書いたやつもある……。
拓『この方言面倒くせえんだ。「えらい出世した」のときは、「すげえ出世した」なんだよ。でもこのままだと「辛い出世した」になる。「えらい先生」はそのままでええのに、「辛い先生」になる』
照『「えらい=辛い」「えらい=すごい」「えらい=えらい」のパターン全部必要になってくるね』
拓『それな! 全部ifで書いたんだ。「いまえらい」「えらいしんどい」「えらいしんどかった」「えらいめにあった」て。でもキリねえし、まだ単語1個めやぞ』
照『スパゲッティ』
拓『あ、これがかの有名なスパゲッティ』
照『シンプルなコードで書けるけど、でも拓人、範囲を決めて。今の拓人に、文脈とれるボットは早い。先輩たちにテストしてもらう時間も必要。この件に関してオレ、テスター向かない(笑)』
拓『だんねだんね』
照『あ、そうやって使うんだ!』
拓『ほやぞ』
照『高難度方言』
僕は照には言いそびれたが、「えらい先生」にも二つ意味がある。肩書きのある「偉い先生」か、褒め言葉の「すごい先生」。それこそ話してる中身による。区別つかねえんだ。
照『とりあえず、MeCab使うのやめようか』
拓『へい』
そんなふうにして、僕は照におんぶされる状態で方言を標準語にするボットを作り、文化祭当日を迎えた。
我がプログラミング部でもっとも好評を得たのは照のゲームだった。
何が面白かったか聞くと、ほぼ同じ理由だった。
「ランキング!」
「今日の1位とか出るのすごくない?」
ランキングを取るためだけにゲームに来た生徒たちもいた。
みんな格付けが好きだな。朝見る番組の占い、地味に不愉快なんだよな。その日の魚座、僕の星座は微妙な5位だった。
▌// [LOG] 2019-02-21 15:15 JST
拓『照、僕と同じで早生まれだったな。水瓶座』
テル『うん。オレ水瓶座。16歳』
その言葉に僕は硬直した。
こいつ、照の未来を生きてやがる……
照の命日は12月25日、15歳だった。永遠の15歳だ。
僕は窓の外を見た。西棟の寮部屋が見える。こうしてあらためて見ると、向かいの部屋がよく見える。
見える……。
カーテンさえ開いていればだが、照の異変に気づくことができた生徒は、西棟にもいたんだ。
生徒のいない寮は沈黙が横たわっていた。
嵐の前の静けさのように、僕の胸の内も今は静まり返っていた。
※MeCabの分割結果は辞書・バージョンによって異なります。本文の出力例は実際と差異がある場合があります。




