View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

funfunfun29

PREV ------ ● TOP ● ------ NEXTUploaded Image: fmrph.jpg


もうちょと「StringMorph」!

「StringMorph」を使ってもうちょっとあそんでみるでするよ。
タイマーとかカウンターとか作っちゃうお〜!!。

■タイマーを作るです。

まずはクラス定義です。
インスタンス変数に「count」「setCounter」「flg」を追加。
--------------------------------------------
StringMorph subclass: #TestMorph22
	instanceVariableNames: 'count setCounter flg '
	classVariableNames: ''
	poolDictionaries: ''
	category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image11.jpg

「initialize」メソッドを追加しまする。
フォントは「ComicSansMS」、サイズは「45」、文字色はオレンジ色に設定。
タイマーの初期設定は30にして表示しておくってわけさ。
--------------------------------------------
initialize
	super initialize.
	self fontName: #ComicSansMS size: 45.
	self color: Color orange.

	setCounter _ 30.
	count  _setCounter.
	self contents: count asString.
	flg _ false.
	self startStepping.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image12.jpg


試しにインスタンスをだしてみましょう。
--------------------------------------------
TestMorph22 new openInWorld
--------------------------------------------
Alt + d ( Cmd + d )

Uploaded Image: image13.jpg


これいつまでたっても30のまんまなんで、動くようにインスタンスを追加しましょうか。

Uploaded Image: image14.jpg


「flg」が「true」ならスタートします。「false」なら何もしない。(つまりストップね)
「count」が0になったら「flg」を「false」にしてビープ音を鳴らします。
(ストップのとき空ループしてるって事だから「Step」をスタート/ストップしたほうが
よかったかにゃ?・・・ )
--------------------------------------------
step
       flg 
              ifTrue: [
                     count _ count - 1.
                     self contents: count asString.
                     count = 0
                            ifTrue: [
                                   self beep.
                                   count _ setCounter.
                                   flg _ false].
              ].
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image15.jpg


--------------------------------------------
stepTime
	^ 1000.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image16.jpg


マウスをクリックしたらタイマーをスタートさせます。(flgをtrueにするってわけね)
--------------------------------------------
mouseDown: evt
	count _ count + 1.
	flg _ true.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image116.jpg


お約束事ってことで。
--------------------------------------------
handlesMouseDown: evt
	^ evt yellowButtonPressed not.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image17.jpg


メニューでタイマーの設定をできるようにしたいので、項目をメニューに追加します。
--------------------------------------------
addCustomMenuItems: aCustomMenu hand: aHandMorph
	super addCustomMenuItems: aCustomMenu hand: aHandMorph.
	aCustomMenu add: 'タイマーの設定' action: #setTimer.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image18.jpg


メニューを選んだときに実行されるメソッドを追加します。
ダイアログを出してそこで入力した数が「setCounter」に入るって感じね。
--------------------------------------------
setTimer
	| n |
	n _ FillInTheBlank request: '秒数を入力してね'
		    initialAnswer: '30'.	
	n = ''
		ifTrue: [n _ '30'].
	setCounter _ n asInteger.
	count _ setCounter.
	self contents: count asString.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image19.jpg


実際にメニューを出して確かめてみると
ちゃんとメニューの一番下の項目に追加されてるね。

Uploaded Image: image20.jpg


メニューを選ぶとダイアログが出てくるので数値を入力することが出きるってわけさ。

Uploaded Image: image21.jpg



■カウンターを作っちみようっと!

クリックすると加算されるという単純なやつね。
クラスを作ります。インスタンス変数「count」を追加。
--------------------------------------------
StringMorph subclass: #TestMorph23
	instanceVariableNames: 'count '
	classVariableNames: ''
	poolDictionaries: ''
	category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image22.jpg


「initialize」メソッドを追加するです。
フォントは「ComicSansMS」、サイズは「45」、色は茶色ね。
初期設定を「0」にして表示しておきます。
--------------------------------------------
initialize
	super initialize.
	self fontName: #ComicSansMS size: 45.
	self color: Color brown.

	count _ 0.
	self contents: count asString.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image23.jpg


インスタンスをだしてみる。
--------------------------------------------
TestMorph23 new openInWorld
--------------------------------------------
Alt + d ( Cmd + d )

Uploaded Image: image24.jpg


これこのままだとゼロのままね。

Uploaded Image: image25.jpg


「mouseDown」メソッドを追加しまする。
マウスをクリックすると「count」に1加えるっす。
--------------------------------------------
mouseDown: evt
	count _ count + 1.
	self contents: count asString.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image26.jpg



これまたお約束事。<手抜きしてないか・・・おいら。
--------------------------------------------
handlesMouseDown: evt
	^ evt yellowButtonPressed not.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image27.jpg



メニューで初期化する(0に戻す)メニュー項目を追加します。
--------------------------------------------
addCustomMenuItems: aCustomMenu hand: aHandMorph
	super addCustomMenuItems: aCustomMenu hand: aHandMorph.
	aCustomMenu add: 'カウンターを0にする' action: #setCounter.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image28.jpg


メニューを選んだとき実行されるメソッドを追加します。
「count」を0に戻してるってわけね。
--------------------------------------------
setCounter
	count _ 0.
	self contents: count asString.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image29.jpg


ちゃんとメニューの一番下の項目に追加されてるね。

Uploaded Image: image30.jpg




PREV ------ ● TOP ● ------ NEXT







■ MEMO ■

Links to this Page