Complete proof of concept(all I needed was Smalltalk classNamed: x) to
reflect the class at runtime so that the playground script doesn't get
confused since the classes don't exist before script is evaluated.

([
    "create the classes."
    ([
        SimpleSwitchMorph subclass: #LOCell
            instanceVariableNames: 'mouseAction'
            classVariableNames: ''
            package: 'PBE-LightsOut'.

        BorderedMorph subclass: #LOGame
            instanceVariableNames: 'cells'
            classVariableNames: ''
            package: 'PBE-LightsOut'.
    ] value).
    
    "create LOCell methods."
    ([:this |
        this compile: 
            'mouseAction: a', (String cr),
            '    ^ mouseAction := a'.

        this compile: 
            'mouseUp: e', (String cr),
            '   mouseAction value'.

        this compile:
            'initialize', (String cr),
            '    super initialize.', (String cr),
            '    self label: ''''.', (String cr),
            '    self borderWidth: 2.', (String cr),
            '    bounds := (0@0) corner: (16@16).', (String cr),
            '    offColor := Color paleYellow.', (String cr),
            '    onColor := Color paleBlue darker.', (String cr),
            '    self useSquareCorners.', (String cr),
            '    self turnOff.'.      
    ] value: (Smalltalk classNamed: 'LOCell')).

    ([:this |
        this compile:    
            'cellsPerSide', (String cr),
            '    ^10'.

        this compile:
            'toggleNeighboursOfCellAt: i at: j', (String cr),
            '    (i > 1) ifTrue: [', (String cr),
            '        (cells at: i - 1 at: j) toggleState.', (String cr),
            '    ].', (String cr),
            (String cr),
            '    (i < self cellsPerSide) ifTrue: [', (String cr),
            '        (cells at: i + 1 at: j) toggleState.', (String cr),
            '    ].', (String cr),
            (String cr),
            '    (j > 1) ifTrue: [', (String cr),
            '        (cells at: i at: j - 1) toggleState.', (String cr),
            '    ].', (String cr),
            (String cr),
            '    (j < self cellsPerSide) ifTrue: [', (String cr),
            '        (cells at: i at: j + 1) toggleState.', (String cr),
            '    ].'.     

        this compile:
            'newCellAt: i at: j', (String cr),
            '    | c origin | ', (String cr), 
            (String cr),
            '    c := LOCell new.', (String cr),
            '    origin := self innerBounds origin.', (String cr),
            (String cr),
            '    self addMorph: c.', (String cr),
            '    ', (String cr),
            '    c position: ([', (String cr),
            '        | x_index y_index c_width c_height |', (String cr),
            (String cr),
            '        x_index := i - 1.', (String cr),
            '        y_index := j - 1.', (String cr),
            '        c_width := c width.', (String cr),
            '        c_height := c height.', (String cr),
            '        ', (String cr),
            '        (x_index * c_width)@(y_index * c_height) + origin',
(String cr),
            '    ] value).', (String cr),
            (String cr),
            '    c mouseAction: [', (String cr),
            '        self toggleNeighboursOfCellAt: i at: j.', (String cr),
            '    ].', (String cr),
            '    ^ c.', (String cr).     

        this compile:
            'initialize', (String cr),
            '    | sampleCell width height n |', (String cr),
            (String cr),
            '    super initialize.', (String cr),
            '    n := self cellsPerSide.', (String cr),
            (String cr),            
            '    sampleCell := LOCell new.', (String cr),
            '    width := sampleCell width.', (String cr),
            '    height := sampleCell height.', (String cr),
            (String cr),            
            '    self bounds: ', (String cr),
            '        ((5@5) extent:', (String cr), 
            '            (width * n)@(height * n) + ', (String cr),
            '            (2 * (self borderWidth))).', (String cr),
            (String cr),            
            '    cells := Matrix new: n tabulate: [:i :j |', (String cr),
            '        self newCellAt: i at: j.', (String cr),
            '    ].'.      
    ] value: (Smalltalk classNamed: 'LOGame')).      
] value).




--
View this message in context: 
http://forum.world.st/New-to-Pharo-a-bunch-of-questions-tp4917701p4917710.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.

Reply via email to