95/04/15 12:03
さてと、ようやくソフトの話題になっては来たけれど、こんな話でいいのかな?でも、1週間分の話題を考えるってのは、大変だったけども楽しい作業でした。この調子で新しいソフトもスイスイと書けりゃ、言う事ないんだけどね。
多少はアカデミックにやらないと文句が出るかも知れないので、JRFAREのソースを思い切って公開してしまおう‥‥‥って、"jrfare.h"の一部だけね(^^; データタイプの定義。C言語を知らない人は、雰囲気だけ味わって下さい。
/* 運賃計算区間 */
#define KANSEN_KUKAN 0 /* 幹線 */
#define LOCAL_KUKAN 1 /* 地方交通線 */
#define DENSHA_KUKAN 2 /* 電車特定区間 */
#define KANJOU_KUKAN 3 /* 山手線・大阪環状線 */
#define TOKUTEI_KUKAN 4 /* 駅別特定区間 */
/* 都府県名 */
typedef enum {
EAST_END, SAITAMA, TOKYO1, TOKYO2,
KANAGAWA1, KANAGAWA2,
SHIZUOKA1, SHIZUOKA2, SHIZUOKA3,
AICHI1, AICHI2, AICHI3, GIFU,
SHIGA1, SHIGA2, KYOTO, OSAKA,
HYOUGO1, HYOUGO2,
WEST_END,
} KENCODE;
#define EAST SAITAMA /* 東の限界 */
#define WEST HYOUGO2 /* 西の限界 */
/* 幹線運賃表 */
typedef struct {
int kilo, fare; /* 営業キロ×10・運賃 */
} FARETBL;
/* 特定区間運賃表 */
typedef struct {
char *stn1, *stn2; /* 両駅名 */
int fare; /* 運賃 */
} TOKUTEI;
/* 駅名テーブル */
typedef struct {
char *ekimei; /* 駅名 */
int dist; /* 東京駅からの営業キロ数×10 */
KENCODE kencode; /* 都府県名 */
char *yomigana; /* 駅名読みがな */
char *jusho; /* 市区郡町 */
} STATION;
‥‥‥雰囲気味わってもらえるかな。データ(tokaido.c)も公開してしまおう。
※注:実際のソースコードには半角カナ(8ビットコード)が使用されていますが、HTMLの都合上全角カナで表示しています。
STATION tokaido[] = {
"", 0, EAST_END, "", "",
"大宮", -303, SAITAMA, "オオミヤ", "大宮市",
"与野", -276, SAITAMA, "ヨノ", "浦和市",
"北浦和", -260, SAITAMA, "キタウラワ", "浦和市",
"浦和", -242, SAITAMA, "ウラワ", "浦和市",
"南浦和", -225, SAITAMA, "ミナミウラワ", "浦和市",
‥‥‥とっても長いから、中間は省略しちゃうぞ‥‥‥
"朝霧", 6065, HYOUGO2, "アサギリ", "明石市",
"明石", 6089, HYOUGO2, "アカシ", "明石市",
"西明石", 6123, HYOUGO2, "ニシアカシ", "明石市",
"", 0, WEST_END, "", "",
};
結構データの種類が多いって事、解ります? 以前に説明したJRの複雑怪奇な運賃体系をインプリメントしようとすると、結構いろいろデータがいるんです。
その他にも、アドイン化に伴う付加情報(右上のウィンドウに表示される駅の所在地などのデータ)や、駅をメニュー選択形式にする為のグループ情報とかね。営業キロ数が10倍されているのは一つのテクニックで、運賃計算は0.1キロ単位なのだから、10倍すれば整数計算だけで済むからです‥‥‥って、ソフト組む人には常識かもしれないけど。
アドイン化を思いついたのは、ψmenuが気に入ったからですね。オリジナルの機能だけでは面白くないし、ψmenuのウィンドウのセンスの良さを借りて動かせば「馬子にも衣装」でしょ?
メニューウィンドウに結果の表示というのはすぐに決まったけど、入力をどうするか?駅名を打ち込むのはたいていのFEPで大変な作業なので、メニュー形式にしようと思った‥‥‥というのはウソ。実はこのころ、パソコンの調子が悪くFEPを動かすと凍り付いてしまう場合があったので(エディタだけは大丈夫)メニュー形式にしないとチェックも出来なかったというのが真相。全駅名一覧での選択ではうっとおしいので、地域区分をして上下のカレンダーウィンドウを利用する方式に落ちつきました。printf()でのANSIカーソル制御を多用しているのでちょっと遅いけど、ユーザーインターフェースとしては自分でも意外に良く出来てるんじゃないかな、と思ってたりして‥‥‥
そうそう、地域区分の境界は、行政区域や運賃区間の境界を基本にしてるんですよ(ちょっとしたこだわり)。それで駅の所在地を調査しているうち、どうせなら所在地情報も表示しちゃえとか、切符の買い方もアドバイスしちゃえとか、各種の情報も表示するようにしてしまいました。あ、格言ウィンドウが残ってるな‥‥‥これも利用しちゃおっと‥‥‥で、格言ウィンドウもメッセージを入れるようにして、現在の形に落ちついたという訳。こうしてオリジナルとは全く異なる形の、アドイン版誕生となったのです。
KATOCHAN (from Fujisawa)
This page was updated on Sunday, April 09, 2000
Copyright©1995 Toshiyuki Kato