Whisper〜JRFAREの秘密!?

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