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