Académique Documents
Professionnel Documents
Culture Documents
projet
JAVA
I.A)
Auteur
Heir
to
the
demon
Eliott
Blondin
B)
Thme
Dans
le
Royaume
de
Parse,
le
jeune
prince
Arslan
doit
vaincre
Hilmes
et
reprendre
le
trne
qui
lui
a
t
vol.
C)
Rsum
complet
du
scnario
Au
travers
du
royaume
de
Parse,
Arslan,
jeune
prince
g
de
quinze
ans,
va
devoir
convaincre
ses
allis
pour
ainsi,
les
rallier
sa
noble
cause.
La
fin
se
droulera
dans
la
capitale
de
Parse
o
se
trouve
Hilmes
et
devra
arriver
la
salle
du
trne
o
il
dfiera
finalement
celui
qui
a
captur
le
roi.
~ 1
~
I.
D)
Plan
~ 2
~
I.
E)
Scnario
dtaill
Une
grande
guerre
entre
deux
puissants
royaumes
se
droule:
d'un
ct
la
Lusitania,
de
l'autre
le
Parse.
Dans
les
plaines
d'Atropatnes,
Andragoras
V,
roi
de
Parse,
va
affronter
l'arme
Lusitanienne.
Arslan
va
ds
lors
participer
sa
premire
bataille.
Mais
Atropatnes
se
rvle
tre
un
pige
mortel
:
aids
par
un
tratre
et
dirigs
par
un
mystrieux
gnral
se
dissimulant
sous
un
masque
d'argent,
les
Lusitaniens
infligent
une
dfaite
aux
Parses,
capturent
le
roi
et
assigent
le
chteau
de
Parse.
Ayant
russi
chapper
des
assassins,
Arslan
va
dsormais
chercher
des
allis
avec
son
protecteur,
Darhyl,
afin
de
rorganiser
les
forces
de
Parse
pour
combattre
Hilmes
et
ses
sbires.
Sous-ensemble
du
scnario
:
Rsonner
Khallan
au
travers
dun
long
dialogue
pour
le
rallier
votre
cause
et
ainsi
librer
le
roi
AndragorasIII.
Si
Arslan
chouait
dans
sa
tentative
de
le
rsonner,
Khallan
tuera
le
roi
et
se
fera
tuer
son
tour
par
Darhyl.
Les
personnages
:
Arslan (vous) :
Prince
hritier
du
Royaume
de
Parse
et
personnage
principal.
Durant
sa
premire
bataille,
son
royaume,
Parse,
est
conquit
par
les
Lusitaniens
cause
de
la
trahison
de
Kharlan.
Il
est
d'apparence
fragile
et
peu
sr
de
lui,
contrairement
son
pre,
et
trs
gentil
;
il
est
prt
mettre
sa
vie
en
jeu
pour
celle
de
ses
amis,
sa
famille
et
son
royaume.
Au
dbut
aveugle
aux
dfauts
de
Parse,
il
devient
plus
conscient
des
mfaits
de
son
pays,
il
dsire
apprendre
les
croyances
des
Lusitaniens.
Darhyl :
Darhyl
est
un
des
cinq
meilleurs
guerriers
de
Parse.
Il
trs
loyal
envers
le
Roi
Andragoras
et
le
Prince
Arsln
et
durant
la
bataille
d'Atropathnes,
la
premire
bataille
laquelle
Arsln
participe,
son
oncle,
l'rhan
Valphreze
lui
demande
de
jurer
fidlit
Arsln
sur
son
pe,
ce
qu'il
accepte.
Suite
a
la
dfaite
des
Parses,
il
devient
le
protecteur
du
prince
Arsln
et
se
montre
particulirement
protecteur
envers
son
seigneur,
c'est
aussi
lui
qui
permet
au
prince
de
rencontrer
Narsus
car
il
estime
que
son
ami
pourra
leur
tre
d'une
aide
prcieuse
dans
la
guerre
contre
les
Lusitaniens.
Mme
aprs
qu'il
a
appris
l'identit
du
gnral
au
masque
d'argent,
et
aprs
les
accusations
d'autres
ennemis
disant
que
Arsln
n'a
aucune
lgitimit
pour
rgner
sur
Parse,
il
reste
tout
de
mme
d'une
loyaut
sans
faille
envers
son
jeune
protg.
~ 3
~
Andragoras
III
:
Roi
de
Parse
et
pre
d'Arsln.
Il
est
connu
pour
son
caractre
ttu
et
sa
tendance
utiliser
la
force
brute
plutt
que
la
stratgie.
La
trahison
de
Kahllan
et
la
connaissance
de
Masque
d'Argent
des
stratgies
de
Parse
ont
conduit
sa
dfaite
crasante.
Il
est
en
vie
et
maintenu
prisonnier.
Il
est
souponn
pour
la
mort
mystrieuse
de
son
frre
an,
le
roi
Osloes
V,
motive
par
son
ambition
d'obtenir
le
trne
et
Tahamin.
Il
est
la
tte
de
l'arme
Lusitanienne
et
est
le
principal
antagoniste.
Il
est
en
ralit
Hilmes,
cousin
d'Arsln
et
fils
d'Osloes
V,
le
frre
an
d'Andragoras.
Il
mne
l'invasion
de
Parse
pour
rclamer
son
titre
lgitime.
Il
hat
son
oncle
d'une
haine
brlante,
car
ce
dernier
l'a
dfigur
en
tentant
de
l'assassiner
aprs
la
mort
du
prcdent
roi,
et
il
s'est
associ
aux
Lusitaniens
mais
aussi
a
une
trange
secte
de
magiciens.
Il
est
pyrophobe
et
est
donc
effray
en
prsence
de
flammes...
depuis,
il
couvre
le
haut
de
son
visage,
notamment
la
zone
entourant
son
il
droit,
d'un
masque
d'argent
qui
lui
vaut
son
surnom.
Narsus :
Stratge
de
gnie,
Narsus
tait
autrefois
un
conseiller
et
stratge
du
Roi
Andragoras,
mais
il
a
t
banni
aprs
avoir
contest
la
dcision
du
Roi
de
maintenir
l'esclavage
et
parce
qu'il
estimait
les
membres
du
gouvernement
incomptents
et
corrompus.
Il
est
un
excellent
stratge,
mais
aussi
une
fine
lame
et
un
philosophe,
mme
s'il
est
plus
fier
de
ses
mdiocres
talents
de
peintre
que
de
ses
qualits.
Il
avait
prdit
que
le
manque
de
stratgie
du
Roi
et
son
refus
de
librer
les
esclaves
mnerait
la
chute
du
royaume.
Kubard :
Faisant
parti
des
Mazbharns,
Kubard
nest
presque
jamais
vu
sobre.
En
tant
que
guerrier
vtran,
il
n'a
pas
peur
des
grandes
batailles.
Mais
choqu
et
en
colre
quand
il
apprit
que
le
roi
avait
fui
,
il
cessa
de
combattre
en
dclarant
quun
roi
qui
ne
protge
pas
son
peuple
nen
est
pas
un.
Bodin :
Bodin
est
un
croyant
sanguinaire
de
Yaldabaoth
(croyance
de
la
Lusitanie)
,
qui
utilise
sa
position
et
le
pouvoir
de
tuer
indistinctement
des
esclaves.
Il
est
impitoyable
et
sans
piti
et
a
tortur
des
mazbharns
de
Pars
pendant
le
sige
de
Ecbatana.
~ 4
~
Kahllan
:
Un
des
Mazbharn
de
l'arme
de
Parse.
Il
trahit
Parse,
ce
qui
entrane
la
chute
du
Royaume,
et
sert
maintenant
Lusitania.
Sam :
Hodir :
Un gnral Lusitanien.
Xandes :
Il
est
le
fils
de
Mazbharn
Khallan
de
Pars
et
un
serviteur
de
Hilmes
.
Il
est
trs
haineux
,
se
met
en
colre
trs
rapidement
et
semble
ne
pas
tolrer
l'incomptence.
Il
est
trs
fidle
Hilmes.
Garshasph :
Baqhman :
~ 5
~
Les
lieux
:
-Forest
:
Fort
prs
de
la
plaine
d'Atropanes
(lieu
de
dpart
du
joueur
principal
:
vous)
-Baldad
:
premire
ville
rencontre
et
la
plus
florissante
en
terme
de
commerce.
-Common
Room
-Armory
-Castle
courtyard
-Secret
tunnel
-Kings
apartements
(tage
"east
upstairs"
-Throne
room
(tage
"north
upstairs")
-Dungeon
Les
items
:
-Silver
Mask
-
Arslans
sword
-Falcon
-Caravan
(magic-cookie)
Situation(s)
gagnante(s)
:
~ 6
~
Situation(s)
perdante(s)
:
Avoir
parmi
ses
allis
au
plus
de
2
Mazbharns
(gnraux)
lors
de
laffrontement
final.
~ 7
~
Deuxime
partie
:
Rponses
aux
exercices
du
projet
Il faut crer une String pour contenir les caractres qui seront taps au clavier :
String vLigne; .
de lui, en affichant quelque chose comme "Veuillez taper une commande : "
=>
On
comprend
ds
lors
que
la
classe
Scanner
nous
permet
de
rentrer
des
informations
au
clavier
que
la
machine
pourra
rcuprer
et
rutiliser.
-modification
de
la
mthode
CreateRooms()
dans
la
classe
Game
pour
crer
les
pices
de
jeu
en
remplaant
le
nom
des
pices
de
Zuulbad
par
les
notres
:
~ 8
~
Room vForest ;
7.
5.
printLocationInfo
w
Cration
d'une
procdure
printLocationInfo()
dans
la
classe
Game,
reprenant
le
code
prcdente.
7.
6.
getExit
w
Ajout
de
l'accesseur
getExit()
dans
la
classe
Room
afin
de
rduire
le
niveau
de
couplage.
7.
7.
getExitString
wModification
de
printLocationInfo()
:
System.out.print(aCurrentRoom.getExitString());
System.out.println();
~ 9
~
- if (getExit("west") != null)
- else
{vWest = "";}
7.
8.
HashMap,
setExit
w
Ajout
de
l'outil
HashMap
et
changements,
expliqus
dans
le
pdf,
apports.
On garde les directions nord ("North"), sud ("South"), est ("East"), ouest ("West").
7.
9.
keySet
w
La
mthode
keySet()
de
la
classe
HashMap
permet
d'accder
la
liste
de
toutes
les
cls
~ 10
~
-for
(String
exit
:
keys)
{returnString
+=
"
"
+
exit;}
//dclaration
dune
variable
locale
exit
prenant
comme
valeur
la
prochaine
cl
de
la
HashMap.
//
chaque
tour
de
la
boucle
for,
on
concatne
un
espace
et
la
valeur
de
exit
la
chane
de
caractres
returnString
-return
returnString
;
//on
finit
par
retourner
une
chane
de
caractre
par
exemple
:
Exits
:
north
east
west
7.11.
getLongDescription
wSelon
les
indications
expliqus
dans
le
pdf
:
on
ajoute
la
mthode
getLongDescription()
dans
la
classe
Room,
puis
on
modifie
la
mthode
printLocationInfo().
7.14.
look
wOn
ajoute
la
commande
look
dans
la
classe
CommandWord.
wOn
ajoute
galement
la
mthode
look()
dans
la
classe
Game
ainsi
que
else
if
(commandWord.equals(
look
))
{look()
;}
dans
la
classe
Game.
7.15.
eat
wOn
ajoute
la
commande
eat
dans
la
classe
CommandWord.
wOn
ajoute
galement
la
mhode
eat()
dans
la
classe
Game
ainsi
que
Else
if
(commandWord.equals(
eat
))
{eat()
;}
dans
la
mthode
interpretCommand()
de
la
classe
Game.
7.16.
showAll,
showCommands
wOn
effectue
les
changements
dcrits
dans
le
pdf.
~ 11
~
7.18.
getCommandsList
wOn
effectue
les
changements
suivants
:
Dans
la
classe
CommandWords
:
-On
transforme
la
mthode
showAll()
en
getCommandsList()
:
public
String
getCommandsList()
{
String
vCommands
=
;
For
(String
command
:
validCommands)
{
vCommands
+=
command
+
;
}
return
vCommands
;
}
Dans
la
classe
Parser
:
-On
modifie
de
la
procdure
void
showCommands()
en
String
showCommands():
public
String
showCommands()
{
return
commands.getCommandsList()
;
}
Dans
la
classe
Game
:
-On
modifie
la
mthode
printHelp()
:
parser.showCommands()
;System.out.println(parser.showCommands()
+
\n
;
~ 12
~
7.18.1.
Comparer
son
jeu
au
projet
zull-better
wDans
la
classe
Game
:
-Au
niveau
de
la
procdure
void
printLocationInfo()
:
void
printLocationInfo()
System.out.println(aCurrentRoom.getLongDescription())
;
dans
notre
classe
utilis
par
zuul-better
wAucun
changement
na
t
effectu
dans
les
autres
classes
en
comparaison
avec
zuul-
better.
7.18.6
Etudier
le
projet
zuul-with-images
wOn
modifie
le
projet
en
fonction
du
modle
de
zuul-with-images.
7.18.7.
addActionListener()
et
actionPerformed()
wDans
la
classe
UserInterface
:
Dans
la
mthode
createGUI()
:
On
initialise
la
variable
entryField
de
type
JtextField
(un
champ
servant
recueillir
du
texte)
comme
un
champ
de
34
caractres
:
entryField
=
new
JTextField(34);
On
ajoute
la
classe
UserInterface
la
liste
des
auditeurs
de
entryField.
C'est--dire
que
lorsqu'un
vnement
se
produira
sur
l'objet
entryField
(lorsque
l'on
validera
un
texte
entr
dans
le
champ),
la
mthode
de
signature
public
void
~ 13
~
actionPerformed(ActionEvent
e),
situe
dans
la
classe
UserInterface,
va
tre
invoque
automatiquement.
entryField.addActionListener(this);
Dans
la
mthode
actionPerformed()
:
Elle
est
appele
automatiquement
lorsque
entryField
est
stimul
et
consiste
appeler
la
mthode
processCommand()
situe
en
dessous.
7.18.8.
Ajouter
au
mois
un
bouton
Ajout
des
boutons
:
Look,
Help,
Quit,
North,
South,
East,
West,
Upstairs,
Downstairs,
UpstairsNorth,
UpstairsEast.
wDans
la
classe
UserInterface
:
-On
ajoute
dattributs
pour
chaque
bouton:
exemple,
private
JButton
aBoutHelp
;
Dans
la
mthode
createGUI()
:
-On
initialise
chaque
bouton
:
this.aBoutHelp
=
new
JButton("Help");
-On
place
le
premier
panel
qui
contient
limage
et
laffichage
dans
la
fentre
myFrame
(premire
colonne)
:
`
JPanel
vPanel1
=
new
JPanel();
this.aMyFrame.getContentPane().add(vPanel1,
BorderLayout.CENTER);
this.aImage
=
new
JLabel();
~ 14
~
-On
ajoute
un
deuxime
panel
pour
y
mettre
les
boutons
Help,
Quit,
Look
(1)
ces
derniers
sont
ajouts
dans
ce
panel-ci
(2)
puis
on
place
le
panel
dans
la
fentre
myFrame
(3):
JPanel
vPanel2
=
new
JPanel();
this.aMyFrame.getContentPane().add(vPanel2,
BorderLayout.EAST);
this.aBoutRegarder
=
new
JButton("look");
this.aBoutQuit
=
new
JButton("quit");
this.aBoutHelp
=
new
JButton("help");
vPanel2.setLayout(new
GridLayout(2,2));
vPanel2.add(this.aBoutQuit);
vPanel2.add(this.aBoutRegarder);
vPanel2.add(this.aBoutHelp);
-On
ajoute
un
troisime
panel
pour
y
mettre
les
boutons
de
directions
(1),
ces
derniers
sont
ajouts
dans
ce
panel-ci
(2)
puis
on
place
le
panel
dans
la
fentre
myFrame
(3)
:
JPanel
vPanel3
=
new
JPanel();
this.aMyFrame.getContentPane().add(vPanel3,
BorderLayout.SOUTH);
this.aBoutNorth
=
new
JButton("North");
this.aBoutSouth
=
new
JButton("South");
this.aBoutEast
=
new
JButton("East");
this.aBoutWest
=
new
JButton("West");
this.aBoutUpstairs
=
new
JButton("Upstairs");
this.aBoutDownstairs
=
new
JButton("Downstairs");
this.aBoutEastUpstairs
=
new
JButton("EastUpstairs");
~ 15
~
this.aBoutNorthUpstairs
=
new
JButton("NorthUpstairs");
vPanel3.setLayout(new
GridLayout(2,8));
vPanel3.add(this.aBoutNorth);
vPanel3.add(this.aBoutSouth);
vPanel3.add(this.aBoutEast);
vPanel3.add(this.aBoutWest);
vPanel3.add(this.aBoutUpstairs);
vPanel3.add(this.aBoutDownstairs);
vPanel3.add(this.aBoutEastUpstairs);
vPanel3.add(this.aBoutNorthUpstairs);
-Puis
on
ajoute
:
this.aBoutRegarder.addActionListener(this);
this.aBoutQuit.addActionListener(this);
this.aBoutHelp.addActionListener(this);
this.aBoutNorth.addActionListener(this);
this.aBoutSouth.addActionListener(this);
this.aBoutWest.addActionListener(this);
this.aBoutEast.addActionListener(this);
this.aBoutUpstairs.addActionListener(this);
this.aBoutDownstairs.addActionListener(this);
this.aBoutEastUpstairs.addActionListener(this);
this.aBoutNorthUpstairs.addActionListener(this);
~ 16
~
Dans
la
mthode
actionPerfomed()
:
-On
modifie
la
procdure
afin
de
diffrencier
les
diffrentes
sources
qui
dclencheront
lvnement
actionPerformed
selon
le
modle
suivant
:
if
(pE.getSource()
==
this.aBoutRegarder)
{
this.aEngine.interpretCommand("look");
}
/*
idem
pour
les
autres
boutons
*/
7.19.2.
Dplacer
toutes
les
images
wOn
cre
le
dossier
Images
la
racine
du
jeu.
wOn
change
le
chemin
des
noms
des
images
associes
aux
Rooms
dans
la
HashMap
sous
le
modle
suivant
:
Forest.gif
Images/Forest.gif
7.20.
Item
wOn
cre
la
classe
Item
de
la
sorte
:
public
class
Item
{
private
double
aWeightItem;
private
String
aDescriptionItem;
private
String
aImageItem
;
public
Item(final
double
pWeight,
final
String
pDescription,
final
String
pImageItem)
{
this.aWeightItem=
pWeight;
~ 17
~
this.aDescriptionItem=
pDescription;
this.aImageItem
=
pImageItem
;
}
//Item()//
public
String
getItemDescription()
{
return
aDescriptionItem;
}
public
double
getWeight()
{
return
aWeightItem;
}
public
String
getImageItem()
{
return
aImageItem
;
}
public
double
setWeight(final
double
pWeightItem)
{
return
this.aWeightItem
=
pWeightItem;
}
}
~ 18
~
wDans
la
classe
GameEngine
:
-On
cre
la
mthode
createItems()
:
Cration
des
items
du
jeu
:
Item
ArslanSword
=
new
Item(4,
ArslanSword)
;
Association
des
items
du
jeu
des
salles
:
this.allRooms.get(
take).addItem(
Arslans
sword
,
Arslans
sword)
;
-Dans
le
constructeur
GameEngine()
:
On
appelle
la
mthode
createItems().
7.21.
Item
Description
wDans
la
classe
Item
:
public
String
getLongItemDescription()
{
return
this.aDescriptionItem
+
""
+
this.aWeightItem;
}
wDans
la
classe
Room
:
-On
ajoute
la
mthode
getItemString()
pour
indiquer
au
joueur
les
items
qui
sont
prsents
suivant
la
pice
dans
laquelle
il
se
trouve.
public
String
getItemString()
{
return
this.aItem.getItemStrings
();
~ 19
~
}
-On
modifie
la
mthode
getLongDescription()
de
la
sorte
:
public
String
getLongDescription
()
{
return
"You
are
"
+
this.aDescription
+
".\n"
+
getExitString
()
+
".\n"
+
getItemString()
;
}//getLongDescription
7.22.
Items
wOn
utilise
une
HashMap
qui
associe
des
cls
String
(cest--dire
le
nom
de
litem)
des
valeurs
Item
(lobjet).
Par
exemple,
(
Arslans
sword,
Arslans
sword).
7.22.1
Justifier
le
choix
wOn
utilise
cette
HashMap
car
cela
nous
permettra
de
rechercher
plus
facilement
un
Item
en
fonction
de
son
nom,
si
besoin
est.
7.22.2
Intgrer
les
objets
(items)
wLes
items
suivants
sont
intgrs
dans
le
jeu
:
~ 20
~
7.23.
back
wDans
la
classe
GameEngine
:
-On
ajoute
lattribut
Room
aPreviousRoom.
-On
ajoute
dans
la
mthode
createRooms()
:
aPreviousRoom
=
aCurrentRoom
;
-On
ajoute
linstruction
aPrevious
=
aCurrentRoom
;
dans
la
mthode
goRoom().
-On
modifie
la
mthode
interpretCommand()
pour
prendre
back
en
compte
:
else
if
(commandWord.equals(
back
))
this.back(vCommand)
;
-On
ajoute
la
mthode
back()
:
private
void
back()
{
Room
vR
=
aCurrentRoom
;
aCurrentRoom
=
aPreviousRoom
;
aPreviousRoom
=
vR
;
this.aGui.println(
\n
+
aCurrentRoom.getLongDescription()
+
\n
)
;
if
(aCurrentRoom.getImageName()
!=
null)
{
this.aGui.showImage(aCurrentRoom.getImageName())
;
}
}
wDans
la
classe
CommandWords
:
-On
ajoute
back
dans
le
tableau
de
Strings
aValidCommands.
~ 21
~
7.26.
Stack
wDans
la
classe
GameEngine
:
-On
ajoute
lattribut
Stack<Room>
aPreviousRoom
-On
initialise
dans
le
constructeur
:
this.aPreviousRoom
=
new
Stack<Room>();
-On
ajoute
dans
la
boucle
if/else
de
la
mthode
goRoom()
:
this.aPreviousRoom.push(aCurrentRoom);
-On
modifie
la
mthode
back()
:
private
void
back()
{
if(this.aPreviousRoom.empty()
==
true)
{
aGui.println("You
can't
go
back...");
}
else{
Room
vLastRoom
=
this.aPreviousRoom.pop();
this.aCurrentRoom
=
vLastRoom;
this.aGui.println("\n"
+
aCurrentRoom.getLongDescription()
+
"\n");
if
(aCurrentRoom.getImageName()
!=null)
{
this.aGui.showImage(aCurrentRoom.getImageName());
}
}
}
~ 22
~
7.28.1
Crer
une
nouvelle
commande
test
wDans
la
classe
CommandWord
:
-On
ajoute
le
mot
test
dans
le
tableau
de
String.
wDans
la
classe
GameEngine
:
-On
importe
:
->
java.io.*
;
->
java.util.Scanner
;
-On
ajoute
dans
la
mthode
interpretCommand()
:
else
if
(vCmd.equals("test"))
{
this.test(vCommand);
}
-On
ajoute
la
mthode
test()
:
private
void
test(final
Command
pCommand)
{
if(pCommand.hasSecondWord()
==
false)
{
this.aGui.println("Which
file
do
you
want
to
test
my
dear
?");
}
else
{
String
vFile
=
pCommand.getSecondWord();
InputStream
vIS
=
this.getClass().getClassLoader().getResourceAsStream(vFile+".txt");
Scanner
vSc
=
new
Scanner
(
vIS
);
while
(vSc.hasNextLine()
)
{
String
vLine
=
vSc.nextLine();
~ 23
~
interpretCommand(vLine);
}
vSc.close();
}
}
7.29.
Player
wOn
dplace
la
pice
courante
dans
la
classe
Player.
Pour
linstant,
notre
player
possde
les
caractristiques
suivantes
:
son
nom,
sa
taille
dinventaire
dobjets
rcuprs
et
le
lieu
o
il
se
trouve.
Ces
caractristiques-ci
sont
par
la
suite
gres
dans
la
classe
Player
afin
de
ne
pas
surcharger
la
classe
GameEngine.
On
cre
un
objet
Player
au
dbut
du
jeu
pour
stocker
ces
donnes.
wCration
de
la
classe
Player
:
public
class
Player
{
private
String
aName;
public
Room
aCurrentRoom;
private
Stack
<Room>
aPreviousRooms;
private
double
aTotalWeight
;
public
Player(final
String
pName,
final
double
pMaxWeight)
{
this.aName
=
pName;
this.aPreviousRooms
=
new
Stack
<Room>
();
this.aTotalWeight=
pMaxWeight;
~ 24
~
}
//Player
public
Stack
<Room>
getBackRoom()
{
return
this.aPreviousRooms;
}
public
Room
getCurrentRoom()
{
return
this.aCurrentRoom;
}
public
String
getName()
{
return
this.aName;
}
public
void
setCurrentRoom(final
Room
pCurrentRoom)
{
this.aCurrentRoom=
pCurrentRoom;
}
public
void
setMaxWeight(final
double
pWeight)
{
aTotalWeight=
pWeight;
}
public
double
getMaxWeight()
{
return
aTotalWeight;
~ 25
~
}
}//
Player
wDans
GameEngine
:
-On
cre
lattribut
:
private
Player
aPlayer
;
-On
rajoute
dans
le
contructeur
la
mthode
createPlayer()
-On
cre
la
mthode
createPlayer()
:
private
void
createPlayer()
{
aPlayer
=
new
Player("Eliott",
50);
}
-On
modifie
dans
la
mthode
createRooms()
:
aPlayer.setCurrentRoom(vForest);
7.30.
Take
/
Drop
wDans
la
classe
CommandWords
:
-On
ajoute
take
et
drop
dans
le
tableau
de
Strings
aValidCommands.
wDans
la
classe
GameEngine
:
-On
modifie
la
mthode
interpretCommand()
pour
prendre
take
et
drop
en
compte
:
~ 26
~
else
if
(commandWord.equals(
take
))
this.take(vCommand)
;
else
if(commandWord.equals(
drop
))
this.drop()
;
-On
ajoute
les
mthodes
take()
et
drop()
:
private
void
take(final
Command
pCommand)
{
String
vCommand
=
pCommand.getSecondWord();
if
(!pCommand.hasSecondWord()){
this.aGui.println("Take
what?");
}
else
{
Item
vItem
=
this.aPlayer.getCurrentRoom().getItemList().getItem(vCommand);
double
aCurrentWeight
=+
vItem.getWeight();
if(this.aPlayer.getMaxWeight()
-
aCurrentWeight
<0)
this.aGui.println("This
is
too
heavy
!");
else
if
(vItem
==
null)
{
this.aGui.println("Item
doesn't
exist");
}
~ 27
~
else
if
(this.aPlayer.getCurrentRoom().getItemList().hasItem(vCommand)
)
{
this.aPlayer.setMaxWeight(this.aPlayer.getMaxWeight()-
vItem.getWeight());
this.aPlayer.getItemInv().addItem(vCommand,vItem);
this.aPlayer.getCurrentRoom().getItemList().removeItem(vCommand);
this.aGui.println
(this.aPlayer.getItemInv().getInventoryString()
+
".\n"
+this.aPlayer.getCurrentRoom().getLongDescription());
}
}
}
private
void
drop(final
Command
pCommand){
String
vCommand
=
pCommand.getSecondWord();
Item
vItem
=
this.aPlayer.getItemInv().getItem(vCommand);
if
(!pCommand.hasSecondWord())
{
aGui.println("Drop
what
?");
return;
}
else
if
(this.aPlayer.getItemInv().hasItem(vCommand)
)
{
this.aPlayer.setMaxWeight(this.aPlayer.getMaxWeight()
+
vItem.getWeight());
this.aPlayer.getItemInv().removeItem(vCommand);
this.aPlayer.getCurrentRoom().getItemList().addItem(vCommand,vItem);
~ 28
~
this.aGui.println
(this.aPlayer.getItemInv().getInventoryString()
+
".\n"
+this.aPlayer.getCurrentRoom().getLongDescription());
}
else
{
aGui.println("Item
doesn't
exist");
}
}
7.31.1.
Classe
ItemList
wCration
de
la
classe
ItemList
:
import
java.util.ArrayList;
import
java.util.HashMap;
public
class
ItemList
{
private
HashMap
<String,
Item>
aCollection;
private
ArrayList
<Item>
aListe;
public
ItemList()
{
this.aCollection
=
new
HashMap
<String,
Item>
();
this.aListe
=
new
ArrayList
<Item>
();
}
//ItemList()
public
String
getItemStrings
()
~ 29
~
{
StringBuilder
returnString
=
new
StringBuilder(
"Items:"
);
for
(
String
vA
:
aCollection.keySet()
)
returnString.append(
"
"
+
vA
);
return
returnString.toString();
}
public
Item
getItem
(final
String
pName)
{
return
aCollection.get(pName);
}
public
void
addItem
(final
String
pName,final
Item
pItem)
{
aCollection.put(pName,pItem);
}
public
void
removeItem
(final
String
pName)
{
aCollection.remove(pName);
}
}
//
ItemList
wDans
la
classe
Player
:
-On
cre
lattribut
:
private
ItemList
aInventory;
-On
ajoute
la
mthode
getItemInv()
:
public
ItemList
getItemInv()
{
~ 30
~
return
this.aInventory
;
}
-On
modifie
lemplacement
des
objets
dans
les
salles
par
:
vBaldad.getItemList().addItem("Falcon",
vFalcon);
7.32.
Poids
Max
Dj
fait
prcdemment
dans
la
classe
Player
et
dans
la
classe
GameEngine
(mthode
take()).
7.33.
Inventaire
wDans
la
classe
CommandWords
:
- On
ajoute
inventory
dans
le
tableau
de
Strings
aValidCommands.
wDans
la
classe
GameEngine
:
-
On
modifie
la
mthode
interpretCommand()
pour
prendre
inventory
en
compte
:
else
if
(commandWord.equals(
inventory
))
this.inventory()
;
wDans
la
classe
ItemList
:
-On
ajoute
la
mthode
getInventoryString
pour
retourner
une
description
dtaille
de
linventaire
:
~ 31
~
public
String
getInventoryString
()
{
StringBuilder
returnString
=
new
StringBuilder(
"You've
got"
);
for
(
String
vA
:
aCollection.keySet()
){
returnString.append(
"
"
+
vA);
for(Item
vB:
aCollection.values())
returnString.append(""
+
vB);
}
return
returnString.toString();
}
7.34.
magic
cookie
wDans
la
classe
GameEngine
:
-On
cre
dans
la
mthode
createRooms()
un
nouvel
item
(cookie)
:
Item
Caravan
=
new
Item(1,
"Caravan");
magicCookie.setEdible(true);
-On
le
place
ensuite
dans
une
salle
:
vBaldad.getItemList().addItem("Caravan",
magicCookie);
-On
modifie
dans
la
mthode
interpretCommand()
la
gestion
du
mot
de
commande
eat
afin
de
grer
un
second
mot
dans
la
mthode
eat()
:
else
if
(commandWord.equals(
inventory
))
this.eat(vCommand)
;
~ 32
~
-On
modifie
la
mthode
eat()
de
la
sorte
:
private
void
eat()
{
if(!
pCommand.hasSecondWord())
{
this.aGui.println("Eat
what
?");
return;
}
String
vName
=
pCommand.getSecondWord();
if(!
aPlayer.getItemInv().hasItem(vName))
{
this.aGui.println("You
have
not
any
"
+
vName);
return;
}
Item
vItem
=
aPlayer.getItemInv().getItem(vName);
if(!
vItem.isEdible())
{
this.aGui.println("You
can't
eat
"
+
vName);
}
this.aPlayer.getItemInv().removeItem(vName);
this.aGui.println("You
have
"
+
vName);
if(
vName.equals("Caravan"))
{
this.aPlayer.setMaxWeight(aPlayer.getMaxWeight()
+
1000);
this.aGui.println("You
can
now
wear
more
items");
~ 33
~
}
}
wDans
la
classe
Item
:
-On
cre
lattribut
suivant
:
private
boolean
aEdible
;
-On
rajoute
dans
le
constructeur
:
this.aEdible=
false;
-On
ajoute
deux
nouvelles
mthodes
isEdible()
et
setEdible()
;
public
boolean
isEdible()
{
return
aEdible;
}
public
void
setEdible(final
boolean
pEdible)
{
this.aEdible
=
pEdible;
}
wDans
la
classe
ItemList
:
-On
ajoute
la
mthode
hasItem()
:
public
boolean
hasItem(final
String
pName)
{
~ 34
~
return
aCollection.containsKey(pName);
}
7.34.1.
Mise
jour
des
fichiers
de
test
look
take
Caravan
eat
eat
Caravan
help
back
inventory
take
ArslanSword
go
North
drop
ArslanSword
7.35.
zuul-with-enums-v1
wOn
modifie
le
projet
en
fonction
du
modle
de
zuul-with-enums-v1.
7.35.1.
Switch
wDans
la
classe
GameEngine
:
-On
implmente
le
switch
pour
remplacer
la
suite
de
if/else
if
:
switch
(vCommandWord)
{
case
HELP:
printHelp();
~ 35
~
break;
case
GO:
goRoom(vCommand);
break;
case
QUIT:
if
(vCommand.hasSecondWord())
{
this.aGui.println("Quit
what
?");
}//if
else
this.endGame();
break;
case
LOOK:
look();
break;
case
EAT:
eat(vCommand);
break;
case
BACK:
back();
break;
case
TEST:
test(vCommand);
break;
case
TAKE:
take(vCommand);
break;
case
DROP:
drop(vCommand);
break;
case
INVENTORY:
inventory();
break;
~ 36
~
case
TELEPORT:
teleport(vCommand);
break;
case
LOAD:
load(vCommand);
break;
default:
this.aGui.println("I
don't
know
what
you
mean...");
break;
}
7.41.1.
zuul-with-enums-v2
wDans
lenum
CommandWords
:
-On
ajoute
les
valeurs
de
type
String
sur
le
modle
:
GO("go"),
QUIT("quit"),
HELP("help"),
UNKNOWN("?"),
LOOK("look"),
EAT("eat"),
BACK("back"),
TEST("test"),
TAKE("take"),
DROP("drop"),
INVENTORY("inventory")
;
-On
ajoute
le
constructeur
CommandWord()
ainsi
que
la
mthode
toString()
explicits
dans
le
projet
zuul-with-enums-v2
:
CommandWord(final
String
pCommandString)
{
this.aCommandString
=
pCommandString;
}
~ 37
~
public
String
toString()
{
return
aCommandString;
}
wDans
la
classe
CommandWords
:
-On
remplace
dans
le
constructeur
CommandWords()
la
suite
de
.put()
par
la
boucle
for
comme
dcrite
dans
le
modle.
7.42.
Time
Limit
wDans
la
classe
GameEngine
:
-On
ajoute
un
attribut
:
private
int
aLimit
;
-On
cre
lobjet
dans
le
constructeur
:
this.aLimit
=
100
;
-On
ajoute
dans
la
mthode
goRoom()
:
aLimit
--;
this.aGui.setTimer(""
+
aLimit);
if(aLimit
<=
0)
{
this.aGui.println("Your
crusade
is
over,
young
prince.");
this.endGame();
aTimer.stop();
}
~ 38
~
7.42.1.
Time
Limit
with
Timer
wDans
la
classe
GameEngine
:
-On
ajoute
:
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
javax.swing.Timer
;
-On
cre
lattribut
:
private
Timer
aTimer
;
-On
ajoute
dans
le
constructeur
:
this.aTimer
=
new
Timer(1000,
this)
;
this.aTimer.start()
;
-On
ajoute
galement
dans
la
mthode
setGui(UserInterface
pUserInterface)
:
this.aGui.setTimer
(
+
aLimit)
;
-On
supprime
de
la
mthode
goRoom()
:
aLimit
--;
this.aGui.setTimer(""
+
aLimit);
if(aLimit
<=
0)
{
this.aGui.println("Your
crusade
is
over,
young
prince.");
this.endGame();
aTimer.stop();
~ 39
~
}
-On
cre
une
nouvelle
mthode
:
@Override
public
void
actionPerformed(
ActionEvent
pE)
{
aLimit
--;
this.aGui.setTimer(""
+
aLimit);
if(aLimit
<=
0)
{
this.aGui.println("Your
crusade
is
over,
young
prince.");
this.endGame();
aTimer.stop();
}
}
wDans
la
classe
UserInterface
:
-On
ajoute
lattribut
suivant
:
private
JtextArena
log,
aTimer
;
-On
ajoute
la
mthode
setTimer()
:
public
void
setTimer(String
pText)
{
aTimer.setText(pText);
}
-On
ajoute
dans
la
mthode
createGUI()
:
aTimer
=
new
JtextArea()
;
aTimer.setEditable(false)
;
vPanel1.add(aTimer,
BorderLayout.EAST)
~ 40
~
7.43.
Trap
Door
wDans
la
classe
GameEngine
:
-On
modifie
le
else
de
la
mthode
back()
de
la
faon
suivante
:
else{
if(aPlayer.getCurrentRoom().getTrapRoom())
{
this.aGui.println("You
can
go
back
anymore...
you
must
defeat
Hilmes
before
backup
arrive");
}
else{
Room
vLastRoom
=
this.aPreviousRoom.pop();
this.aPlayer.aCurrentRoom
=
vLastRoom;
this.aGui.println("\n"
+
aPlayer.aCurrentRoom.getLongDescription()
+
"\n");
if
(aPlayer.aCurrentRoom.getImageName()
!=null)
{
this.aGui.showImage(aPlayer.aCurrentRoom.getImageName());
}
}
}
wDans
la
classe
Room
:
~ 41
~
-On
ajoute
:
import
java.util.Set;
private
boolean
aTrapRoom;
-On
cre
un
accesseur
getTrapRoom()
et
un
modificateur
setTrapRoom()
:
public
boolean
getTrapRoom()
{
return
aTrapRoom;
}
public
void
setTrapRoom(final
boolean
pTrapRoom)
{
this.aTrapRoom
=
pTrapRoom;
}
7.44.
Beamer
wCration
dune
classe
Beamer
qui
hrite
de
la
classe
Item
:
public
class
Beamer
extends
Item
{
private
Room
aSavedRoom;
private
boolean
aLoaded;
public
Beamer(final
double
pWeight,
final
String
pDescription)
{
super(pWeight,
pDescription);
aLoaded
=
false;
~ 42
~
}
public
Room
getSavedRoom()
{
return
aSavedRoom;
}
public
void
setSavedRoom(final
Room
pSavedRoom)
{
this.aSavedRoom
=
pSavedRoom;
}
public
boolean
isLoaded()
{
return
aLoaded;
}
public
void
setLoaded(final
boolean
pLoaded)
{
this.aLoaded
=
pLoaded;
}
}
wDans
la
classe
GameEngine
:
-On
ajoute
une
mthode
load()
et
une
mthode
teleport()
de
la
faon
suivante
:
public
void
load(final
Command
pCommand)
~ 43
~
{
Room
vRoomLoad
=
aPlayer.getCurrentRoom();
Item
vItem
=
aPlayer.getItemInv().getItem("beamer");
if(!
pCommand.hasSecondWord())
{
this.aGui.println("\n"
+
"What
do
you
want
to
load
?");
}//if
else
{
if(
pCommand.getSecondWord().equals("beamer"))
{
if(vItem
==
null)
{
this.aGui.println("\n"
+
"You
don't
have
the
teleporter
with
you.");
}
else
{
try{
vItem
=
(Beamer)
vItem;}
catch
(final
Exception
ClassCastException)
{this.aGui.println("\n"
+
"This
isn't
a
teleporter");
return;
}//catch
Beamer
vBeamer
=
(Beamer)
vItem;
vBeamer.setSavedRoom(vRoomLoad);
vBeamer.setLoaded(true);
this.aGui.println("The
item
which
is
loaded
in
the
teleporter
is
:
"
+
aPlayer.getCurrentRoom().getLongDescription());
}//else
}//if
~ 44
~
else
{
this.aGui.println("You
don't
have
this
on
you.");
}//else
}//else
}//load
public
void
teleport(final
Command
pCommand)
{
Item
vItem
=
aPlayer.getItemInv().getItem("beamer");
if(vItem
==
null)
{
this.aGui.println("You
don't
have
a
teleporter
with
you.");
}
else
{
try{
vItem
=
(Beamer)
vItem;
}
catch
(final
Exception
ClassCastException)
{
this.aGui.println("This
item
isn't
a
teleporter.");
return;
}
Beamer
vBeamer
=
(Beamer)
vItem;
if(!vBeamer.isLoaded())
{
this.aGui.println("The
teleporter
wasn't
loaded.");
}
~ 45
~
else
{
this.aPlayer.setCurrentRoom(vBeamer.getSavedRoom());
this.aPlayer.getCurrentRoom().getLongDescription();
this.aGui.showImage(this.aPlayer.getCurrentRoom().getImageName());
}
}
}
wDans
enum
CommandWords
:
-On
ajoute
la
valeur
teleport
et
load
de
type
String
:
...TELEPORT("teleport"),
LOAD("load")
;
7.45.1.
Fichiers
de
Test
look
take
Caravan
eat
eat
Caravan
help
back
inventory
take
ArslanSword
go
North
drop
ArslanSword
load
teleport
load
beamer
quit
~ 46
~
7.46.
TransporterRoom
wCration
de
la
classe
TransporterRoom
:
import
java.util.HashMap;
import
java.util.ArrayList;
public
class
TransporterRoom
extends
Room
{
private
HashMap<String,
Room>
aRooms;
private
ArrayList<Room>
aArrayInRooms;
private
RoomRandomizer
aRandomRoom;
public
TransporterRoom(final
String
pDescription,
String
pImage,
final
HashMap<String,
Room>
pRooms)
{
super(pDescription,
pImage);
this.aRooms
=
pRooms;
this.aArrayInRooms
=
new
ArrayList<Room>();
for(Room
vA
:
aRooms.values())
{
aArrayInRooms.add(vA);
}
}
@Override
public
Room
getExit(final
String
pDirection)
{
this.aRandomRoom
=
new
RoomRandomizer();
int
vI
=
aRandomRoom.nextRoom(aRooms.size());
return
this.aArrayInRooms.get(vI);
}
}
~ 47
~
wCration
de
la
classe
RoomRandomizer
:
import
java.util.Random;
public
class
RoomRandomizer
{
private
Random
aRandom;
public
RoomRandomizer()
{
this.aRandom
=
new
Random();
}
public
int
nextRoom(final
int
pRoom)
{
return
aRandom.nextInt(pRoom);
}
}
wDans
la
classe
GameEngine
:
-On
modifie
dans
la
mthode
createRooms()
la
pice
qui
va
envoyer
le
joueur
dans
une
pice
alatoire
de
la
map
:
TransporterRoom
vThroneRoom=
new
TransporterRoom("in
Ectabana,
you're
in
the
throne
room",
"Images/Throne's
room.jpg",
aRooms);
-On
ajoute
une
instruction
telle
que
la
pice
dans
laquelle
le
joueur
sera
envoy
par
la
pice
nouvellement
renomme
TransporterRoom
:
aRooms.put("vEctabana1",
vCastleCourtyard);
~ 48
~
7.47.
Abstract
command
wDans
la
classe
Command
:
-On
modifie
la
classe
Command
de
telle
sorte
quelle
soit
une
classe
abstraite.
-On
ajoute
la
mthode
abstraite
:
public
abstract
void
execute(final
Player
pPlayer)
;
-On
supprime
lattribut
:
private
CommandWord
aCommandWord
;
-On
supprime
les
paramtres
du
constructeur
:
public
Command(){
}
-On
modifie
la
mthode
isUnknown()
:
public
void
setSecondWord(final
String
pSecondWord)
{
this.aSecondWord
=
pSecondWord
;
}
wPour
chaque
commande,
cration
dune
classe
qui
hrite
de
Command
:
-Ainsi
chaque
classe
sera
de
la
forme
:
public
class
QuitCommand
extends
Command
{
public
QuitCommand(){
}
~ 49
~
@Override
public
boolean
execute(final
Player
pPlayer)
{
GameEngine.aGui.println("Thanks
to
play.
See
you
soon.");
GameEngine.aGui.enable(false);
return
true;
}
}
wLa
mthode
execute()
remplace
chaque
mthode
spcifique
sa
commande
:
GameEngine
execute()
Au
paramtre
command
this.
Lattribut
aPlayer
pPlayer
this.aGui.println()
GameEngine.aGui.println
wDans
la
classe
GameEngine
:
-On
a
dplac
les
mthodes
goRoom(),
help(),
quit(),
back(),
look(),
eat(),
take(),
drop(),
load(),
teleport(),
test(),
inventory()
dans
les
mthodes
execute()
de
leurs
classes
respectives
(GoCommand,
HelpCommand,
QuitCommand
etc...)
-On
modifie
la
mthode
interpretCommand()
:
public
static
void
interpretCommand(final
String
pCommandLine)
{
aGui.println(pCommandLine);
~ 50
~
Command
vCommand
=
aParser.getCommand(pCommandLine);
if(vCommand
==
null)
{
aGui.println("I
don't
know
what
you
mean...");
}
else{
vCommand.execute(pPlayer);
}
aGui.print("\n");
}//processCommand
wDans
lenum
CommandWord
:
-On
modifie
les
lments
de
lenum
de
la
faon
suivante
:
GO("go",
new
GoCommand()),
-On
modifie
ds
lors
le
constructeur
:
CommandWord(final
String
pCommandString,
final
Command
pCommand)
{
this.aCommandString
=
pCommandString;
this.aCommand
=
pCommand;
}
-On
ajoute
un
accesseur
getCommand()
:
public
Command
getCommand()
{
~ 51
~
return
this.aCommand;
}
wDans
la
classe
CommandWords
:
-On
ajoute
un
attribut
:
private
HashMap<String,
Command>
aValidCommands;
-On
modifie
le
contructeur
:
public
CommandWords()
{
aValidCommands
=
new
HashMap<String,
Command>();
for(CommandWord
vCommand
:
CommandWord.values())
{
if(vCommand
!=
CommandWord.UNKNOWN){
aValidCommands.put(vCommand.toString(),
vCommand.getCommand());
}
}
}
//
CommandWords()
-On
ajoute
la
mthode
get()
dcrite
dans
le
zuul-even-better
:
public
Command
get(final
String
pCommandWord)
{
return
(Command)aValidCommands.get(pCommandWord);
}
wDans
la
classe
Parser
:
-On
modifie
la
fin
de
la
mthode
getCommand()
:
public
Command
getCommand(String
inputLine)
{
~ 52
~
String
word1
=
null;
String
word2
=
null;
Scanner
tokenizer
=
new
Scanner(inputLine);
if(tokenizer.hasNext()){
word1
=
tokenizer.next();
if(tokenizer.hasNext()){
word2
=
tokenizer.next();
}
}
Command
vCommand
=
aValidCommands.get(word1);
if(vCommand
!=
null)
{
vCommand.setSecondWord(word2);
}
return
vCommand;
}
7.47.1.
Paquetages
wCration
de
5
paquetages
:
- pkg_mechanics
qui
contient
les
classes
GameEngine
et
UserInterface
,
- pkg_commands
qui
contient
les
classes
CommandWord,
CommandWords,
Command,
Parser,
GoCommand,
HelpCommand...
- pkg_items
qui
contient
les
classes
Item,
Beamer
et
ItemList,
- pkg_characters
qui
contient
la
classe
Player
- pkg_rooms
qui
contient
les
classes
RoomRandomizer,
Room
et
TransporterRoom.
~ 53
~
7.48.
Character
wCration
de
la
classe
Characters
:
public
class
Characters
{
private
String
aNameCharacters;
private
String
aTalk;
public
Characters(final
String
pNameCharacters,
final
String
pTalk)
{
this.aNameCharacters
=
pNameCharacters;
this.aTalk
=
pTalk;
}
public
String
getNameCharacters()
{
return
this.aNameCharacters;
}
public
String
getTalk()
{
return
this.aTalk;
}
}
~ 54
~
wDans
la
classe
Room
:
-On
ajoute
un
attribut
:
private
Characters
aCharacters;
-On
ajoute
dans
le
constructeur
:
this.aCharacters
=
new
Characters(null,
null);
-On
ajoute
les
mthodes
addCharacters()
et
getCharacters()
public
void
addCharacters(final
Characters
pCharacters)
{
this.aCharacters
=
pCharacters;
}
public
Characters
getCharacters()
{
return
aCharacters;
}
wDans
la
classe
GameEngine
:
-On
cre
tous
les
characters
de
la
faon
suivante
:
Characters
vHilmes
=
new
Characters("Hilmes
",
"Arslan...The
humiltation
and
hardship
that
I
have
suffered
to
this
day...I
will
make
sure
that
you
suffer
the
same
as
I
have!"
);
-On
les
implmente
dans
leur
pice
:
vThroneRoom.addCharacters(vHilmes);
~ 55
~
IV.
Dclaration
obligatoire
anti-plagiat
wA
Axel
Aboyeji
pour
lemprunt
de
code
aux
exercices
7.32
(Poids
Max)
et
7.46
(classes
TransporterRoom
et
RoomRandomizer).
wA
Nicolas
hahn
pour
lemprunt
de
code
suivant
au
niveau
de
la
boucle
else
if(mais
avec
quelques
modifications
de
ma
part)
:
...
else
if
(!vCharacters.getNameCharacters().equals(getSecondWord()))
{
GameEngine.aGui.println("There
is
no
one
who's
named
"
+
getSecondWord());
}
else{
GameEngine.aGui.println(vCharacters.getTalk());
}
}
return
false;
}//else
}//TalkCommand
~ 56 ~