もとはといえば俺はゲームが作りたくてプログラミングを始めたのである。最近ようやく手を付け、手始めとして、ゲームライブラリ pygame をいじくってみてる。ドキュメントとか読みながらひとつひとつ学んでいくのだけれど、そういうコツコツ基礎学習は俺の苦手とするところだ。そんなわけでとりあえず、覚えた基礎を応用して書いてみたのが今回の dialog play。

作ってみたのはゲームでよくみる会話画面。慣れるための習作なので、ひたすらキャラが喋るだけ。台本は以前かいたSSQ1のSSを使用。

Zキーで会話送り、Xキーではじめに戻ることができる。あとBGMとSEが鳴る。

会話送りの仕組みは、ちと頭を悩ませたが以下のような感じで書いてみた。

dialog = '''(典子)@あっははー!
(和田)@だはははー!'''
text_lis = dialog.split('\n')

def dialog(a):
    font = pygame.font.Font('{適当な日本語フォント}', 20)
    if a <= len(text_lis):
        lis = a.split('@')
        for foo in range(len(lis)):
            text = font.render(lis[foo], True, (200,200,200))
            screen.blit(text, (25, 325 + (font.get_linesize() * foo)))

dialog_number = 1
while True:
    {背景作りとかはもろもろ省略}
    dialog(dialog_number)
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_z:
                if dialog_number < len(text_lis): dialog_number += 1

画面にテキストをおく手順は以下のようになっている。

  1. pygame.font.Font() でフォント定義
  2. font.render() でテキストを生成
  3. screen.blit() でSurfaceに描画
  4. pygame.display.update() で画面に出す

書いたダイアログをページごとに split() しておき、変数 dialog_number の数値と対応させておく。Zキーで dialog_number を増加させていき、それによってダイアログを進めていくという構造。

改行は font.get_linesize() を基準Y座標にかけることで行っている。ほんとうはダイアログをダラダラ書いていくだけで画面端に達したら勝手に改行してくれるような仕組みを作りたかったのだけれど、どうもうまく思いつかなったので。

日本語フォントは VL Gothic Font Family のものを使わせてもらった。