slsmalltalk/queen.st

51 lines
1.0 KiB
Smalltalk
Raw Permalink Normal View History

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!
}!