[CS] TicTacToe

Martin Drautzburg martin.drautzburg at web.de
Sun Apr 27 23:39:23 UTC 2003


ingo at 2b1.de writes:
You asked: How can I make it resizable?

I am a newbie  myself, but this is what I'd do:


You need to draw your TicTacToe fields with respect to the owning Morph
(the TicTacToe). Therefore the TicTacToe field needs to know its row
and column and thus needs 2 more instance variables:

BorderedMorph subclass: #TicTacToeField
	instanceVariableNames: 'mark row col '
	classVariableNames: ''
	poolDictionaries: ''
	category: 'IHO-Learning'

You then initialize them by passing row and column. And you can forget
about all other geometry stuff during initialisation because the
TicTacToeField will take care of that:

TicTacToe>>initialize
	| temp |
	super initialize.
	self extent: 300 @ 300.
	turn _ 0.
	winner _ nil.
	1
		to: 3
		do: [:x | 1
				to: 3
				do: [:y | 
					temp _ TicTacToeField new row: y;
								 col: x.
					self addMorph: temp]]

Next thing is to compute the real geometry of TicTacToe field. Lets
put this into an extra method:

computeLayout
	| height width posx posy |
	height _ (owner height / 3) asInteger.
	width _ (owner width / 3) asInteger.
	self extent: width @ height.
	posx _ self col - 1 * width.
	posy _ self row - 1 * height.
	self position: owner position + (posx @ posy)

This has to be called before we draw the field, so:

drawOn: canvas 
	| markBounds |
	self computeLayout.
	super drawOn: canvas.
	mark
		ifNotNil: [markBounds _ self bounds scaleBy: 0.75.
        ...
        etc.

HTH



More information about the Squeak-dev mailing list