Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
twitch
live-coding-fr
Commits
1c54461c
Commit
1c54461c
authored
Aug 17, 2020
by
Julie CONTE
Browse files
Ugly trivia resolution
parent
f25fba88
Changes
32
Hide whitespace changes
Inline
Side-by-side
.gitlab-ci.yml
View file @
1c54461c
...
...
@@ -7,3 +7,4 @@ include:
-
local
:
"
/roman-numerals/.gitlab-ci.yml"
-
local
:
"
/string-calculator/.gitlab-ci.yml"
-
local
:
"
/gilded-rose/.gitlab-ci.yml"
-
local
:
"
/ugly-trivia/.gitlab-ci.yml"
README.md
View file @
1c54461c
...
...
@@ -22,3 +22,4 @@ Ce dépôt Git a pour but de partager les différents ateliers pouvant être ré
4.
[
C'est une bonne situation ça techlead ? (débat)
](
https://www.youtube.com/watch?v=9tOoXfOE12o
)
5.
[
Pagination Seven
](
/pagination-seven
)
6.
[
GildedRose
](
/gilded-rose
)
7.
[
UglyTrivia
](
/ugly-trivia
)
ugly-trivia/README.md
View file @
1c54461c
...
...
@@ -8,4 +8,4 @@ Dans le cadre d'un programme de mentoring interne (BlackBelt) Julie a fait une r
-
**Date**
: 19/09/2020
-
**Langage**
: Java
-
**Niveau**
: Moyen
-
**Replay**
:
-
**Replay**
:
[
REVUE KATA : Ugly Trivia avec Julie, Emmanuelle, Alexis & Colin
](
https://www.youtube.com/watch?v=IeAa8chmngI
)
ugly-trivia/pom.xml
100644 → 100755
View file @
1c54461c
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.adaptionsoft.games
</groupId>
<artifactId>
uglytrivia
</artifactId>
<packaging>
jar
</packaging>
<version>
1.0-SNAPSHOT
</version>
<parent>
<version>
1.0.0
</version>
<groupId>
fr.ippon.kata
</groupId>
<artifactId>
java-parent
</artifactId>
<relativePath>
../java-parent
</relativePath>
</parent>
<version>
1.0.0-SNAPSHOT
</version>
<artifactId>
ugly-trivia
</artifactId>
<name>
UglyTrivia
</name>
<dependencies>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.8.2
</version>
<groupId>
org.apache.maven.surefire
</groupId>
<artifactId>
surefire-booter
</artifactId>
<version>
3.0.0-M3
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-resources-plugin
</artifactId>
<version>
2.5
</version>
<configuration>
<encoding>
UTF-8
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
2.3.2
</version>
<configuration>
<source>
1.6
</source>
<target>
1.6
</target>
<encoding>
UTF-8
</encoding>
</configuration>
</plugin>
</plugins>
</build>
<developers>
<developer>
<email>
jconte@ippon.fr
</email>
<name>
Julie CONTE
</name>
</developer>
<developer>
<email>
cdamon@ippon.fr
</email>
<name>
Colin DAMON
</name>
</developer>
</developers>
</project>
ugly-trivia/src/main/java/com/adaptionsoft/games/trivia/runner/GameRunner.java
deleted
100644 → 0
View file @
f25fba88
package
com.adaptionsoft.games.trivia.runner
;
import
java.util.Random
;
import
com.adaptionsoft.games.uglytrivia.Game
;
public
class
GameRunner
{
private
static
boolean
notAWinner
;
public
static
void
main
(
String
[]
args
)
{
Game
aGame
=
new
Game
();
aGame
.
add
(
"Chet"
);
aGame
.
add
(
"Pat"
);
aGame
.
add
(
"Sue"
);
Random
rand
=
new
Random
();
do
{
aGame
.
roll
(
rand
.
nextInt
(
5
)
+
1
);
if
(
rand
.
nextInt
(
9
)
==
7
)
{
notAWinner
=
aGame
.
wrongAnswer
();
}
else
{
notAWinner
=
aGame
.
wasCorrectlyAnswered
();
}
}
while
(
notAWinner
);
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Answer.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
public
class
Answer
{
private
final
Notifications
notifications
;
private
final
AnswerRandomSimulator
answerRandom
;
public
Answer
(
Notifications
notifications
,
AnswerRandomSimulator
answerRandom
)
{
this
.
notifications
=
notifications
;
this
.
answerRandom
=
answerRandom
;
}
public
Player
answer
(
Player
player
)
{
if
(!
answerRandom
.
isRight
())
{
return
wrongAnswer
(
player
);
}
return
goodAnswer
(
player
);
}
private
Player
goodAnswer
(
Player
player
)
{
if
(!
player
.
isInPenaltyBox
())
{
notifications
.
correctAnswer
();
player
=
player
.
addCoin
();
notifications
.
actualGoldCoins
(
player
.
getName
(),
player
.
getPurse
());
}
return
player
;
}
private
Player
wrongAnswer
(
Player
player
)
{
notifications
.
incorrectlyAnswered
();
notifications
.
sendInPenaltyBox
(
player
.
getName
());
return
player
.
inPenaltyBox
();
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/AnswerRandomSimulator.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.util.Random
;
class
AnswerRandomSimulator
{
private
final
Random
rand
;
AnswerRandomSimulator
(
Random
rand
)
{
this
.
rand
=
rand
;
}
boolean
isRight
()
{
return
!(
rand
.
nextInt
(
9
)
==
7
);
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Board.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
class
Board
{
private
final
int
limitBoardSize
;
Board
(
int
limitBoardSize
)
{
this
.
limitBoardSize
=
limitBoardSize
;
}
boolean
isBeyondLimitBoard
(
int
position
)
{
return
position
>=
limitBoardSize
;
}
int
getLimit
()
{
return
limitBoardSize
;
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Category.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.util.Arrays
;
import
java.util.List
;
enum
Category
{
POP
(
"Pop"
,
List
.
of
(
0
,
4
,
8
)),
SCIENCE
(
"Science"
,
List
.
of
(
1
,
5
,
9
)),
SPORTS
(
"Sports"
,
List
.
of
(
2
,
6
,
10
)),
ROCK
(
"Rock"
,
List
.
of
());
private
final
String
category
;
private
final
List
<
Integer
>
positions
;
Category
(
String
category
,
List
<
Integer
>
positions
)
{
this
.
category
=
category
;
this
.
positions
=
positions
;
}
static
Category
fromPosition
(
int
position
)
{
return
Arrays
.
stream
(
Category
.
values
()).
filter
(
category
->
category
.
positions
.
contains
(
position
)).
findFirst
().
orElse
(
Category
.
ROCK
);
}
String
getCategory
()
{
return
category
;
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/ConsolePrinter.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.io.PrintStream
;
class
ConsolePrinter
{
private
final
PrintStream
print
;
public
ConsolePrinter
(
PrintStream
print
)
{
this
.
print
=
print
;
}
void
sendMessage
(
String
message
)
{
print
.
println
(
message
);
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Deck.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.Map
;
class
Deck
{
Map
<
Category
,
LinkedList
<
Question
>>
deck
;
Deck
(
int
limitDeckSize
)
{
deck
=
new
HashMap
<>();
deck
.
put
(
Category
.
POP
,
new
LinkedList
<>());
deck
.
put
(
Category
.
SCIENCE
,
new
LinkedList
<>());
deck
.
put
(
Category
.
SPORTS
,
new
LinkedList
<>());
deck
.
put
(
Category
.
ROCK
,
new
LinkedList
<>());
for
(
int
i
=
0
;
i
<
limitDeckSize
;
i
++)
{
deck
.
get
(
Category
.
POP
).
addLast
(
new
Question
(
Category
.
POP
,
i
));
deck
.
get
(
Category
.
SCIENCE
).
addLast
(
new
Question
(
Category
.
SCIENCE
,
i
));
deck
.
get
(
Category
.
SPORTS
).
addLast
(
new
Question
(
Category
.
SPORTS
,
i
));
deck
.
get
(
Category
.
ROCK
).
addLast
(
new
Question
(
Category
.
ROCK
,
i
));
}
}
String
removeFirstQuestion
(
Category
category
)
{
return
deck
.
get
(
category
).
removeFirst
().
getMessage
();
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Dice.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.util.Random
;
class
Dice
{
private
final
Random
rand
;
public
Dice
(
Random
rand
)
{
this
.
rand
=
rand
;
}
public
int
roll
()
{
return
rand
.
nextInt
(
5
)
+
1
;
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Game.java
100644 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
public
class
Game
{
ArrayList
players
=
new
ArrayList
();
int
[]
places
=
new
int
[
6
];
int
[]
purses
=
new
int
[
6
];
boolean
[]
inPenaltyBox
=
new
boolean
[
6
];
LinkedList
popQuestions
=
new
LinkedList
();
LinkedList
scienceQuestions
=
new
LinkedList
();
LinkedList
sportsQuestions
=
new
LinkedList
();
LinkedList
rockQuestions
=
new
LinkedList
();
int
currentPlayer
=
0
;
boolean
isGettingOutOfPenaltyBox
;
public
Game
(){
for
(
int
i
=
0
;
i
<
50
;
i
++)
{
popQuestions
.
addLast
(
"Pop Question "
+
i
);
scienceQuestions
.
addLast
((
"Science Question "
+
i
));
sportsQuestions
.
addLast
((
"Sports Question "
+
i
));
rockQuestions
.
addLast
(
createRockQuestion
(
i
));
}
class
Game
{
static
final
int
MAX_PLAYER_PLAYABLE
=
6
;
static
final
int
MAX_GOLD_COINS
=
6
;
static
final
int
MIN_PLAYER_PLAYABLE
=
2
;
static
final
int
LIMIT_DECK_SIZE
=
50
;
private
final
Turn
turn
;
private
final
Answer
answer
;
private
final
Notifications
notifications
;
private
final
Deck
deck
;
private
Players
players
;
Game
(
Turn
turn
,
Answer
answer
,
Notifications
notifications
)
{
this
.
notifications
=
notifications
;
this
.
turn
=
turn
;
this
.
answer
=
answer
;
players
=
new
Players
();
deck
=
new
Deck
(
LIMIT_DECK_SIZE
);
}
boolean
isPlayable
()
{
return
minimumPlayer
()
&&
limitPlayersNotExceeded
();
}
private
boolean
minimumPlayer
()
{
return
howManyPlayers
()
>=
MIN_PLAYER_PLAYABLE
;
}
private
boolean
limitPlayersNotExceeded
()
{
return
howManyPlayers
()
<
MAX_PLAYER_PLAYABLE
;
}
boolean
add
(
String
playerName
)
{
players
=
players
.
add
(
playerName
);
notifications
.
addPlayer
(
playerName
);
notifications
.
playerPlace
(
howManyPlayers
());
return
true
;
}
private
int
howManyPlayers
()
{
return
players
.
howManyPlayers
();
}
boolean
playTurn
()
{
updateCurrentPlayer
(
turn
.
tryToPlay
(
currentPlayer
()));
askQuestion
();
updateCurrentPlayer
(
answer
.
answer
(
currentPlayer
()));
if
(
didPlayerWin
())
{
return
true
;
}
players
=
players
.
nextPlayer
();
return
false
;
}
private
boolean
didPlayerWin
()
{
return
currentPlayer
().
getPurse
()
==
MAX_GOLD_COINS
;
}
public
String
createRockQuestion
(
int
index
){
return
"Rock Question "
+
index
;
}
public
boolean
isPlayable
()
{
return
(
howManyPlayers
()
>=
2
);
}
public
boolean
add
(
String
playerName
)
{
players
.
add
(
playerName
);
places
[
howManyPlayers
()]
=
0
;
purses
[
howManyPlayers
()]
=
0
;
inPenaltyBox
[
howManyPlayers
()]
=
false
;
System
.
out
.
println
(
playerName
+
" was added"
);
System
.
out
.
println
(
"They are player number "
+
players
.
size
());
return
true
;
}
public
int
howManyPlayers
()
{
return
players
.
size
();
}
public
void
roll
(
int
roll
)
{
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
" is the current player"
);
System
.
out
.
println
(
"They have rolled a "
+
roll
);
if
(
inPenaltyBox
[
currentPlayer
])
{
if
(
roll
%
2
!=
0
)
{
isGettingOutOfPenaltyBox
=
true
;
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
" is getting out of the penalty box"
);
places
[
currentPlayer
]
=
places
[
currentPlayer
]
+
roll
;
if
(
places
[
currentPlayer
]
>
11
)
places
[
currentPlayer
]
=
places
[
currentPlayer
]
-
12
;
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
"'s new location is "
+
places
[
currentPlayer
]);
System
.
out
.
println
(
"The category is "
+
currentCategory
());
askQuestion
();
}
else
{
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
" is not getting out of the penalty box"
);
isGettingOutOfPenaltyBox
=
false
;
}
}
else
{
places
[
currentPlayer
]
=
places
[
currentPlayer
]
+
roll
;
if
(
places
[
currentPlayer
]
>
11
)
places
[
currentPlayer
]
=
places
[
currentPlayer
]
-
12
;
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
"'s new location is "
+
places
[
currentPlayer
]);
System
.
out
.
println
(
"The category is "
+
currentCategory
());
askQuestion
();
}
}
private
void
askQuestion
()
{
if
(
currentCategory
()
==
"Pop"
)
System
.
out
.
println
(
popQuestions
.
removeFirst
());
if
(
currentCategory
()
==
"Science"
)
System
.
out
.
println
(
scienceQuestions
.
removeFirst
());
if
(
currentCategory
()
==
"Sports"
)
System
.
out
.
println
(
sportsQuestions
.
removeFirst
());
if
(
currentCategory
()
==
"Rock"
)
System
.
out
.
println
(
rockQuestions
.
removeFirst
());
}
private
String
currentCategory
()
{
if
(
places
[
currentPlayer
]
==
0
)
return
"Pop"
;
if
(
places
[
currentPlayer
]
==
4
)
return
"Pop"
;
if
(
places
[
currentPlayer
]
==
8
)
return
"Pop"
;
if
(
places
[
currentPlayer
]
==
1
)
return
"Science"
;
if
(
places
[
currentPlayer
]
==
5
)
return
"Science"
;
if
(
places
[
currentPlayer
]
==
9
)
return
"Science"
;
if
(
places
[
currentPlayer
]
==
2
)
return
"Sports"
;
if
(
places
[
currentPlayer
]
==
6
)
return
"Sports"
;
if
(
places
[
currentPlayer
]
==
10
)
return
"Sports"
;
return
"Rock"
;
}
public
boolean
wasCorrectlyAnswered
()
{
if
(
inPenaltyBox
[
currentPlayer
]){
if
(
isGettingOutOfPenaltyBox
)
{
System
.
out
.
println
(
"Answer was correct!!!!"
);
purses
[
currentPlayer
]++;
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
" now has "
+
purses
[
currentPlayer
]
+
" Gold Coins."
);
boolean
winner
=
didPlayerWin
();
currentPlayer
++;
if
(
currentPlayer
==
players
.
size
())
currentPlayer
=
0
;
return
winner
;
}
else
{
currentPlayer
++;
if
(
currentPlayer
==
players
.
size
())
currentPlayer
=
0
;
return
true
;
}
}
else
{
System
.
out
.
println
(
"Answer was corrent!!!!"
);
purses
[
currentPlayer
]++;
System
.
out
.
println
(
players
.
get
(
currentPlayer
)
+
" now has "
+
purses
[
currentPlayer
]
+
" Gold Coins."
);
boolean
winner
=
didPlayerWin
();
currentPlayer
++;
if
(
currentPlayer
==
players
.
size
())
currentPlayer
=
0
;
return
winner
;
}
}
public
boolean
wrongAnswer
(){
System
.
out
.
println
(
"Question was incorrectly answered"
);
System
.
out
.
println
(
players
.
get
(
currentPlayer
)+
" was sent to the penalty box"
);
inPenaltyBox
[
currentPlayer
]
=
true
;
currentPlayer
++;
if
(
currentPlayer
==
players
.
size
())
currentPlayer
=
0
;
return
true
;
}
private
boolean
didPlayerWin
()
{
return
!(
purses
[
currentPlayer
]
==
6
);
}
private
void
updateCurrentPlayer
(
Player
currentPlayer
)
{
players
=
players
.
updateCurrentPlayer
(
currentPlayer
);
}
private
void
askQuestion
()
{
notifications
.
askQuestion
(
deck
.
removeFirstQuestion
(
currentCategory
()));
}
private
Category
currentCategory
()
{
return
Category
.
fromPosition
(
currentPlayer
().
getPosition
());
}
private
Player
currentPlayer
()
{
return
players
.
getCurrentPlayer
();
}
}
ugly-trivia/src/main/java/com/adaptionsoft/games/uglytrivia/Notifications.java
0 → 100755
View file @
1c54461c
package
com.adaptionsoft.games.uglytrivia
;
class
Notifications
{
private
final
ConsolePrinter
printer
;
public
Notifications
(
ConsolePrinter
printer
)
{
this
.
printer
=
printer
;
}
void
addPlayer
(
String
player
)
{
printer
.
sendMessage
(
player
+
" was added"
);
}
void
playerPlace
(
int
place
)
{
printer
.
sendMessage
(
"They are player number "
+
place
);
}
void
currentPlayer
(
String
player
)
{
printer
.
sendMessage
(
player
+
" is the current player"
);
}
void
roll
(
int
roll
)
{
printer
.
sendMessage
(
"They have rolled a "
+
roll
);
}
void
notGettingOutOfPenaltyBox
(
String
player
)
{
printer
.
sendMessage
(
player
+
" is not getting out of the penalty box"
);
}
void
newLocation
(
String
player
,
int
location
)
{
printer
.
sendMessage
(
player
+
"'s new location is "
+
location
);
}
void
currentCategory
(
String
category
)
{
printer
.
sendMessage
(
"The category is "
+
category
);
}
void
gettingOutOfPenaltyBox
(
String
player
)
{
printer
.
sendMessage
(
player
+
" is getting out of the penalty box"
);
}
void
correctAnswer
()
{
printer
.
sendMessage
(
"Answer was correct!!!!"
);
}
void
actualGoldCoins
(
String
player
,
int
goldCoins
)
{
printer
.
sendMessage
(
player
+
" now has "
+
goldCoins
+
" Gold Coins."
);
}
void
incorrectlyAnswered
()
{