− 「いつも通り」 −

2003年 どっちを向いても未来〜
 6月  5月  4月  3月  2月  1月
2002年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
2001年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
2000年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
1999年
 12月  11月  10月  9月  8月

◆ TOP INDEX へもどる


■  5月23日 (金)

◆ 「アシナガバチ」

 戸袋の口付近に、アシナガバチが巣を作ったのである。

 西の窓を開けた真ん前に巣があるものだから、雨戸を開け閉めするたびに女王バチにハネ奮わせつつガンをつけられて、怖くないこともない。
 とは言え、日々、かいがいしく巣を作り世話をするハチを見ていると、落とす気にはなれぬ。

 巣はむき出しになって北西を向いている。
 とゆーことは、今年は大きな台風がこない、とゆーことであらうか。


◆ 「ゲーム製作備忘録」

 とりあえず、考えながらキャラの配置。

 ヤラレ役であった末期の帝国。 (周りは新興の王国と、豪族だ)
 最初は、弱い皇帝と古狸の神官とちょっと強い騎士を配置したのだが、そーなると誰が何を好きこのんでこの勢力でプレイするか疑問になる。
 ここはちょっと妄想を働かせて、「最後の美少年皇帝」と「それを単身支える若き騎士」をメインに持ってきて、「古狸の神官」と「武勇だけの騎士」をそえてみる。 『嗚呼、共に滅びませう』

 ちょっとケレン味ありすぎか?

 面白いもので、頭がプログラミングの為に働いていると、いつもは幾らでも湧き出てくる以上のような設定が、なかなか出てこないのである。
 頭の普段使っていない部分を久しぶりに使ったので、ちと疲れる。


◆ 「くし型ソート」

 先日、お話しした「コムソート(コゥム・ソート)」。
 思わずツッコミを入れたくなるくらい、シンプルで高速である。
 ……が、200や300のデータソートではあまり実感が湧かないことが判明。 ちと脇道に逸れすぎたかの。

 話だけでは何なので、 Delphi のソース。
 gap (櫛のサイズ)が9か10の時、強制的に11にしているが、これは gap を11に戻した方が、
 9→6→4→3→2→1 か 10→7→5→3→2→1 よりも、
 11→8→6→4→3→2→1 と綺麗に櫛をすけるそーだからである。


procedure TForm1.CombSort(Sender: TObject);
var
  i , j , gap , Length , tmp : Integer;
  flag : Boolean;
begin

  Length := High(Data);
  gap := Length;
  flag := True;

  while ( ( flag ) or ( gap > 1 ) ) do begin

    gap := (gap *10)div 13; // gap:=gap/1.3; // ここがミソ
    if gap<1 then gap:=1;
    if (gap=9) or (gap=10) then gap:=11; // gap の流れをスムースにする

    flag := True;
    for i:=0 to Length-gap do begin

      j := i + gap;

      if Data[i]>Data[j] then begin
        tmp:=Data[i]; Data[i]:=Data[j]; Data[j]:=tmp; // swap
        flag := False;
      end; // end if

    end; // next i

  end; // end while


end;


◆ 「かれーぱん」

 い、いかん。 この歌が頭の中を回転しておる。
 おみそれいたしました。

 ◆ http://www.geocities.jp/jugongordie/old/hp6/index.html
 かれーぱん かれーぱん♪ むいてむいて またしまう♪


◆ 「ぽつり」

 最近、ゲームやっておらぬな。



■  5月12日 (月)

◆ 「そーとは知らず」

 「ソート」のはなしである。
 ゲームなんぞを作っていると、「キャラを強い順に並べるリスト」を表示したり、思考ルーチンで一番大きな『評価値』を選ぶ、など値を順に並べ替えるソートを頻繁に使うのである。

 昔書いたルーチンは、特にソートの勉強もせずに書いたもので、
