title of my homepage

まきがめのソースコードとプログラミングの解説

(p)&(c) 1994-2001 by KEN Takahashi
以下、main.c と云うファイルに含まれる doEvent() と云う関数と云う意味で、doEvent() (file: main.c)と記載します。
r プログラムの大きな流れ main() を説明します。 まきがめが起動すると、void main(void) (file: main.c)が呼ばれます。
void main(void)
{
SetApplLimit(GetApplLimit() - 0x8000); //expand stack for 32K
if(MemError()!=noErr)
{
bigBadError(eAppMemSmall);
} 

MaxApplZone();
MoreMasters(); // 64 more masters
MoreMasters(); // 64 more masters

initialize();
doStart();

eventLoop();

doEnd();
terminate();
}
initialize();と書いてある部分まででアプリケーションを動かすまでの設定をしています。SetApplLimit()、GetApplLimit()、MaxApplZone()、MoreMasters()はToolBoxの関数です。bigBadError()、initialize()、doStart()、eventLoop()、doEnd()、terminate()は僕が適当にプログラムしています。

ToolBoxの関数は全て大文字で始まっています。小文字で始まっている関数は僕がプログラムした部分です。 プログラムの順を追って説明します。
SetApplLimit(GetApplLimit() - 0x8000); //expand stack for 32K
if(MemError()!=noErr)
{
bigBadError(eAppMemSmall);
} 
SetApplLimit() を使ってスタックを拡張しています。まきがめでは駒が連続しているかどうかを再帰呼び出しという手法で行っています。openPieceRec() (file: doPlay.c)の部分がその再帰呼び出しです。こめがめでは駒が沢山あるので再帰呼び出しを何回も行います。再帰呼び出しではスタックを消費しますので、スタックがあふれないように拡張しています。

initialize() (file: main.c)では、必須アップルイベントを組み込んだり、マックのバージョンを調べたり、メニューバーの初期化をしたりしています。インライン変換ができるような設定もしています。

doStart() (file: preparation.c) ではゲームの準備をしています。ゲームのウィンドウを開いて、初期設定ファイルから今までのゲームの情報を読み込んだりします。

eventLoop()
 (file: main.c)がプログラムが走る部分です。マウスが押されたり、キーが押されたりするとこの中で色々な処理を行います。まきがめが起動している間はずっとこのeventLoop()の中で処理が進んでいます。例えば別のプログラムを実行している間もまきがめeventLoop()の処理がマックに時々呼ばれて実行されています。

ゲームの終了(cmd + Q)が選ばれるとeventLoop()から抜けてきて、doEnd()へ進みます。

doEnd() (file: preparation.c) はdoStart()の逆の事を行います。ゲームの現状を初期設定ファイルに書き込んで、ゲーム終了の準備をします。

terminate()
 (file: main.c)はinitialize()の逆の事をしています。「まきがめ」ではインライン変換の設定を戻しています。
r まきがめのソースコードとプログラミングの解説に戻る。