Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2009-10-11(Sun)

RPGでMoose、その2:性別と一人称、そしてテンプレート

|  RPGでMoose、その2:性別と一人称、そしてテンプレート - 浅倉卓司@blog風味? を含むブックマーク  RPGでMoose、その2:性別と一人称、そしてテンプレート - 浅倉卓司@blog風味? のブックマークコメント

 性別を決めるゲームはそれなりにあると思うのですが(テーブルトークRPGだとだいたい決めるかな?)、一人称を決めるゲームはあんまりないですね。でも今回は決めることになってます。

package TG::PC;
use utf8;
use Any::Moose;

# 性別
use TG::Param::Gender;
has gender => (
    is  => 'ro',
    isa => 'TG::Param::Gender',
    handles => {
        gender_name => 'name',
        is_male   => 'is_male',
        is_female => 'is_female',
    },
);

# 一人称
use TG::Param::Firstperson;
has firstperson => (
    is  => 'ro',
    isa => 'TG::Param::Firstperson',
);
has me => (
    is => 'ro',
    lazy => 1,
    builder => '_build_me',
);
sub _build_me {
    my $self = shift;
    $self->firstperson->as_string($self);
}


 なんでこんな風になってるかと言いますと、

 $pc->fullnameが叫ぶ。

#IF $pc->is_male

「$pc->meはそんなことしない!」

#ELSE

「$pc->meはそんなことしてません!」

#ENDIF

「私も$pc->nicknameに限ってそんなことはしないと信じたいけど、でもここに証拠があるのよ……」

――みたいな文章を作るためです。

 まあ、ちょっと気の利いたゲームブックみたいな感じですね。完全にキャラのイメージ通りってわけにはいきませんが、一応それっぽい文章になります。

 上記の例だとキャラの性別で口調を変えてるだけですが*1、性別で全然違う内容にしたりもできます。


 ちなみに選べる「一人称」は

  • ボク
  • ぼく
  • わたし
  • わたくし
  • あたし
  • オレ
  • 自分
  • [自分の名前]
  • [自分の名前]ちゃん
  • [自分のニックネーム]

――でした*2

 $firstperson->as_string() に $pc を渡してるのは一人称で名前やニックネームを出すためですね。


 当時はテンプレートのパーサを自作してましたが、今なら手頃なテンプレートエンジンをそのまま使えそうですね――とか思いましたが、文章を出力するだけじゃなくてキャラのパラメータ操作なんかも埋め込んでましたので、既存のテンプレートエンジンをそのまま使うのは難しい気もしますね。ううむ。

*1:ちなみに「口調」という項目を作るべきという話もありましたが、毎回口調を変えた文章を書くのも難儀なのでそれはやめました。

*2:もっと増やせたとは思うけど、「普通じゃないのを増やしても」的な判断が働いて上記になったんだっけなぁ。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20091011
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |