Object subclass: #NullQueen instanceVariableNames: ''! {! NullQueen methods! checkRow: row column: column " we can't attack anything " ^ false! first ^ true! next ^ true! result ^ List new! }! Object subclass: #Queen instanceVariableNames: 'row column neighbor'! {! Queen methods! advance (row = 8) ifTrue: [ (neighbor next) ifFalse: [ ^ false ]. row <- 0 ]. row <- row + 1. ^ true! checkRow: testRow column: testColumn | columnDifference | columnDifference <- testColumn - column. (((row = testRow) or: [ row + columnDifference = testRow]) or: [ row - columnDifference = testRow]) ifTrue: [ ^ true ]. ^ neighbor checkRow: testRow column: testColumn! first neighbor first. row <- 1. ^ self testPosition! next ^ (self advance) and: [ self testPosition ]! result ^ neighbor result addLast: row! setColumn: aNumber neighbor: aQueen column <- aNumber. neighbor <- aQueen! testPosition [neighbor checkRow: row column: column] whileTrue: [ (self advance) ifFalse: [ ^ false ]]. ^ true! }!