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