51 lines
1.0 KiB
Smalltalk
51 lines
1.0 KiB
Smalltalk
|
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!
|
||
|
}!
|