From cde36e10bf755e309bc3d07de5ef115a3eeb5f15 Mon Sep 17 00:00:00 2001 From: Francisco De Grandis Date: Thu, 11 Jun 2020 13:35:23 -0300 Subject: [PATCH] --- .../IngSoft2-Model/Acceleration.class.st | 9 ++ repository/IngSoft2-Model/Board.class.st | 1 + .../IngSoft2-Model/Cancellation.class.st | 5 + repository/IngSoft2-Model/Card.class.st | 6 +- repository/IngSoft2-Model/Game.class.st | 21 +-- repository/IngSoft2-Model/Player.class.st | 1 - repository/IngSoft2-Model/Speed.class.st | 10 ++ repository/IngSoft2-Tests/GameTest.class.st | 122 ++++++++++++++++-- 8 files changed, 151 insertions(+), 24 deletions(-) diff --git a/repository/IngSoft2-Model/Acceleration.class.st b/repository/IngSoft2-Model/Acceleration.class.st index 233c37f..9af4ff7 100644 --- a/repository/IngSoft2-Model/Acceleration.class.st +++ b/repository/IngSoft2-Model/Acceleration.class.st @@ -9,6 +9,15 @@ Acceleration class >> to: anUndefinedObject [ ^self new ] +{ #category : #'as yet unclassified' } +Acceleration >> isIdenticalTo: anAcceleration [ + ^anAcceleration = self +] + +{ #category : #'as yet unclassified' } +Acceleration >> target [ +] + { #category : #'as yet unclassified' } Acceleration >> triggerEffectFor: aGame [ aGame moveActualPlayerForward: 1. diff --git a/repository/IngSoft2-Model/Board.class.st b/repository/IngSoft2-Model/Board.class.st index 3356da6..369068c 100644 --- a/repository/IngSoft2-Model/Board.class.st +++ b/repository/IngSoft2-Model/Board.class.st @@ -36,5 +36,6 @@ Board >> length [ { #category : #playing } Board >> triggerFor: aGame [ + aGame forActualUpdateLastEffect: (fields at: (aGame actualPlayer position)+1). (fields at: (aGame actualPlayer position)+1) triggerEffectFor: aGame. ] diff --git a/repository/IngSoft2-Model/Cancellation.class.st b/repository/IngSoft2-Model/Cancellation.class.st index 2dc6161..3c080b9 100644 --- a/repository/IngSoft2-Model/Cancellation.class.st +++ b/repository/IngSoft2-Model/Cancellation.class.st @@ -17,6 +17,11 @@ Cancellation >> initializeWithTarget: aClass [ target := aClass ] +{ #category : #'as yet unclassified' } +Cancellation >> isIdenticalTo: aCard [ + ^(self = aCard) and: (aCard target = target) +] + { #category : #'as yet unclassified' } Cancellation >> triggerEffectFor: aGame [ diff --git a/repository/IngSoft2-Model/Card.class.st b/repository/IngSoft2-Model/Card.class.st index ada583f..0f1539a 100644 --- a/repository/IngSoft2-Model/Card.class.st +++ b/repository/IngSoft2-Model/Card.class.st @@ -10,9 +10,9 @@ Card class >> playingAs: aCardPlayState [ initializeWithPlayState: aCardPlayState ] -{ #category : #comparing } -Card >> = aCard [ - ^aCard isMemberOf: self class. +{ #category : #'as yet unclassified' } +Card >> = aCard [ +^ (aCard isMemberOf: self class) ] { #category : #'as yet unclassified' } diff --git a/repository/IngSoft2-Model/Game.class.st b/repository/IngSoft2-Model/Game.class.st index de2c6de..dcf29a4 100644 --- a/repository/IngSoft2-Model/Game.class.st +++ b/repository/IngSoft2-Model/Game.class.st @@ -9,7 +9,7 @@ Class { 'scoreboard', 'board', 'deck', - 'permanentCardDeck' + 'thrownCards' ], #category : #'IngSoft2-Model-Game' } @@ -41,7 +41,7 @@ Game class >> with: dice on: aBoard playedBy: players withLaps: laps shuffling: { #category : #'as yet unclassified' } Game >> activatePermanentEffects [ - permanentCardDeck do: [ :aCard | aCard triggerEffectFor: self ] + thrownCards do: [ :aCard | aCard triggerEffectFor: self ] ] { #category : #accessing } @@ -51,7 +51,7 @@ Game >> actualPlayer [ { #category : #'as yet unclassified' } Game >> addPermanent: aCard [ - permanentCardDeck add: aCard + thrownCards add: aCard ] { #category : #results } @@ -102,7 +102,7 @@ Game >> initializeDice: aDice withBoard: aBoard andPlayers: players andLaps: amm state := Started new. laps := ammountLaps. scoreboard := Scoreboard withRows: rows. - permanentCardDeck := OrderedCollection new. + thrownCards := OrderedCollection new. ] @@ -113,7 +113,7 @@ Game >> laps [ { #category : #'as yet unclassified' } Game >> lastCard [ - ^permanentCardDeck last copy + ^thrownCards last copy ] { #category : #accessing } @@ -204,11 +204,12 @@ Game >> podiumOf: aScoreboardRaw [ ] { #category : #'as yet unclassified' } -Game >> removePermanentCard: aClass [ - | index | - index := permanentCardDeck indexOf: aClass. - index > 0 - ifTrue: [ permanentCardDeck removeAt: index ] +Game >> removePermanentCard: aCard [ + | aColl | + aColl := thrownCards select: [ :card | (card isIdenticalTo: aCard) ]. + aColl isEmpty ifFalse: [aColl removeFirst]. + thrownCards :=(thrownCards select: [ :card | (card isIdenticalTo: aCard) not]) addAll: aColl. + ] { #category : #playing } diff --git a/repository/IngSoft2-Model/Player.class.st b/repository/IngSoft2-Model/Player.class.st index a6482bb..16c0c7d 100644 --- a/repository/IngSoft2-Model/Player.class.st +++ b/repository/IngSoft2-Model/Player.class.st @@ -79,7 +79,6 @@ Player >> layCard: aCardType for: aGame [ index := hand indexOf: aCardType. index > 0 ifFalse: [ InvalidAction signal: 'Player does not have this type of card' ]. - aCardType useEffectFor: aGame. self getCardAt: index ] diff --git a/repository/IngSoft2-Model/Speed.class.st b/repository/IngSoft2-Model/Speed.class.st index a7ca2d6..a66ee7c 100644 --- a/repository/IngSoft2-Model/Speed.class.st +++ b/repository/IngSoft2-Model/Speed.class.st @@ -17,6 +17,16 @@ Speed >> initializeWithTarget: aString [ target := aString ] +{ #category : #'as yet unclassified' } +Speed >> isIdenticalTo: aSpeed [ + ^ (aSpeed = self) and:( aSpeed target= target) +] + +{ #category : #'as yet unclassified' } +Speed >> target [ + ^ target +] + { #category : #'as yet unclassified' } Speed >> triggerEffectFor: aGame [ ((aGame player: target )= (aGame actualPlayer)) ifTrue: [ aGame moveActualPlayerForward: 1 ] diff --git a/repository/IngSoft2-Tests/GameTest.class.st b/repository/IngSoft2-Tests/GameTest.class.st index 0846e41..ff60320 100644 --- a/repository/IngSoft2-Tests/GameTest.class.st +++ b/repository/IngSoft2-Tests/GameTest.class.st @@ -7,7 +7,8 @@ Class { 'aNoEffect', 'aWormhole', 'anAtomicBomb', - 'aSpeedUp' + 'aSpeedUp', + 'anAcceleration' ], #category : #'IngSoft2-Tests-Game-Tests' } @@ -59,7 +60,8 @@ GameTest >> setUp [ aNoEffect := NoEffect new. aWormhole := Wormhole new. anAtomicBomb := AtomicBomb new. - aSpeedUp := SpeedUp new + aSpeedUp := SpeedUp new. + anAcceleration := Acceleration new. ] { #category : #tests } @@ -74,9 +76,9 @@ GameTest >> testActivateCancellationOfNonPlayedCard [ (CardDeck with: {Cancellation new. - Acceleration new} + anAcceleration} of: #(1 2)). - aGame player: 'Manu' playCard: (Cancellation to: Acceleration new). + aGame player: 'Manu' playCard: (Cancellation to: anAcceleration). self assert: (self cardsOf: 'Fran' in: aGame) equals: 2. self assert: (self cardsOf: 'Manu' in: aGame) equals: 1. self assert: (self positionOf: 'Fran' in: aGame) equals: 0. @@ -504,10 +506,10 @@ GameTest >> testTriggerCancellationEffect [ (CardDeck with: {Cancellation new. - Acceleration new} + anAcceleration} of: #(1 2)). - aGame player: 'Fran' playCard: Acceleration new. - aGame player: 'Manu' playCard: (Cancellation to: Acceleration new). + aGame player: 'Fran' playCard: anAcceleration. + aGame player: 'Manu' playCard: (Cancellation to: anAcceleration). self assert: (self cardsOf: 'Fran' in: aGame) equals: 1. self assert: (self cardsOf: 'Manu' in: aGame) equals: 1. self assert: (self positionOf: 'Fran' in: aGame) equals: 0. @@ -516,6 +518,61 @@ GameTest >> testTriggerCancellationEffect [ self assert: (self positionOf: 'Manu' in: aGame) equals: 0 ] +{ #category : #tests } +GameTest >> testTriggerCancellationEffectToAnSpecificSpeed [ + | aGame | + aGame := Game + with: (Die of: 6 rolling: #(4)) + on: self noEffectBoardOf12 + playedBy: players + withLaps: 1 + shuffling: + (CardDeck + with: + {Cancellation new. + Speed new} + of: #(1 2)). + aGame player: 'Fran' playCard: (Speed to: 'Fran'). + self assert: (self cardsOf: 'Fran' in: aGame) equals: 1. + self assert: (self cardsOf: 'Manu' in: aGame) equals: 2. + self assert: (self positionOf: 'Fran' in: aGame) equals: 0. + aGame playTurn. + aGame player: 'Manu' playCard: (Speed to: 'Manu'). + aGame player: 'Fran' playCard:( Cancellation to:(Speed to: 'Manu')). + self assert: (self positionOf: 'Fran' in: aGame) equals: 5. + self assert: (self positionOf: 'Manu' in: aGame) equals: 0. + aGame playTurn. + self assert: (self positionOf: 'Manu' in: aGame) equals: 4. +] + +{ #category : #tests } +GameTest >> testTriggerCancellationEffectToAnSpecificSpeedButManuHavingTwoOfThem [ + | aGame | + aGame := Game + with: (Die of: 6 rolling: #(4)) + on: self noEffectBoardOf12 + playedBy: players + withLaps: 1 + shuffling: + (CardDeck + with: + {Speed new. + Cancellation new} + of: #(2 1 1 1)). + aGame player: 'Fran' playCard: (Speed to: 'Fran'). + self assert: (self cardsOf: 'Fran' in: aGame) equals: 1. + self assert: (self cardsOf: 'Manu' in: aGame) equals: 2. + self assert: (self positionOf: 'Fran' in: aGame) equals: 0. + aGame playTurn. + aGame player: 'Manu' playCard: (Speed to: 'Manu'). + aGame player: 'Manu' playCard: (Speed to: 'Manu'). + aGame player: 'Fran' playCard: (Cancellation to: (Speed to: 'Manu')). + self assert: (self positionOf: 'Fran' in: aGame) equals: 5. + self assert: (self positionOf: 'Manu' in: aGame) equals: 0. + aGame playTurn. + self assert: (self positionOf: 'Manu' in: aGame) equals: 5 +] + { #category : #tests } GameTest >> testTriggerOverloadEffect [ | aGame | @@ -543,9 +600,9 @@ GameTest >> testTriggerRedoAcceleration [ on: self noEffectBoardOf12 playedBy: players withLaps: 1 - shuffling: (CardDeck with: {Acceleration new. Redo new} of: #(1 2)). + shuffling: (CardDeck with: {anAcceleration. Redo new} of: #(1 2)). self assert: (self cardsOf: 'Fran' in: aGame) equals: 2. - aGame player: 'Fran' playCard: Acceleration new. + aGame player: 'Fran' playCard: anAcceleration. aGame player: 'Fran' playCard: Redo new. self assert: (self cardsOf: 'Fran' in: aGame) equals: 0. self assert: (self positionOf: 'Fran' in: aGame) equals: 0. @@ -554,6 +611,29 @@ GameTest >> testTriggerRedoAcceleration [ self assert: (self positionOf: 'Manu' in: aGame) equals: 0. ] +{ #category : #tests } +GameTest >> testTriggerRedoCancellation [ + | aGame | + aGame := Game + with: (Die of: 6 rolling: #(4)) + on: self noEffectBoardOf12 + playedBy: players + withLaps: 1 + shuffling: (CardDeck with: {anAcceleration. Speed new. Redo new. Cancellation new.} of: #(1 2 3 4)). + self assert: (self cardsOf: 'Fran' in: aGame) equals: 2. + aGame player: 'Fran' playCard: (Speed to: 'Fran'). + aGame player: 'Fran' playCard: (anAcceleration). + aGame player: 'Manu' playCard: (Cancellation to: Speed new). + aGame player: 'Manu' playCard: (Redo to: Acceleration new). + self assert: (self cardsOf: 'Fran' in: aGame) equals: 0. + self assert: (self cardsOf: 'Manu' in: aGame) equals: 0. + self assert: (self positionOf: 'Fran' in: aGame) equals: 0. + aGame playTurn. + self assert: (self positionOf: 'Fran' in: aGame) equals: 4. + self assert: (self positionOf: 'Manu' in: aGame) equals: 0. + +] + { #category : #tests } GameTest >> testTriggerRedoSpeed [ | aGame | @@ -562,7 +642,7 @@ GameTest >> testTriggerRedoSpeed [ on: self noEffectBoardOf12 playedBy: players withLaps: 1 - shuffling: (CardDeck with: {Speed new. Redo new} of: #(1 2)). + shuffling: (CardDeck with: {Cancellation new. Speed new. Redo new} of: #(2 2 1 3)). self assert: (self cardsOf: 'Fran' in: aGame) equals: 2. aGame player: 'Fran' playCard: (Speed to: 'Fran'). aGame player: 'Manu' playCard: (Redo to: 'Manu'). @@ -576,6 +656,28 @@ GameTest >> testTriggerRedoSpeed [ self assert: (self positionOf: 'Manu' in: aGame) equals: 5. ] +{ #category : #tests } +GameTest >> testTriggerRepeat [ + | aGame | + aGame := Game + with: (Die of: 6 rolling: #(4)) + on: self noEffectBoardOf12 + playedBy: players + withLaps: 1 + shuffling: (CardDeck with: {Acceleration new}). + self assert: (self cardsOf: 'Fran' in: aGame) equals: 2. + aGame player: 'Fran' playCard: Acceleration new. + self assert: (self cardsOf: 'Fran' in: aGame) equals: 1. + self assert: (self positionOf: 'Fran' in: aGame) equals: 0. + aGame playTurn. + self assert: (self positionOf: 'Fran' in: aGame) equals: 5. + self assert: (self positionOf: 'Manu' in: aGame) equals: 0. + aGame player: 'Manu' playCard: Acceleration new. + aGame playTurn. + self assert: (self positionOf: 'Fran' in: aGame) equals: 5. + self assert: (self positionOf: 'Manu' in: aGame) equals: 6 +] + { #category : #tests } GameTest >> testTriggerSpeedEffect [ | aGame |