「データ列の、今参照している値(n)と隣の値(n+1)と比べて、隣の値の方が大きかったら(小さかったら)入れ替え、次々とそれを繰り返す」
 とゆーものである。
 これが、「バブルソート」と呼ばれることを知ったのは、後のことである。
 (値が動いていっていつの間にか整列される様が、「泡」がブクブクしているようなので「バブル・ソート」と呼ばれるそーだ)

 さて、この「バブルソート」、実にシンプルでメモリも食わないルーチンなのだが、「遅い」とゆー欠点がある。 読み物によれば、「要素数がN個の時、最大「Nの2乗」回の計算が必要になる」。
 データ数も10や20くらいなら気にならないが、100を越えたあたりから気になりだし、1000になったら「遅い」と言わざるをえぬ。
 ちょっくら気が向いたので、他のソート方法のお勉強である。


・ マージソート

 「いきなり…」と思われる方もおられるだろうが、アルゴリズムがすぐにピンと来たので、まずはこのソート法から。

 データをマージする(つなげる)時、両方のデータがソートされていれば、(挿入時のインデックスが前後へ行かず)簡単につなげることができる。
 5,3,2,4,8 ← 8,3,5 よりも、
 2,3,4,5,8 ← 3,5,8 をつなげる方が単純である。

 「マージソート法」ではデータ列を真ん中からどんどん二分割してゆき、小さい要素からソートして、マージしながら返ってゆく。


    5,3,2,4,8,6,1,7    分割
   5,3,2,4   8,6,1,7   分割
 5,3  2,4     8,6  1,7 分割

 3,5 ←2,4     6,8 ←1,7 ソート&マージ 
   2,3,4,5  ←1,6,7,8   ソート&マージ 
    1,2,3,4,5,6,7,8    ソート&マージ 

 マージソートは、最高でも「要素数× log(要素数) 」の検索ですみ、安定していて速い。
 が、再帰呼び出しに再帰呼び出しを重ねる故、スタックをガバガバと消費するのが欠点である。
 とりあえずソースは書いてみたが、メモリもスタックも食いそうである。
 有名な「クイックソート」は、この「マージソート」の分割する箇所を工夫すれば良いそーである。


・ ヒープソート

 初めて知った時は、原理がサッパリ解らなくて頭を抱えた。
 ソースはシンプルだが、読んでも解らぬし。(笑)

 「ヒープソート法」は、数列から「木(二進木)」を構成し、「子」よりも小さな「親」の数字を枝づたいにふるい落として(ヒープ処理して)ゆくと、ソートされるとゆー方法である。

・ 「親」は2つか1つの「子」を持つ
・ 「親」の数字は、「子」の数字よりも大きい (「親」>「子」)
・ 「親」と比較する「子」は、数字の大きい方の「子」
  (「子1」>「子2」の時は「子1」と「親」を比較する)
・ 「子」も「親」になり、また2つの「子」を持つ


   親           ○←根 (root)
   /\          /\
  /  \        /  \
 子1    子2      ○    ○
            /\   /\
           ○  ○ ○  ○
          /
         ○

 まずは、以上の法則を元に、「親」から二本の枝を伸ばし、2つの「子」を作っていって「二進木」を構成する。
 この「木」は、構造体を使わずに作ることができる。(←これがミソ)
 親が Data[ n ] だったら、子は Data[ n * 2 + 1 ] と Data[ n * 2 + 2 ] を参照すればよい。

 それぞれの「親」の数字が、「子」の数字よりも小さかった場合は「親」と「子」を入れ替え、「子」の数の方が小さいところまで「落として」ゆく。 そうして、全ての「親」を参照してヒープ処理された「木」を作っておく。

 例えばデータ列が、
 5,3,2,4,8,1,6,7
 の時、


       (5)             8      
        /\             /\      
       /  \           /  \     
     (3)  (2)  →     7    6    
     /\   /\        /\   /\   
   (4) 8 1  6      5  3 1  2  
   /              /           
  7              4            
     ヒープ処理前         ヒープ処理後    

 とゆー「木」が出来、全ての親を参照してヒープ処理を行う。
 この「木」では「4」「2」「3」「5」のあるところが「親」にあたるので、そこを参照。
 「4」は「7」のあるところまで落ちて「7」と入れ替わり、「2」は「6」のあるところまで落ちて「6」と入れ替わる。

 お次の段階。
 一番最初の親である「根」と、一番末端の子である「葉」を「入れ替える」。
 そして、先ほどと同じように「子」よりも小さな「親」を、枝づたいに落としてゆく。
 「親」が落ち着いたら、次の「葉」と「根」を入れ替える。


       根[8]←葉と入れ替える   親(4)←この値をふるい落とす 
         /\             /\
        /  \           /  \
       7    6       子(7) >   6
      /\   /\        /\   /\
     5  3 1  2    孫(5)> 3 1 [2]←次の葉
    /              /
 葉[4]            【8】←決定した

 こうやって、次々と「葉」と「根」を入れ替えてから、「親」の数字を落ち着くところまで落としてゆくと、ソートされるのである。

 このヒープソートの特徴は、
・ 何度も再帰呼び出しを行わないので、スタックを食わない。
・ n をデータの要素数とすると、計算数は n × log n 回で済む。

 原理は、ソースを書いて走らせてみて、やっと理解できた。
 詳しいことは、気が向いたら「酔いどれ工房」で書くかもしれぬ。


・ コムソート

 この「コム( Comb :櫛)・ソート」を知った時は、あまりにシンプルで速度も速いため、思わず怒ってしまったのである。(笑)

 この方法は、「最初は粗い櫛ですいて、徐々に細かい櫛ですいてゆく」ように、データを大ざっぱにソートし、そのあと少しずつ細かくソートしてゆく。
 原理は最初に書いた、遅い「バブルソート」と同じだが、
 「隣の値(n+1)と比較するのではなく、ギャップの先の値(n+gap)と比較してゆき、そのギャップの幅を徐々に狭めてゆく」
 のである。
 ギャップの初期値はデータの数を1.3で割り、ソートが進むにつれてまたそれを1.3で割ってゆく。

 これだけ。 これだけで「ヒープソート」並みの速度が出る。


 がっくし。
 と、ゆーわけで、しばらくはこの「コム(コゥム)・ソート」とお付き合いである。 のほほ。


◆ 「おまけのソース」

 このままではシャクなので、「ヒープソート」のソースなぞを。
 ちなみに Delphi のソースである。


var
  Data : array[0..7] of Integer = ( 5, 3, 2, 4, 8, 1, 6, 7 );

procedure TForm1.Sort(Sender: TObject);
var
  i , Length , tmp : Integer;

begin

  Length := High(Data)+1; // 配列の要素数

  ///// ヒープソート開始

  for i:=(Length-2)div 2 downto 0 do begin // (Length-2)/2 =親
    DownHeap( i , Length-1 ); // 最初のヒープ処理
  end;

  for i:=Length-1 downto 0 do begin
    tmp:=Data[0]; Data[0]:=Data[i]; Data[i]:=tmp; // 葉と根を入れ替え
    DownHeap( 0 , i-1 ); // 入れ替えた葉を除いてヒープ処理
  end;

end;

procedure TForm1.DownHeap( pt , Last :Integer );
var
  child , dat : Integer;

begin

  dat := Data[ pt ];  // 親の値を確保

  // Data[pt] を親として木を探索
  while (True) do begin

    child := 2 * pt + 1;  // 左の子のインデックス child を計算
    if child > Last then break;  // もう子がないのでループを出る

    // 右の子の値が大きかったら、右の子のインデックス child にする
    if child < Last then begin  // child が Last より小さい時のみ
      if Data[child + 1] > Data[child] then begin // 値の大きい子
        child := child + 1 ; // 右の子のインデックスchild
      end;
    end;

    // 親の値の方が大きい場合にはループを出る
    if ( dat >= Data[ child ] ) then break;

    // 子が親より大きいので Data[pt] に Data[child] の値を入れる
    Data[ pt ] := Data[ child ];
    // この子を新たな親にして、木を構成し直す
    pt := child;

  end; // end loop

  Data[ pt ] := dat;  // 親(根)の値を入れる

end;



■  5月 9日 (金)

◆ 「セーブデータ」

 ゲームのセーブデータがたまってきたのでバックアップをとる。

 一度システムがおシャカになって以来再インストールしていないゲームのセーブデータも含めると、その量 120MB オーバー
 これらは MORROWIND のキャラ、 DIABLO II のキャラやお宝、Colin McRae Rally のチャンピオンシップ、 Stronghold や Mech Commander のキャンペーン等々、大事なデータである。
 一度これらのゲームをした方々には解っていただけるやもしれぬ。

 空いてる MO ディスクがあったので、スッタカスッタカとコピー。
 この中に幾らかの18禁ゲームのセーブデータが含まれているのは秘密だ。


◆ 「 Delphi 備忘録」

 4/28の日記で、画面のちらつきを防ぐために、

// フォーム全体を描画する際の明滅を防ぐ。
procedure TMainForm.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
  m.Result := LRESULT(False);
end;

 とのプロシージャを追加したが効果がない、と書いたその後日談。

 そーいえば、このプロシージャが呼び出されるイベントやら何やらを宣言していないことに気付く。 (をいをい)
 効果が無いのはあたりまえである。
 このプロシージャの宣言部分に、 Windows メッセージ「 WM_ERASEBKGND 」に応答するメッセージハンドラ( message )を追加。

type
  TMainForm = class(TForm)
  { ……… この間、色々な宣言 ……… }
  private
  { ……… この間、色々な宣言 ……… }
    procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;
  public
  { ……… この間、色々な宣言 ……… }
  end;

 これによってフォームのムダな消去が無くなり、 Image の描き替えによる「ちらつき」も無くなったのである。

教訓: Delphi ヘルプはしっかり読む。


◆ 「帰ってきたぜ Vvardenfell 」

 久々に RPG 「 MORROWIND 」のプレイを再開。
 帰ってきたぜ Vvardenfell 島。
 便利な店の位置や、持ってるアイテムの詳細は忘れているぞ。

 と、ゆーわけで、ジャーナルには載らない冒険談を、忘れないうちにリプレイ式に書き記しておく。
 ちなみに、過去のリプレイ記は ◆ こちら →

        *        *        *

・「呪文剣士 Majim のスチャラカ冒険記・番外編」

 金がない。

 背中にあるドワーフ族の大剣もそろそろ打ち直したいが、鍛冶屋に頼む金も無い。 ヴィヴェクの地下水道に居た「キ印」をたたっ斬った時に入った金はとっくに底をついた。
 この街にゃ全ての街のメイジ・ギルドを統括するマスターが居るには居るが、コイツが何とも優柔不断で頭の巡りが悪い。 仕事をいただこうにも、コイツからは無理だと悟った。 (これについては、他のメンバーからのお墨付きだ。)
 俺は、なけなしの銭をギルドの「転送屋」に払う。
 「バルモラの街まで。 頼む。」
 ブリトン人の女魔法使いが手慣れた様子で印を切り、俺の身体が光に包まれる。 気がつくと、そこはもうバルモラのメイジ・ギルドだった。

 バルモラのメイジ・ギルド幹部は、猫族のアジラ女史。(人族のレベルから見てもなかなかキュートな女性だ) もう長い付き合いになる。
 「仕事? もうアジラにはあげる仕事無い。 上にいるラニスか、アルド・ランの街に居るエドウィナなら、きっとある。」
 ラニスってのも、このギルドの幹部で、おっそろしくキツい性格をしている。 少々俺の苦手なタイプの女性だ。
 「でもアジラ、ラニスきらい。エドウィナの方がいいよ。アジラのお友達。」
 アジラ女史がそっと耳打ちをする。
 フム。 アジラ女史と俺の好みが同じなのは嬉しいが、アルド・ランの街はちぃとばかり遠い。 「転送屋」を使えば一発だが、不慣れな場所での仕事は面倒に巻き込まれそうだ。 階上に仕事のタネがあるのなら、まずはそちらに当たるのがスジってもんだろう。
 久しぶりに会うメンバーたちに挨拶しながら、俺は階を上っていった。

 「三ヶ月も会費を滞納しているマンウィという者から徴収して来るように。
   支払いを断れば殺しても構いません。」
 ラニスはダークエルフ特有の赤く鋭い目を俺に向けながら言い放った。
 おいおい、戦士ギルド並みに血なまぐさい仕事になりそうだな。
 鼻白んだ俺を見て、ラニスは軽く舌打ちをする。
 「その腰についてる『冷たい鉄』は、飾り物なのかしら?」
 俺の沈黙を「了解の返事」と受け取ったのか、ラニスはそのメンバーの住む場所を語り始めた。

 「マランダス砦の北」にあるという目的の場所……。
 そこは、砂嵐は吹くわ、溶岩は吹き出すわ、空から翼竜が襲ってくるわ、という岩だらけのとんでもねぇ山、「モラグ・アムル」のド真ん中じゃねぇか!
 翼竜を大剣で叩き斬り、道に迷いながらも(……そう、俺の方向音痴は健在だ)、夕暮れにはマランダス砦へ辿り着いた。 ここは失われたドワーフ族の遺跡調査 ── 墓荒し ── 用の根城だ。
 薄暗くなった山をうろついて、なんとか目的の場所にたどり着いた。

 パンナビと呼ばれるそこは、マンウィという女魔法使いが研究をしている洞窟だった。 見たこともない鉱石の青白い光が、あたりを照らしている。
 「旅人ね? 何かご用?」
 マンウィに会費の件を口にすると、彼女はたちまち柳眉を逆立てた。
 「ラニスに頼まれた? ハッ! じゃ、あんたが払いなさいよ。」
 気持ちも分からんではないがメチャクチャな論理だ。 説得も虚しく、俺は外に叩き出された。

 やれやれ。
 叩き斬るのも簡単だが、ほんの数ヶ月会費を滞納した女を斬る気にはならん。 俺なんぞは飲み屋のツケを一年近くしらばっくれた事が……おっとと。
 この仕事はほっぽらかして、別の実入りを考えないといけねぇな。

 ………などと考えつつバルモラを目指していたら、辺りは通ったことのない峠だ。 分かれ道を一本見逃したか。 俺は思わず嘆息する。
 高台に登って道を探していると、岩陰の目立たぬ所に洞窟を見つけた。
 岩肌を滑り降りて近付くと、入口は粗末な扉で閉められている。

 もしかしたら面白いことになりそうだ。

 扉を開け、洞窟をそっと降りてゆくと向こうに灯が見える。
 人影が動くと、わめき声を上げて駆け寄ってきた。
 その手には槍が光っている。 大剣を抜きざま槍の穂先をはらい、上段からそいつを叩き斬った。 構えなおしたがすぐに新手は来ない。
 警戒しつつ少し奥へ進むと、物影から短剣を振りかざしたダークエルフが飛びかかってくる。 肩当てではじき返し、大剣で横に薙ぎ払うと、そいつは静かになった。

 洞窟の中は木箱に入った荷物が積み上がっていた。
 中を調べると、小金や上等の服、組み合わせのバラバラな鎧だ。
 こいつぁ、モラグ・アムルを行き来する旅人やドワーフ遺跡帰りで弱った連中を襲って身ぐるみ剥ぐ盗賊の隠れ家、ってところだな。
 ちょびっとの正義心と、大いなる物欲に後押しされて、俺はこの盗賊の根城を一掃することにした。

 洞窟の奥は、地底湖が広がっていた。
 高い天井に水面から反射した青い光が映り、幻想的な光景になっている。
 地底湖の真ん中には太い岩の柱がそびえ立ち、その中ほどには桟が組まれ、幾つもの荷物が積まれていた。
 人の気配は無い。 岩の柱へ向かう吊り橋を注意深く渡る。
 木箱や樽の中には、よくぞここまで、と思わせるブツが詰め込んであった。
 麻薬・ムーンシュガーにスクーマ。 もろもろのポーション、巻物、薬草、さらにはたっぷりの硬貨。

 荷物に気を取られて少々油断していた。
 閃光と共に、いきなりガツンと衝撃を食らう。
 素早く振り返ると、ダークエルフのまじない師が印を切っている。
 俺は一気に間合いを詰め印を破り、返す刀で大剣を突き刺した。
 辺りをうかがったがもう人の気配はなく、水の音だけが反響していた。

 ふぅ。 相当なブツの量だ。
 しかし、あれだけ腕の立つ盗賊共と、これだけの根城にしちゃぁ少ない方だ。
 俺が盗賊なら、お宝を何処へ隠す?
 ふと、まじない師の使っていた小物入れを見ると、「水中呼吸の呪文」が書かれた巻物が……。
 ……………水の中か。

 俺は「水中呼吸の呪文」を唱え、ザンブと暗い水の中へ。
 水は澄んでおり、上の薄明かりで視界も思ったより悪くはない。
 地底湖は深く、かなり潜ったが、それらしきモノは見えなかった。
 『ハズレ、かな。』
 と、思い始めたその時、水底に黒い箱が。 ビンゴ!

 その瞬間、大きな衝撃を受けて、目の前が真っ赤になった。
 自由の利かない水中でゆっくりと振り返ると、四本腕のでっかい化け物が俺に覆い被さっていた。 ちらりと見えた顔は髑髏そっくりだ。
 奴らは「番人」をちゃんと用意していた。 考えてみれば当たり前の話だ。

 俺は念のため愛用の大剣ではなく、雷を封じ込めた長剣を抜いて薙ぎ払う。
 幾度か長剣を叩き付けると、化け物は叫び声を上げた。 効果はある。
 四本の腕が俺に向かってくるのも構わずにふところへ飛び込み、斬りつけた。
 雷の閃光が貫くと化け物は甲高く吼え、動かなくなった躰はゆっくりと水面へ向かって浮かんでいった。

 まじないで宝箱の鍵を開けると、中には幾らかの宝石と大金、そしてドワーフの矛槍。
 しばらく食うには困らないどころか、ちょいとしたモノを買ってもお釣りがくる、ってもんだ。

 俺はノルド族ご自慢の馬鹿力を発揮して「獲物」を担ぎ上げた。
 向かうはバルモラの「よろず屋」だ。

        *        *        *

 バルモラのメイジ・ギルドに居る、「戦う魔法使い」は俺と気が合う。
 戦士のような体格で「魔法は戦いだ!」と叫ぶ、気のいいオーク族だ。 何度もギルドで戦闘用魔法の特訓を受けた。
 「あーあ、空飛べる魔法、ってのはないもんかね。」
 山の中で道に迷うことの多い俺は、何気なく呟いた。
 「ある。 『空中浮遊の呪文』。 授業料385ドレイク。」
 彼はそっけなく言い放つ。 おいおい、今まではそんなもの無かったじゃないか。 俺はその呪文を探してヴィヴェクくんだりまで行ったんだぞ。
 「いや、あんたじゃ、まだ使いこなせんと思っていてね。」
 このオヤジは、しれっ、とした顔で返した。
 「オケラだったしな。」
 こいつにゃ、人の財布の中身まで判るようだ。

(続く………か?)

        *        *        *


■  5月 3日 (土)

◆ 「わったしはリューベックのビール売り〜」

 ビールの美味しい陽気である。
 だから、ゆーわけでもないが以前に買って積んであった、
  「パトリシアン2 ( Patrician II ) 」
 を楽しむ。


 この「パトリシアン2」は中世北部ヨーロッパを舞台にした、「ハンザ同盟」のゲームである。
 プレイヤーは一商人となり、船で都市を行き交い、需要と供給によって刻々と変動する相場を予想して商品を売り買いし、ホームタウンも自分も富ませるのである。 さらには密かに武装して海賊家業も可能。(ウキウキ)
 街の人々は「ビールが必需品」。 親近感が湧くのも無理はなかろう。

 幾度かプレイしているのだがコツをつかめないので、ワンパターンに都市「リューベック」からスタートである。
 ありがたくも当初からクレイヤー船 ── 「ファルコン号」と名付ける ── を所有しているので、リューベックの特産品「鉄製品」を積み込み、ステーティンへ出航。
 ステーティンでは「鉄製品」を売りさばき、「ビール」を購入。
 しばらくは、リューベック〜ステーティンで「ビール」「木材」を、リューベック〜ダンスクで「ビール」「陶器」を仕入れて、資金稼ぎである。

 ホームタウンでは、商人としての俺はまだ「無名」である。
 とはいえ「富める者は義務を負わねばならない」とゆー『貴族の務め』がある。 街の整備や教会の補修、木材を確保する「製材所」(=働き場所)と共に共同住宅の建築、などを行って、資金の分配である。

 資金に余裕がでてきたので、新しい船「スワロー号」を進水。
 アールボルグ(デンマークは遠い…)まで足を伸ばして、特産の「陶器」と共に西部から入ってくる「ワイン」、北部から入ってくる「布」「木材」、の仕入れを開始である。
 「木材」は、街の建物を増設したり鍛冶屋の運用に大量に必要となるので、忙しく仕入れるのである。 (まだ小さい船なのだ)

 ここらで、「旅人」が「乗せてくれ」とゆーので、商売がてらに「ファルコン号」でリガの街まで。
 ……「旅人」さん、巡礼の旅とゆーわけではなかろうが、まだあちこちへの都市をリクエスト。 北海を横断してロンドン、さらに南へ行ってブレーメンまで。
 ほぼ北海を一周したところで、終着。
 なけなしの「ファルコン号」を独占していたにもかかわらず、報酬は少な目。 とほほ。
 まぁ、人助けなので、よしとする。

 翻って、ホームタウン。
 リューベックの特産品「鉄製品」を増産するために、「鍛冶屋」を増築。
 商品をフル回転させて資金に余裕が出来たので、「お祭り」を開催。
 倉庫を開いて、住民にタダ飯食わせてタダ酒飲ませてドンチャン騒ぎである。

 新しい船「ロビン号」も進水して、あちこちへ商品の売り買い。
 ホームタウンではそこそこ有名となり、「貿易商人」と呼ばれるよーになる。

 ここでなんとお節介屋から「結婚」の斡旋。
 相手は、オセロの Konig 家(キング家だな)のご令嬢。
 デモ版やチュートリアルでは、「捕獲されたエイリアン」のような容姿の女性を斡旋されたので、こわごわと遭って……もとい会ってみる。
 …………… グッド!
 周辺から食い物と酒を買い込み、結婚式である。
 リューベックも住み良い都市になって人口が増えていたので、ちぃと食い物の量が足りなかったようだがおおむね満足したよーである。

 さて、小金も貯まってきたことでもあるので、船を武装させて街の警備にあてるか、ブレーメンあたりに商館を建てて西部の商品を流通させるか、悩みどころ。

 なかなか、お金儲けの楽しいゲームである。


◆ 「 Delphi 備忘録3」

function Sum(const dat : array of Real): Real;
var
  i : Integer;
  s : Real;
begin
  s := 0;
  for i := 0 to High(dat) do s := s + dat[i];
  Sum := s;
end;

 「関数内で変更されない( const )」配列をパラメータとして渡す関数。
 ……の例ではなくて、「 High() 」で配列の上限値が参照される。
 上限値がバラバラの動的配列を参照するのに便利だな、と。




◆ TOP INDEX へもどる