Paradise〜文字アニメーション

95/04/17 03:05


小学校の頃、文庫本をいっぱい買い込んで何やってたと思います?ページの隅にマンガ描いてペラペラと‥‥‥仲間が何人かいて、○○プロダクションなんて結成して、アニメーションの競作やってたんですよ。そのうち一人は本当にプロにっちゃって、「僕をスキーに‥‥‥」なんて映画まで作っちゃいましたけど。

あのプロダクションの名前、小学校時代から使ってんだもんなぁ‥‥‥

※ ※ ※

JRFAREとMesCal(アドインモード)の一つの特徴はアニメーション。と言っても、文字ベースのものですが。なにしろ機能的には貧相なソフトなので、これくらいハッタリをかまさないと面白くありません。

これ、別に大した事をやっているわけでなく、時間待ちループを設けて、文字列の一部を切り出して表示しているだけなんです。基本的には何パターンかあって、左右に移動するもの、中央から広がるもの、左右から出て中央でぶつかるものなど考えています。その中から、文字列が1個ずつ右から現れて、最後につながってしまうパターンのソース(strmov.c)の一部を紹介しましょう。

int strmovls(x, y, s, brk) int x, y; char s[]; int brk;
{
  int n, m, p, d, l;
  /*
    |=4 | p m a b |=6  | p m a b
    |  T| 3 0 3 0 |  漢| 4 0 4 0
    | T | 2 0 2 1 |  漢 | 3 0 3 1
    | T | 1 0 1 2 | 漢 | 2 0 2 2
    |T  | 0 0 0 3 | 漢  | 1 0 1 3
    |T h| 3 1 2 0 |漢  | 0 0 0 4
    |T h | 2 1 1 1 |漢 字| 4 2 2 0
    |Th | 1 1 0 2 |漢 字 | 3 2 1 1
    |Th i| 3 2 1 0 |漢字 | 2 2 0 2
    |Thi | 2 2 0 1 |漢字文| 4 4 0 0
    |This| 3 3 0 0 |
  */
  for(l = 0; s[l]; l++) ;
  for(m = 0; m < l; m += d) {
    d = iskanji(s[m]) && iskanji2(s[m + 1])? 2: 1;
    if(s[m] == ' ') continue;
    for(p = l - d; p >= m; p--) {
      printf("\033[%d;%dH", y, x);
      for(n = 0; n < m; n++) putchar(s[n]);
      for(n = 0; n < p - m; n++) putchar(' ');
      if(d == 2) {
        putchar(s[m]); putchar(s[m + 1]);
      } else {
        putchar(s[m]);
      }
      for(n = 0; n < l - p - d; n++) putchar(' ');
      if(charwait(brk)) return 1;
    }
  }
  return 0;
}

動作はコメント部分で解るでしょう。興味のある人はパラメータ追って検証してみて下さい。

JRFAREの場合、せっかく鉄道関係のソフトなので、列車を走らせたら面白いだろうなぁと思って、それなら機関車が貨車を連結して行くのにしようかと‥‥‥イントロで現れる貨車は、以下のような定義をしてあります‥‥‥見えてました?

static char rail[] = "  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ";
static char *train[] = {
  " 凸-□□□ ",
  " 凸-",
  " 凸-■■■■■■■",
  " 凸-■■■■■■■□□□ ",
  " 田田田田田田-凸 ",
  " 凸-圜團圓圍國圈圉圄囿圀 ",
  " 何かキーを ",
  "押してね! ",
  " 何かキーを押してね! ",
};

国がまえの漢字群が傑作かな。いろいろな荷物を積んでるみたいに見えるでしょ。他にも奥奥奥奥奥奥奥なんての考えてたんですけど、動かしてみると意外に面白くないんですよ、走ってる感じが出なくて。この辺の本質と関係ない部分に、どうしてもこだわりが出てしまうんです(^^)

KATOCHAN (from Fujisawa)


 前のページへ | 次のページへ

This page was updated on Saturday, January 2, 1999

Copyright©1995 Toshiyuki Kato