<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>etoys状態とイベントに分けて考える</title><revhistory><revision><revnumber>26</revnumber><date>2011-05-24 13:17:12</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>25</revnumber><date>2011-05-24 13:13:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>24</revnumber><date>2011-05-24 13:06:17</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>23</revnumber><date>2011-05-24 12:58:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>22</revnumber><date>2011-05-24 12:55:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>21</revnumber><date>2011-05-24 08:28:48</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>20</revnumber><date>2011-05-24 08:26:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>19</revnumber><date>2011-05-24 08:25:25</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>18</revnumber><date>2011-05-24 08:20:19</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>17</revnumber><date>2011-05-24 08:19:53</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>16</revnumber><date>2011-05-24 03:53:08</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>15</revnumber><date>2011-05-24 03:47:29</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>14</revnumber><date>2011-05-24 03:40:44</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2011-05-24 03:36:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2011-05-24 03:30:23</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2011-05-24 03:11:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2011-05-24 03:07:07</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2011-05-24 03:00:45</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2011-05-24 02:58:37</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2011-05-24 02:53:02</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2011-05-24 02:43:59</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2011-05-24 02:35:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2011-05-24 02:19:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2011-05-24 02:07:32</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2011-05-24 01:33:37</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2011-05-24 01:26:34</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>状態とイベントに分けて考える</title><para>状態とは </para><itemizedlist><listitem override="none"><para>そのオブジェクト自身の状態 </para></listitem><listitem override="none"><para>属性の値 </para></listitem><listitem override="none"><para>一定の動作を行っている（チクタク） </para></listitem><listitem override="none"><para>１回だけの動作を行う（！） </para></listitem></itemizedlist><para>イベントとは </para><itemizedlist><listitem override="none"><para>事象 </para></listitem><listitem override="none"><para>アクション、入力、なにかが起こった </para></listitem><listitem override="none"><para>ぶつかった </para></listitem><listitem override="none"><para>ボタンが押された </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><section><title>状態図</title><para>状態は角の丸い長方形で表し、中に内容を書きます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai01.png"/></imageobject><textobject><phrase>joutai01.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>ある状態から、ある状態に変わることを矢印でつないで表します。 </para><para>イベントは矢印に記入します。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai02.png"/></imageobject><textobject><phrase>joutai02.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>開始状態は黒丸で表します。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai03.png"/></imageobject><textobject><phrase>joutai03.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>終了状態が必要なときはこの記号を使います。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai04.png"/></imageobject><textobject><phrase>joutai04.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例１</title><screen><![CDATA[スタートボタンを押すと２匹がかけっこを始め、どちらかがゴールについたらどちらが勝ったか表示して止まる。
あるものにぶつかったときは別の動作をする。]]></screen><para>１匹ずつ考えます。 </para><para>ウサギの状態を考え、どのように変わるかを矢印でつなぐと状態図ができます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai05.png"/></imageobject><textobject><phrase>joutai05.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><para> それぞれの状態の部分に対応するスクリプトを考えます。 </para><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai06.png"/></imageobject><textobject><phrase>joutai06.png</phrase></textobject></inlinemediaobject> </para><itemizedlist><listitem override="none"><para>座標を設定すればよいのでこのように書けます。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai10.png"/></imageobject><textobject><phrase>joutai10.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai07.png"/></imageobject><textobject><phrase>joutai07.png</phrase></textobject></inlinemediaobject> </para><itemizedlist><listitem override="none"><para>進めるタイルを使って書けます。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai11.png"/></imageobject><textobject><phrase>joutai11.png</phrase></textobject></inlinemediaobject> </para></listitem><listitem override="none"><para>スピードや、進む向きの調整もここに書きます。 </para></listitem><listitem override="none"><para>座標への代入を使って動かすこともできます。 </para></listitem></itemizedlist><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai08.png"/></imageobject><textobject><phrase>joutai08.png</phrase></textobject></inlinemediaobject> </para><itemizedlist><listitem override="none"><para>向きを変えるだけなら回すを使って書けます。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai12.png"/></imageobject><textobject><phrase>joutai12.png</phrase></textobject></inlinemediaobject> </para></listitem><listitem override="none"><para>回す量を調整すること。 </para></listitem></itemizedlist><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai09.png"/></imageobject><textobject><phrase>joutai09.png</phrase></textobject></inlinemediaobject> </para><itemizedlist><listitem override="none"><para>吹き出しを使った書き方の例です。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai13.png"/></imageobject><textobject><phrase>joutai13.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><para> 次に矢印に対応する処理を追加していきます。 </para><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai07.png"/></imageobject><textobject><phrase>joutai07.png</phrase></textobject></inlinemediaobject> </para><itemizedlist><listitem override="none"><para>ここから始めます。 </para></listitem><listitem override="none"><para>スクリプトは例えばこのように書けました。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai15.png"/></imageobject><textobject><phrase>joutai15.png</phrase></textobject></inlinemediaobject> </para></listitem><listitem override="none"><para>カメにぶつかったときの処理を追加するとこうなります。 </para></listitem><listitem override="none"><para>ぶつかったなど条件のイベントはテストタイルで記述します。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai16.png"/></imageobject><textobject><phrase>joutai16.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>ウサギの向きを変えたあと イベント記入のない矢印に対応する命令がありませんが、 このスクリプトがチクタクで動作している状態を考えると、 ぶつかったときに１回向きを変えて、 チクタクにもどっているのが分かります。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai14.png"/></imageobject><textobject><phrase>joutai14.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>ゴールに着いたときの処理も同様にテストタイルで追加できます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai17.png"/></imageobject><textobject><phrase>joutai17.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>表示を行った後はチクタク状態に戻らず、 終了するため「ストップする」が必要です。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai18.png"/></imageobject><textobject><phrase>joutai18.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>開始の処理はボタンのスクリプトに書きます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai19.png"/></imageobject><textobject><phrase>joutai19.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>右の矢印は「ウサギのスクリプト１」につながっているので 「ウサギのスクリプト１」をスタートする命令を加えます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai20.png"/></imageobject><textobject><phrase>joutai20.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>このスクリプトは１回だけ実行されます。チクタクではありません。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例２</title><screen><![CDATA[赤ずきんは花畑によってからおばあさんの家に行く。]]></screen><para>状態とイベントに分けて考えるとこのようになります。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E7%8A%B6%E6%85%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B?action=AttachFile&amp;do=get&amp;target=joutai21.png"/></imageobject><textobject><phrase>joutai21.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>「花畑に向かっている」と「おばあさんの家に向かっている」は どちらもチクタクで動作します。 </para><para>それぞれの状態を１つのスクリプトで書くのが分かりやすい。 </para><para>まずそのときの動作を書き、イベントに対応する処理をテストタイルに書けばよい。 </para><para>スクリプト１では </para><itemizedlist><listitem override="none"><para>「花畑に向かっている」<emphasis role="strong">状態</emphasis>に対応する動作と </para></listitem><listitem override="none"><para>「花畑に向かっている」状態に続く<emphasis role="strong">イベント</emphasis>に対応する処理 </para></listitem></itemizedlist><para>を記述する。 </para><para>イベント「花畑についた」が起こったときは </para><itemizedlist><listitem override="none"><para>スクリプト2をスタートする </para></listitem><listitem override="none"><para>スクリプト1をストップする </para></listitem></itemizedlist><para>を行えばよい。 </para><itemizedlist><listitem override="none"><informaltable><tgroup cols="2"><colspec colname="col_0"/><colspec colname="col_1"/><tbody><row rowsep="1"><entry colsep="1" nameend="col_1" namest="col_0" rowsep="1"><para>○スクリプト１</para></entry></row><row rowsep="1"><entry colsep="1" nameend="col_1" namest="col_0" rowsep="1"><para>花畑の方に進む</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>テスト　</para></entry><entry colsep="1" rowsep="1"><para>花畑についた</para></entry></row><row rowsep="1"><entry align="right" colsep="1" morerows="1" nameend="col_0" namest="col_0" rowsep="1"><para>はい</para></entry><entry colsep="1" rowsep="1"><para>スクリプト2をスタートする</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>スクリプト1をストップする</para></entry></row><row rowsep="1"><entry align="right" colsep="1" rowsep="1"><para>いいえ</para></entry><entry colsep="1" rowsep="1"/></row></tbody></tgroup></informaltable></listitem></itemizedlist><para>スクリプト２では </para><itemizedlist><listitem override="none"><para>「おばあさんの家に向かっている」<emphasis role="strong">状態</emphasis>に対応する動作と </para></listitem><listitem override="none"><para>「おばあさんの家に向かっている」状態に続く<emphasis role="strong">イベント</emphasis>に対応する処理 </para></listitem></itemizedlist><para>を記述する。 </para><para>イベント「おばあさんの家についた」が起こったときは </para><itemizedlist><listitem override="none"><para>スクリプト2をストップする </para></listitem></itemizedlist><para>を行えばよい。 </para><itemizedlist><listitem override="none"><informaltable><tgroup cols="2"><colspec colname="col_0"/><colspec colname="col_1"/><tbody><row rowsep="1"><entry colsep="1" nameend="col_1" namest="col_0" rowsep="1"><para>○スクリプト２</para></entry></row><row rowsep="1"><entry colsep="1" nameend="col_1" namest="col_0" rowsep="1"><para>おばあさんの家の方に進む</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>テスト　</para></entry><entry colsep="1" rowsep="1"><para>おばあさんの家についた</para></entry></row><row rowsep="1"><entry align="right" colsep="1" rowsep="1"><para>はい</para></entry><entry colsep="1" rowsep="1"><para>スクリプト2をストップする</para></entry></row><row rowsep="1"><entry align="right" colsep="1" rowsep="1"><para>いいえ</para></entry><entry colsep="1" rowsep="1"/></row></tbody></tgroup></informaltable></listitem></itemizedlist></section></section></article>