Commit 7562315e authored by abiop's avatar abiop
Browse files

subo parcial 323-19

parent 86cd6890
This diff is collapsed.
----SNAPSHOT----(4 July 2022 21:55:37) CuisUniversity-5324-abioppenheim.image priorSource: 7929846!
\ No newline at end of file
!classDefinition: #LaddersAndSlidesGameTest category: 'segundo-parcial-2022'!
TestCase subclass: #LaddersAndSlidesGameTest
instanceVariableNames: 'dice'
classVariableNames: ''
poolDictionaries: ''
category: 'segundo-parcial-2022'!
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 18:24:39'!
setUp
dice _ [1@(1)]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 19:57:48'!
test01GameStartWithBothPlayersOnInitialPositionAndNoWinners
| game |
game _ self defaultGame.
self
should: [ game winner ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game winnerDoesNotExistErrorDescription equals: anError messageText.
self deny: (game ended).
self assert: 1@1 equals: (game possitionOfPlayer: 1).
self assert: 1@1 equals: (game possitionOfPlayer: 2).
self assert: 1 equals: game turnOfPlayer. ]
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 19:58:27'!
test02ExtraPlayerCanNotPlay
| game |
game _ self defaultGame.
self
should: [ game player: 3 withDice: dice ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game invalidPlayerErrorDescription equals: anError messageText.
self assert: 1 equals: game turnOfPlayer. ]
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:13:57'!
test03PlayerOneMustStart
| game |
game _ self defaultGame .
self
should: [ game player: 2 withDice: self ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game isNotPlayersTurnErrorDescription equals: anError messageText.
self deny: (game ended).
self assert: 1@1 equals: (game possitionOfPlayer: 2).
self assert: 1 equals: game turnOfPlayer. ]
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 19:58:38'!
test04NegativePlayerCanNotPlay
| game |
game _ self defaultGame.
self
should: [ game player: 0 withDice: self ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game invalidPlayerErrorDescription equals: anError messageText.
self assert: 1 equals: game turnOfPlayer. ]
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 19:59:02'!
test05PlayerOneMoves0OnXAnd0YAndDoesNotMove
| game |
game _ self defaultGame.
game player: 1 withDice: dice.
self assert: 1@1 equals: (game possitionOfPlayer: 1).
self assert: 2 equals: game turnOfPlayer.
self deny: (game ended).
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 19:59:59'!
test06PlayerOneMoves1OnXAnd0OnYCorrectly
| game |
game _ self defaultGame.
game player: 1 withDice: [7@6].
self assert: 2@1 equals: (game possitionOfPlayer: 1).
self assert: 2 equals: game turnOfPlayer.
self deny: (game ended).
! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:00:26'!
test07PlayerOneCanNotPlayTwoTimesInARow
| game |
game _ self defaultGame.
game player: 1 withDice: [7@6].
self
should: [ game player: 1 withDice: [5@6] ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game isNotPlayersTurnErrorDescription equals: anError messageText.
self deny: (game ended).
self assert: 2@1 equals: (game possitionOfPlayer: 1).
self assert: 2 equals: game turnOfPlayer. ]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:41:34'!
test08PlayerTwoCanNotPlayTwoTimesInARow
| game map numberOfPlayers |
numberOfPlayers _ 3.
map _ self defaultMapLimits.
game _ LaddersAndSlidesGame playingWith: 3 onMultilevelMap: self defaultMapLimits withSlides: self defaultSlidesMap andStairs: self defaultStairsMap .
game player: 1 withDice: [7@6].
game player: 2 withDice: [7@6].
self
should: [ game player: 2 withDice: [5@6] ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: game isNotPlayersTurnErrorDescription equals: anError messageText.
self deny: (game ended).
self assert: 2@1 equals: (game possitionOfPlayer: 1).
self assert: 2@1 equals: (game possitionOfPlayer: 2).
self assert: 3 equals: game turnOfPlayer. ]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:03:11'!
test09ItIsPlayerOneTurnAfterLastPlayerTurn
| game |
game _ self defaultGame .
game player: 1 withDice: [7@6].
game player: 2 withDice: [7@6].
self deny: (game ended).
self assert: 2@1 equals: (game possitionOfPlayer: 1).
self assert: 2@1 equals: (game possitionOfPlayer: 2).
self assert: 1 equals: game turnOfPlayer. ! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:03:36'!
test10PlayerMovesExceedingTheMinimumLimitOfMapCorrectly
| game |
game _ self defaultGame .
game player: 1 withDice: [7@7].
game player: 2 withDice: [6@6].
game player: 1 withDice: [1@6].
self deny: (game ended).
self assert: 1@2 equals: (game possitionOfPlayer: 1).
self assert: 1@1 equals: (game possitionOfPlayer: 2).
self assert: 2 equals: game turnOfPlayer. ! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 20:03:54'!
test11PlayerMovesExceedingTheMaximumLimitOfMapCorrectly
| game |
game _ self defaultGame .
game player: 1 withDice: [12@12].
self deny: (game ended).
self assert: 2@2 equals: (game possitionOfPlayer: 1).
self assert: 2 equals: game turnOfPlayer. ! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:09:14'!
test12CanNotCreateSlideOnAFloorSmallerThan1
self
should: [ Slide fromFloor: 0 andPosition: 0@0 toFloor: 2 andPostion: 0@0 ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: Slide fromFloorCanNotBeSmallerThanOneErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:09:14'!
test13CanNotCreateStairOnAFloorSmallerThan1
self
should: [ Stair fromFloor: 0 andPosition: 0@0 toFloor: 2 andPostion: 0@0 ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: Stair fromFloorCanNotBeSmallerThanOneErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:15:27'!
test14CanNotCreateSlideFromAFloorSmallerThanToFloor
self
should: [ Slide fromFloor: 1 andPosition: 0@0 toFloor: 2 andPostion: 0@0 ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: Slide fromFloorCanNotBeSmallerThanToFloorErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:15:49'!
test15CanNotCreateStairFromAFloorGreaterThanToFloor
self
should: [ Stair fromFloor: 2 andPosition: 0@0 toFloor: 1 andPostion: 0@0 ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: Stair fromFloorCanNotBeGreaterThanToFloorErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:35:54'!
test16CanNotCreateShortCutFromFloorGreaterThatMaximumGameFloor
| slidesMap |
slidesMap _ OrderedCollection with: (Slide fromFloor: 3 andPosition: 1@1 toFloor: 2 andPostion: 1@1).
self
should: [ LaddersAndSlidesGame playingWith: 2 onMultilevelMap: self defaultMapLimits withSlides: slidesMap andStairs: self defaultStairsMap ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: ShortCut floorCanNotExceedMapFloorsErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:36:25'!
test17CanNotCreateShortCutToFloorGreaterThatMaximumGameFloor
| slidesMap |
slidesMap _ OrderedCollection with: (Stair fromFloor: 1 andPosition: 1@1 toFloor: 4 andPostion: 1@1).
self
should: [ LaddersAndSlidesGame playingWith: 2 onMultilevelMap: self defaultMapLimits withSlides: slidesMap andStairs: self defaultStairsMap ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: ShortCut floorCanNotExceedMapFloorsErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'tests' stamp: 'ao 7/4/2022 21:42:25'!
test18CanNotCreateMultiplesShortCutsOnSamePosition
| slidesMap |
slidesMap _ OrderedCollection with: (Stair fromFloor: 1 andPosition: 1@1 toFloor: 2 andPostion: 1@1) with: (Stair fromFloor: 1 andPosition: 1@1 toFloor: 2 andPostion: 1@2).
self
should: [ LaddersAndSlidesGame playingWith: 2 onMultilevelMap: self defaultMapLimits withSlides: slidesMap andStairs: self defaultStairsMap ]
raise: Error - MessageNotUnderstood
withExceptionDo: [ :anError |
self assert: LaddersAndSlidesGame invalidShortCutsPositionsErrorDescription equals: anError messageText.
]! !
!LaddersAndSlidesGameTest methodsFor: 'defaultObjects' stamp: 'ao 7/4/2022 20:41:34'!
defaultGame
^LaddersAndSlidesGame playingWith: 2 onMultilevelMap: self defaultMapLimits withSlides: self defaultSlidesMap andStairs: self defaultStairsMap
! !
!LaddersAndSlidesGameTest methodsFor: 'defaultObjects' stamp: 'ao 7/4/2022 19:56:02'!
defaultMapLimits
^Dictionary new
at: 1 put: (2@2);
at: 2 put: (2@2);
yourself.
! !
!LaddersAndSlidesGameTest methodsFor: 'defaultObjects' stamp: 'ao 7/4/2022 20:35:40'!
defaultSlidesMap
^OrderedCollection new.
! !
!LaddersAndSlidesGameTest methodsFor: 'defaultObjects' stamp: 'ao 7/4/2022 20:35:43'!
defaultStairsMap
^OrderedCollection new.
! !
!classDefinition: #LaddersAndSlidesGame category: 'segundo-parcial-2022'!
Object subclass: #LaddersAndSlidesGame
instanceVariableNames: 'numberOfPlayers map turnOfPlayer playersPosition playersLevels'
classVariableNames: ''
poolDictionaries: ''
category: 'segundo-parcial-2022'!
!LaddersAndSlidesGame methodsFor: 'initialization' stamp: 'ao 7/4/2022 19:28:29'!
initialPlayersLevels
playersLevels _ Dictionary new.
1 to: numberOfPlayers do: [:player | playersLevels at: player put: 1 ].
^playersLevels! !
!LaddersAndSlidesGame methodsFor: 'initialization' stamp: 'ao 7/4/2022 19:28:22'!
initialPlayersPosition
playersPosition _ Dictionary new.
1 to: numberOfPlayers do: [:player | playersPosition at: player put: 1@1 ].
^playersPosition! !
!LaddersAndSlidesGame methodsFor: 'initialization' stamp: 'ao 7/4/2022 20:08:31'!
initializePlayingWith: aNumberOfPlayers onMultilevelMap: aMap withSlides: aSlidesMap andStairs: aStairsMap
numberOfPlayers := aNumberOfPlayers.
map := aMap.
turnOfPlayer := 1.
playersPosition _ self initialPlayersPosition.
playersLevels _ self initialPlayersLevels.! !
!LaddersAndSlidesGame methodsFor: 'test' stamp: 'ao 7/4/2022 17:54:36'!
ended
^false! !
!LaddersAndSlidesGame methodsFor: 'test' stamp: 'ao 7/4/2022 18:51:04'!
possitionOfPlayer: aPlayer
^playersPosition at: aPlayer! !
!LaddersAndSlidesGame methodsFor: 'test' stamp: 'ao 7/4/2022 18:23:08'!
turnOfPlayer
^turnOfPlayer! !
!LaddersAndSlidesGame methodsFor: 'test' stamp: 'ao 7/4/2022 17:58:56'!
winner
^self error: self winnerDoesNotExistErrorDescription! !
!LaddersAndSlidesGame methodsFor: 'error' stamp: 'ao 7/4/2022 18:09:26'!
invalidPlayerErrorDescription
^'invalid player'! !
!LaddersAndSlidesGame methodsFor: 'error' stamp: 'ao 7/4/2022 18:11:34'!
isNotPlayersTurnErrorDescription
^'is not players turn'! !
!LaddersAndSlidesGame methodsFor: 'error' stamp: 'ao 7/4/2022 17:59:24'!
winnerDoesNotExistErrorDescription
^'winner does not exist'! !
!LaddersAndSlidesGame methodsFor: 'playing' stamp: 'ao 7/4/2022 19:50:22'!
assertPlayersTurn: aPlayer
(aPlayer ~= turnOfPlayer) ifTrue: [ self error: self isNotPlayersTurnErrorDescription ].! !
!LaddersAndSlidesGame methodsFor: 'playing' stamp: 'ao 7/4/2022 19:49:28'!
assertValidPlayer: aPlayer
(aPlayer > numberOfPlayers or: [aPlayer < 1]) ifTrue: [^ self error: self invalidPlayerErrorDescription ].
! !
!LaddersAndSlidesGame methodsFor: 'playing' stamp: 'ao 7/4/2022 19:48:14'!
calculateNextTurn
turnOfPlayer := turnOfPlayer+1.
(turnOfPlayer > numberOfPlayers ) ifTrue: [turnOfPlayer := 1]! !
!LaddersAndSlidesGame methodsFor: 'playing' stamp: 'ao 7/4/2022 19:52:10'!
newPositionOf: aPlayer with: aDice
|levelLimit newPosition move|
move _ aDice value - (6@6).
levelLimit _ map at: (playersLevels at: aPlayer).
newPosition _ (playersPosition at: aPlayer) + move.
newPosition _ (1@1) max: newPosition.
^levelLimit min: newPosition
! !
!LaddersAndSlidesGame methodsFor: 'playing' stamp: 'ao 7/4/2022 19:53:53'!
player: aPlayer withDice: aDice
| newPosition |
self assertValidPlayer: aPlayer.
self assertPlayersTurn: aPlayer.
newPosition _ self newPositionOf: aPlayer with: aDice.
playersPosition at: aPlayer put: newPosition.
self calculateNextTurn.
! !
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
!classDefinition: 'LaddersAndSlidesGame class' category: 'segundo-parcial-2022'!
LaddersAndSlidesGame class
instanceVariableNames: ''!
!LaddersAndSlidesGame class methodsFor: 'instance creation' stamp: 'ao 7/4/2022 21:46:54'!
playingWith: aNumberOfPlayers onMultilevelMap: aMap withSlides: aSlidesMap andStairs: aStairsMap
self assertShortCutsFloorsWithSlides: aSlidesMap AndStairs: aStairsMap doesNotExceed: aMap size.
self assertShortCutsPositionsDoNotRepeatWithSlides: aSlidesMap andStairs: aStairsMap.
^self new initializePlayingWith: aNumberOfPlayers onMultilevelMap: aMap withSlides: aSlidesMap andStairs: aStairsMap ! !
!LaddersAndSlidesGame class methodsFor: 'errorSignals' stamp: 'ao 7/4/2022 21:42:43'!
invalidShortCutsPositionsErrorDescription
^'invalid hort Cuts Positions'! !
!LaddersAndSlidesGame class methodsFor: 'errorSignals' stamp: 'ao 7/4/2022 20:24:07'!
invalidSlidesMapErrorDescription
^'invalid slides map'! !
!LaddersAndSlidesGame class methodsFor: 'assertions' stamp: 'ao 7/4/2022 21:45:10'!
assertShortCutsFloorsWithSlides: aSlidesMap AndStairs: aStairsMap doesNotExceed: aFloorLimit
aSlidesMap allSatisfy: [:slide | slide assertFloors: aFloorLimit].
aStairsMap allSatisfy: [:slide | slide assertFloors: aFloorLimit].
! !
!LaddersAndSlidesGame class methodsFor: 'assertions' stamp: 'ao 7/4/2022 21:47:08'!
assertShortCutsPositionsDoNotRepeatWithSlides: aSlidesMap andStairs: aStairsMap
! !
!classDefinition: #ShortCut category: 'segundo-parcial-2022'!
Object subclass: #ShortCut
instanceVariableNames: 'fromFloor fromPosition toFloor toPosition'
classVariableNames: ''
poolDictionaries: ''
category: 'segundo-parcial-2022'!
!ShortCut methodsFor: 'initialize' stamp: 'ao 7/4/2022 21:04:21'!
initializeFromFloor: aFromFloor andPosition: aFromPosition toFloor: aToFloor andPostion: aToPosition
fromFloor _ aFromFloor.
fromPosition _ aFromPosition.
toFloor _ aToFloor.
toPosition _ aToPosition! !
!ShortCut methodsFor: 'assertions' stamp: 'ao 7/4/2022 21:36:55'!
assertFloors: aLimitFloor
(toFloor <= aLimitFloor or: [fromFloor <= aLimitFloor]) ifTrue: [^self error: self class floorCanNotExceedMapFloorsErrorDescription]! !
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
!classDefinition: 'ShortCut class' category: 'segundo-parcial-2022'!
ShortCut class
instanceVariableNames: ''!
!ShortCut class methodsFor: 'initialization' stamp: 'ao 7/4/2022 21:09:15'!
fromFloor: aFromFloor andPosition: aFromPosition toFloor: aToFloor andPostion: aToposition
aFromFloor < 1 ifTrue: [^self error: self fromFloorCanNotBeSmallerThanOneErrorDescription].
self assertFloorDirectionFromFloor: aFromFloor toFloor: aToFloor .
^self new initializeFromFloor: aFromFloor andPosition: aFromPosition toFloor: aToFloor andPostion: aToposition ! !
!ShortCut class methodsFor: 'errorSignals' stamp: 'ao 7/4/2022 21:30:33'!
floorCanNotExceedMapFloorsErrorDescription
^ 'floor Can Not Exceed Map Floors Error Description'! !
!ShortCut class methodsFor: 'errorSignals' stamp: 'ao 7/4/2022 21:21:33'!
floorCanNotExceedsMapFloorsErrorDescription
^'floor can not exceeds map floors'! !
!ShortCut class methodsFor: 'errorSignals' stamp: 'ao 7/4/2022 21:09:19'!
fromFloorCanNotBeSmallerThanOneErrorDescription
^'from floor can not be smaller than one'! !
!ShortCut class methodsFor: 'assertions' stamp: 'ao 7/4/2022 21:06:21'!
assertFloorDirectionFromFloor: aFromFloor toFloor: aToFloor
self subclassResponsibility ! !
!classDefinition: #Slide category: 'segundo-parcial-2022'!
ShortCut subclass: #Slide
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'segundo-parcial-2022'!
!Slide methodsFor: 'initialization' stamp: 'ao 7/4/2022 20:47:47'!
initializeFromFloor: aFromFloor andPosition: aFromPosition toFloor: aToFloor andPostion: aToPosition
fromFloor := aFromFloor.
fromPosition := aFromPosition.
toFloor := aToFloor.
toPosition := aToPosition.! !
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
!classDefinition: 'Slide class' category: 'segundo-parcial-2022'!
Slide class
instanceVariableNames: ''!
!Slide class methodsFor: 'assertion' stamp: 'ao 7/4/2022 21:13:40'!
assertFloorDirectionFromFloor: aFromFloor toFloor: aToFloor
aFromFloor < aToFloor ifTrue: [^self error: self fromFloorCanNotBeSmallerThanToFloorErrorDescription].! !
!Slide class methodsFor: 'error' stamp: 'ao 7/4/2022 21:13:40'!
fromFloorCanNotBeSmallerThanToFloorErrorDescription
^'from floor can not be smaller than to floor'! !
!classDefinition: #Stair category: 'segundo-parcial-2022'!
ShortCut subclass: #Stair
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'segundo-parcial-2022'!
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
!classDefinition: 'Stair class' category: 'segundo-parcial-2022'!
Stair class
instanceVariableNames: ''!
!Stair class methodsFor: 'assertion' stamp: 'ao 7/4/2022 21:16:21'!
assertFloorDirectionFromFloor: aFromFloor toFloor: aToFloor
aFromFloor > aToFloor ifTrue: [^self error: self fromFloorCanNotBeGreaterThanToFloorErrorDescription ].! !
!Stair class methodsFor: 'assertion' stamp: 'ao 7/4/2022 21:14:44'!
fromFloorCanNotBeGreaterThanToFloorErrorDescription
^'from floor can not be greater than to floor'! !
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment