注意
1. | 営利を目的としない限り、本プログラム、及びマニュアルを、許可なく複製、改造してよい。但し、プログラム(及びマニュアル)を改造した場合は、著作権所有者名と、改造者名を併記すること。 |
2. | 本プログラムを運用した結果については、著作権所有者は責任を負わない。 |
本システムは、少年サンデー連載中の漫画「うる星やつら」の、エピソード・キャラクター・マトリックスを作成し、種々の観察を行なうものである。
エピソード・キャラクター・マトリックスとは、縦軸にキャラクター(原則として登場順)、横軸にエピソード(原則として発表順)をとった2次元配列で、配列の各要素には、そのエピソード(ex.「かけめぐる青春」)に於けるそのキャラクター(ex.「諸星あたる」)の属性(ex.「A」。意味は後述)が書き込まれているものである。この配列を、横方向に(即ち、キャラクター別に)、又、縦方向に(即ち、エピソード別に)、スキャンするなどして、様々な興味深い出力を得ることが出来る。又、キャラクターの多重検索機能を用いて、エピソードにアクセスする(ex.「お雪」と「弁天」と「ラム」と「蘭」と「レイ」がいたあの話を読みたいのだが、何巻に収録されている何という話であろうか?)ことも可能である。
以下、本システムの応用例を列挙する。
1. |
特定エピソードに登場したキャラクターの出力。 (ex.「かけめぐる青春」に登場したのは誰か?) |
2. |
特定キャラクター(単数、複数)が登場したエピソードの出力(キャラクターの多重検索)。 (ex.「校長」と「コタツ猫」が登場しているエピソードの一覧表。) |
3. | 全エピソードの一覧表出力。 |
4. | シーズン別のキャラクター・ランキング出力(後述)。 |
5. |
キャラクター、又はエピソードの間接検索。 (ex.「あたる」と「終太郎」と「飛麿」がいた、あのエピソードに登場していた、あのキャラクターの名前を知りたい、そして、そのキャラクターが「蘭」と共演していたあのエピソードの名前を知りたい、読みたい!) |
6. |
特定キャラクターの消長。 (ex.「四人組」は、「終太郎」の登場と共に姿を消した。ex.「しのぶ」は、最初は主役級であったが、「蘭」の“危機一髪シリーズ”から始まる半年間、殆ど姿をみかけなくなり、その後、ゆっくりと回復した。云々) |
等である。
本システムの走行環境を以下に示す。
1. |
PC−9801/F/E(本体)。 (RAM 128Kbyteで動作可能(コミックス19巻までのデータ入力時)だが、256Kbyte以上に増設するのが望ましい。) |
2. | PC−8853N、or、PC−KD551、or 相当品(カラーモニター)。 |
3. | 5インチ or 8インチディスクドライブ(PC−9801/E 使用時。1ドライブで可)。 |
4. |
ヴァージョン1.0では、プリンタをサポートしていない。 |
以下のファイルが収められているディスケットをドライブ1にセットし、N88日本語BASICをブートする。
URUSEI
URUSEI.EPS
URUSEI.CHR
URUSEI.MAT
URUSEI.VER
usfont.n88
RUN"URUSEI"<RET>(以下、“<RET>”はリターン・キーを、アンダーラインは、その通りにタイプすることを示す)。
続けて、ハードウェアの内蔵クロックが保持している日付を表示するので、直す必要がなければ、<RET>。直す必要があれば、表示に従い、8桁の文字列をキーインする。時刻についても同様。
本システムは、データベースがアップデートされる度に、その時の日付と時刻をヴァージョンNo,としてアップデートし、終了時にファイルに書き込む。従って、単に出力するだけであれば、内蔵時計が狂っていても、直す必要はない。
各エピソードに於ける、各キャラクターの属性を、以下の様にして決定する。
A − |
そのキャラクターがいなければ、話自体成立しない。 (ex.「かけめぐる青春」に於ける、「あたる」と「ラム」。「ラムの父」は、判断が分かれるところである。) |
B − |
何らかの形で、話に参加している。例えギャグなどに関与していなくても、セリフ、動作等で、話を先に進めている。 (ex.「かけめぐる青春」に於ける、「錯乱坊」、「しのぶ」、等。「しのぶ」がAでないことに注意。この時点では、まだ三角関係が明確でなかった。) |
C − |
コマかせぎ。 (ex.「かけめぐる青春」に於ける、「だっぴゃ怪獣」。) |
D − | 余白ウメ。モブシーン等にまとめて登場することが多い。 |
E − | 登場せず。 |
各エピソードに、必ず、属性Aのキャラクターがいるかというと、そうではない。みんなでワイワイ騒いでいるタイプのエピソードでは、どのキャラクターを抜いても、何とか話が成立してしまう、ということがめずらしくない。
又、属性C、属性Dのキャラクターも、必ずしも存在しない。逆に、属性Bのキャラクターは、必ず存在する。
属性の決定は、多分に主観的なものであり、人によって判断が異なって当然であるが、一般に、下記の基準に従って決定すれば、それ程大きなくい違いはないと思われる。
1. | まず、属性Dのキャラクターをみつける。(端に隠れていることも多い。)セリフをしゃべっていれば、Dではない。又、数コマに渡って登場していても、その他大勢としての役割しかはたしていなければ、Dである。 |
2. | 上記以外の登場キャラクターは、全て属性Bと仮定する。ここで、各キャラクターを順に、消してみる。もし、話が成立しなければ、彼(女)は、属性Aである。 |
3. | 最後に、属性Bと属性Cの分離であるが、これがも最も微妙である。2.同様、各キャラクターを順に消してみる(今回は、とにもかくにも、話は成立するはずである)。このとき、話に大穴があくか、大切なギャグが一つ消えてしまうか、または台無しになるか、あるいは、話の進行が不自然になれば、B。1コマ、2コマ使えなくなるだけであれば、C。 |
更に、
4. | ゲスト・キャラクターの属性は、一般にAである。 |
ということもできる。
以上に加えて、筆者は、
5. | 平安京シリーズ、宮本武蔵シリーズのような「学芸会」では、属性Aを認めない。即ち前者では「ラム」が、後者では「温泉マーク」が、一見、属性Aであるが、属性Bとみなす。 |
6. | 「惑星教師CAO−2」、「失われたモノを求めて」三部作のような、“少数のレギュラー陣の集団の演技”で話が進行する場合には、全員の属性をAとする。即ち、前者では、「ラム」「お雪」「弁天」「蘭」「CAO−2」を、後者では、「ラム」「弁天」「お雪」「仏のじんじゃあ」「七色のしゅがあ」「毒蛇のぺっぱあ」「そると一号」を、Aとする。 |
という規則も採用している。
以後、属性間に、A>B>C>D>E なる関係を導入し、左辺の属性を右辺の属性より「高い」、右辺の属性を左辺の属性より「低い」という。即ち、Aは最高位の属性であり、Eは最低位の属性である。
又、属性D以上を持つキャラクターを、そのエピソードの「登場キャラクター」と呼ぶ。
第2章で詳述するが、本システムでは、キャラクター、エピソードを、各々、通し番号で管理しており、それぞれ、キャラクターNO.、エピソードNo.と呼んでいる。これらの数字を入力する際に、HELP key がサポートされているので、あらかじめ説明しておく。
キャラクターNo.の入力が促されているときに、HELP key を押すと、画面の右半分に、No.1〜No.15までのキャラクター名が、番号付きで現われる。ここで、<RET>、または ↓ を押すと、次の15人が、↑ を押すと、前の15人が現われる。最後の15人、又は、それ以下が現われた時点で、<RET>、又は ↓ を押すと、最初の15人に戻る。逆も同様。.(ピリオド)を押すと、HELP 終了である。(ピリオドは、テン・キーのものを用いると便利である。)
エピソードNo.の入力が促されているときにも、同様の機能が働く。
起動を終えると、メニュー画面となる。ここから“1”〜“7”のキーを押すことによって、様々な作業に移る。“E”を押すと、終了。
右肩に表示されている日時は、最後にデータベースに変更を加えた日時で、以後、これを、“ヴァージョンNo.”と呼ぶ。
エピソードを登録・修正するためには、メニューで 1 を押す。
新たにエピソードを登録するためには、HELP機能を用いて、(現時点での)最終エピソードNo.を調べ、その次の番号を入力するか、又は、(現時点での)最終エピソードNo.より大きい数(ex. 999)を入力する。
続いて、タイトル、掲載号、収録巻、収録巻(アニメ版)、コメントを、順に入力する。不必要な項目は <RET> のみでもよい。コメントを入力し終えると、エコーバックしてくるので、間違いが無ければ Y、さもなければ N を押す。
エピソードファイルを修正するためには、やはり、HELP機能を用いてエピソードNo.を調べた上で、そのNo.を入力する。タイトル、コメント等が表示されるので、そのエピソードを修正するのなら、Y、さもなくば、それ以外の任意のキーを押す。Y を押すと、上記同様、タイトル、掲載号、収録巻、収録巻(アニメ版)、コメントの順に聞いてくるので、入力する。このとき、<RET> のみだと、その項目は修正されない。従って、例えば、コメント等を消したいときは、ブランクを一つ入力すること。入力し終えると、上記同様、正しいかどうか聞いてくるので、Y か N を押す。
エピソードファイルの作成を終了したら、エピソードNo.入力時に、<RET> のみ押す。(メニューに帰る。)
エピソードNo.入力時に、“ALL”を入力すると、エピソードファイルの一覧表が出力される。
キャラクターを登録・修正するためには、メニューで 4 を押す。
以降の操作は、前節と全く同様であり、相違点は、各キャラクターに付き、入力項目がキャラクターNo.とコメントだけである点と、“ALL”モードがない点だけである。
エピソード・キャラクター・マトリックスを作成するためには、エピソードを固定して、各キャラクターの属性を記入する方法と、逆に、キャラクターを固定して、各エピソードに於ける属性を記入する方法とがある。ここでは、前者を説明する。
メニューで 2 を押すと、エピソードNo.をきいてくるので、HELP機能の助けを借りつつ、入力する。
続いて、キャラクターNo.をきいてくるので、例えば、1<RET> と入力すると、“諸星あたる”とエコーバックしてくる。続いて、属性“A”〜“E”のいずれかを押す。(“E”は“erase”と考えてもよい。非登場キャラクターの属性(即ち、“E”)を、いちいち押す必要は、ない。)例えば、A を押したとする。続けて、キャラクターNo.をきいてくるので、例えば、12<RET> と入力したとすると、“サクラ”とエコーバックしてくるので、B と押したとする。ここで、諸星あたるの属性を修正したければ、1<RET>、B、などと、押す。サクラを消したければ、12<RET>、E、と押す。全キャラクターの属性を記入したら、キャラクターNo.に、<RET> のみ入力すると、次のエピソードの入力に移る。これにも、<RET> のみ入力すると、メニューに帰る。キャラクターNo.入力時には、勿論、HELPが効く。
各エピソードに於ける各キャラクターの属性は、必ずしも全部一度に記入する必要はない。キャラクターの追加、削除、属性の修正等、一人ずつパッチ当てすればよい。
エピソードNo.とキャラクターNo.の関係が入れ換わった他は、前節と全く同様である。メニューで 5 を押す。
まとめて入力するときには、エピソード別の方が便利なので、この機能は、もっぱら、パッチ当てに使うことになろう。
メニューで 3 を押すと、各エピソードにどのキャラクターが登場しているのかがわかる。
HELP機能の助けをかりて、エピソードNo.を入力すると、エピソード名の下にサブメニューが現れる。<RET> を押すと、そのエピソードの内容がわかる。↓ を押すと次のエピソードに、↑ を押すと前のエピソードに戻り、. を押すと、メニューに帰るのである。
さて、<RET> を押すと、キャラクター名がカラーで表示される。緑はA、赤はB、紫はC、青はDである。<RET> を押すと、次のエピソード名が現れ、サブメニューが表示される。次々とチェックしていくのに便利である。
単数検索と複数検索に分けて説明する。
“錯乱坊”の登場するエピソードを知りたければ、メニューで 6 を押した後、3<RET>、<RET> と入力する(HELPが効くことは、いうまでもない)。すると、画面の右半分に、登場したエピソードが、属性のカラー(緑=A、赤=B、紫=C、青=D)付きで、15個ずつ表示される。
複数のキャラクターが同時に登場するエピソードを知りたければ、全キャラクターのキャラクターNo.を押した後、<RET> を押す。例えば“ラム”、“弁天”、“お雪”、“蘭”の4人組が登場するエピソードを知りたいのなら、7<RET>、20<RET>、24<RET>、90<RET>、<RET> と入力する。
このときのカラーの意味は、“そのエピソードに於ける各キャラクターの属性のうち、最高のもの”となっている。即ち、“赤”ならば、“少なくとも一人はBで、Aはいない”ということがわかる。
又、“*”が表示されているときは、全員がその属性を持っている。即ち、“赤”で“*”が表示されていれば、“全員B”ということがわかる。(勿論、“青”のときは、必ず“*”が表示される。)
<RET> のみ押すと、メニューに帰る。
このプログラムは、シーズン別に“活躍度”という、興味深い数字を計算する機能を有している。計算法は A-3 節に示すが、経験則とほとんど完全に一致する。この活躍度をキーにして、シーズン別にキャラクターのランキングを出力する機能が、メニュー 7 である。
まず、ランキングを計算する範囲をきいてくるので、HELP機能を使いつつ、入力する。どこでも自由に設定してよいが、レンジは15〜30位が適当である。(50以上は、好ましくない。)数字がダラダラと現れるが、これは、活躍度計算中のキャラクターNo.である。
計算が終了すると、まずベストテンが、後、<RET> を押す度に15人ずつ出力される。90点以上は緑、70点以上は水色、60点以上は黄色に色分けされている。
“第何エピソードから?”に、<RET> で答えると、メニューに帰る。
筆者なりのシーズン設定は、エピソードのコメント欄に書き込んである。(メニュー“1”の“ALL”モードだと、わかり易い。)キャラクターの変動に着目しつつ、一年を、“新学期〜夏休み”、“秋〜新春”と、区切ったものである。
本システムは、以下のファイルから構成されている。
URUSEI | − | BASICメインプログラム。 |
URUSEI.EPS | − | エピソード名が収録されている、シーケンシャル・ファイル。 |
URUSEI.CHR | − | キャラクター名が収録されている、シーケンシャル・ファイル。 |
URUSEI.MAT | − | エピソード・キャラクター・マトリックスが収録されている、ランダム・ファイル。 |
URUSEI.VER | − | データのヴァージョンNo.が収録されている、シーケンシャル・ファイル。 |
usfont.n88 | − |
外字登録ファイル。(mkfont.n88によって作成される。ユーザーズ・マニュアル参照。) 84/03/19 Version では、「愛▼ダーリンの危機」の“▼”にのみ、用いられている。(“▼”はハートマークを示し、“ラブ”とルビがふられている。) |
走行中のエラーによって、入力データが無駄にならないよう、エラー・トラップがかけられている。
なんらかのエラーが発生すると、エラー番号とエラー行を表示して、リターン待ちになる。<RET> でメニューに戻るので、直ちに E で終了すれば、最新の入力データを守ることができる。
84/03/19 Version では、コミックス第19巻まで入力終了しているが、標準搭載の128Kbyte RAM では、これがほぼ限界で、しばしば、Out of Strings Space Error、Out of memory Error が発生するであろう。
本質的な解決策としては、メモリーを256Kbyteに拡張するしかない(推定100巻以上、耐え得るはずである)が、消極的解決策も存在する。
ひとつは、度々メニューに帰ること(メニューに帰る度に、ガベージ・コレクションが行われる)。もう一つは、日本語BASICのかわりに、DISK BASICをブートすること(実際、出力するだけであれば。これで十分である)。
又、おそらく第24巻の入力時点で、Subscript out of Range Error がでるが、対策については、A-4 節を参照せよ。
各シーズン(20〜30エピソード)に於ける、各キャラクターの活躍度は、次の様に計算される。
活躍度 = 40 × log 10((A + B + C + D/2)/N × 100) + (20 × A + 10 × B + 5 × C)/(A + B + C + D) 但し、A = 属性Aのエピソードの総数 B = 属性Bのエピソードの総数 C = 属性Cのエピソードの総数 D = 属性Dのエピソードの総数 E = 属性Eのエピソードの総数 N = A + B + C + D + E (即ち、そのシーズンの、総エピソード数) 又、そのシーズンに於いて A = B = C = D = 0 のキャラクターに対しては、 活躍度は定義されない。
右辺第一項は、いわば出席点であり、出席回数の百分率を、常用対数で補正している。第二項は、内容点であり、属性の加重平均をとっている。
プログラム内の諸定数は、128Kbyte RAM を使いこなす様に設定されているので、256Kbyte以上のシステムでは、一部書き直す必要がある。
まず、マシン語プログラムをリロケートするために、プログラム第1行のCLEAR文とDEF SEG文を書き直す。次に、最大エピソード数、最大キャラクター数を、同じ行で、MAXE、MAXCに、各々250、300とセットしているので、これらを500に書き直す。
これで、推定46巻までは対応できるはずである。これ以上の拡張を望む場合には、多少、面倒な手続きが必要となる。即ち、単に、エピソード名、キャラクター名を収録する配列を大きくするだけでなく、URUSEI.MATの構造を変える必要があるからである。
現在、URUSEI.MATは、fig.1 の様な構造を持っている。即ち、先頭から2レコードずつ各キャラクターにふりわけ、各レコード中250byte、計500byteを、各エピソードの属性記入に用いている。
これを、fig.2 の様に、最大750エピソード(及び、最大750キャラクター(注))に拡張する方法を、以下に示す。
(注:エピソード数とキャラクター数は、ほぼ、1:1の比を保って増加する傾向がある。)
fig.1 +-------------------+ | 1 - 250 episode | 1. あたる +-------------------+ | 251 - 500 episode | +-------------------+ | 1 - 250 episode | 2. しのぶ +-------------------+ | 251 - 500 episode | +-------------------+ | | +-------------------+ | | ... fig.2 +-------------------+ | 1 - 250 episode | 1. あたる +-------------------+ | 251 - 500 episode | +-------------------+ | 501 - 750 episode | +-------------------+ | 1 - 250 episode | 2. しのぶ +-------------------+ | 251 - 500 episode | +-------------------+ | 501 - 750 episode | +-------------------+ | | +-------------------+ | | ...
1. |
次のプログラムを走らせる。 100 NAME "URUSEI.MAT" AS "TEMP" 110 OPEN "TEMP" AS #1 120 OPEN "URUSEI.MAT" AS #2 130 FILELD #1, 250 AS F1$ 140 FILELD #2, 250 AS F2$ 150 FOR I=1 TO 500 160 FOR J=1 TO 2 170 GET #1 180 LSET F2$=F1$ 190 PUT #2 200 NEXT 210 LSET F2$=SPACE$(250) 220 PUT #2 230 NEXT 240 FOR I=1 TO 250*3 250 PUT #2 260 NEXT 270 CLOSE 280 KILL "TEMP" 290 END |
2. |
プログラム中、チャンネル1を通してURUSEI.MATにアクセスしている。以下のサブルーチンを、750エピソード仕様に書き直す。 *GET.A、*PUT.A は、エピソードNo.が250以上か以下かで、第1レコードか第2レコードか判断しているので、これを拡張する。 *MENU6 では、高速化のため、2レコードを同時にGETしているので、これを3レコードに拡張する。 *MENU7 では、これに加えて、範囲指定が2レコードにまたがっているか否かの判断もしているので、それも拡張する。 |
3. | 第1行で、MAXC=750 : MAXE=750 とする。 |
最大1000エピソード(キャラクター)以上に拡張する場合も、これに準ずる。但し、ディスク容量に注意すること。
Last Updated: Feb 8 1999
Copyright (C) 1999 倉田わたる Mail [KurataWataru@gmail.com] Home [http://www.kurata-wataru.com/]