甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション18.6 - 実装の開始

Adaチュートリアル セクション18.6 - 実装の開始

E-mail Print PDF

セクション 18.6 - 実装の開始

それでは、プログラムSmallの実装を開始しましょう。まずは、Smallのプロシージャー本体部、パッケージParser、パッケージThingとパッケージWorldを書いていきます。ここでは、「Look」と「Quit」を実行することが出来るだけで十分でしょう。プログラムSmallの全てを見ていく以上に、いくつか仕様エリアを軽くチェックしてみましょう。例えば、パッケージThingをどのように定義することが出来るか、よく見てみましょう。:

package Things is

 -- "Thing" is the root class for all things in this small world.
 -- Rooms, Players, Items, and Monsters are derived from Thing.

 type Thing is abstract new Limited_Controlled with private;
 type Thing_Access is access all Thing'Class;

 -- Public Dispatching operations.

 procedure Put_View(T : access Thing; Agent : access Thing'Class) is abstract;
  -- Put what Agent sees inside T.

  -- Public non-Dispatching operations:

 procedure Set_Description(T : access Thing'Class;
                           Description : in String);
 function Long_Description(T : access Thing'Class) return Unbounded_String;
 function Short_Description(T : access Thing'Class) return Unbounded_String;

 -- ...
end Things;

さて、私たちはパッケージ「Things」において定義される「Thing」とよばれるルート型を手に入れました。私たちは、プロシージャーSet_Descrptionを用いて、descriptionを設定することが出来ます。そして、関数Long_DescriptionもしくはShort_Descriptionを用いて、descrptionを取り出すことが出来ます。何かものを見ることが出来るプレーヤーは全員、プロシージャーPut_Viewを呼び出し、Thingがなんであるかプリントすることが出来ます。さて、私たちはパッケージOccupantsにおいて、プロシージャー「Look」を実装することが出来ます。;それは、あなたが見ているものを判別し、対応するPut_Viewを呼び出します。

Getと、Dropに対しては私たちは、パッケージOccupantsに対応する操作を加えることにします。しかしながら、GetとDropの実装に対しては、私たちは、オブジェクトが移動できるようにする必要があります。このために、パッケージThingにこの操作を付け加えることにします。:

 

 procedure Place(T : access Thing'Class; Into : Thing_Access);
   -- Place T inside "Into" (removing it from wherever it was).
   -- Attempting to place T into itself will print an error message
   -- and fail.

プロシージャーPlaceは、切り替えを必要としません。そして、私たちは、アクセス値を渡すことが出来ます。そこで、第一引数は、access Thing'Classとなります。(もし私たちが、切り替え可能としたい場合には、私たちは、「access Thing」に変更することが出来ます。第二引数は、Thing_Acessであり、Thing'Classではありません。それというのも、「null」は「Into」に対して有効な値とすべきからです。(このことは、私たちがTをコンテナーが無い場所に移動することが出来ることを意味します)。

私は、方向をサポートするよう追加しました。 - このように、プレーヤーは、北、南、東、上、下に行くことが出来ます。そうするためには、わたしは「Direction」型が値North、South、East、West、Up、Downを取るように追加しました。Roomsは、与えられた方向に何があるかについてデータを持っています。 Occupantsは、与えられた方向に行くコマンドを持っています。そして、Parserはこれらのコマンドを認識します。それぞれ異なったパッケージ(Rooms、Occupants、Parser)は方向について知る必要があるので、わたしはもう一つのパッケージDirectionsを追加し、新しい型Directionを定義しました。

出典: http://www.adahome.com/Tutorials/Lovelace/s18s6.htm

Last Updated on Wednesday, 09 January 2013 07:46  

ニュース速報

http://d.hatena.ne.jp/sesejun/20100902/p1

http://downloads.whamcloud.com/public/lustre/lustre-1.8.6-wc1/el5/server/i686/