Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Socket_TCP_mastermind
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CHERCHEM Sarah
Socket_TCP_mastermind
Commits
e1e7eb4a
Commit
e1e7eb4a
authored
3 months ago
by
Sarah CHERCHEM
Browse files
Options
Downloads
Patches
Plain Diff
Client : ajout des méthodes initiales de Client
parent
04741a0e
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/Client.java
+93
-0
93 additions, 0 deletions
src/Client.java
src/Code.java
+74
-0
74 additions, 0 deletions
src/Code.java
src/server.java
+4
-0
4 additions, 0 deletions
src/server.java
with
171 additions
and
0 deletions
src/Client.java
0 → 100644
+
93
−
0
View file @
e1e7eb4a
package
src
;
import
java.io.*
;
import
java.net.*
;
import
java.util.Scanner
;
public
class
Client
{
private
static
final
String
SERVER_ADDRESS
=
"localhost"
;
private
static
final
int
PORT
=
1234
;
private
Socket
socket
;
private
BufferedReader
in
;
private
PrintWriter
out
;
private
Scanner
scanner
;
public
Client
()
{
scanner
=
new
Scanner
(
System
.
in
);
}
public
void
connect
()
{
try
{
socket
=
new
Socket
(
SERVER_ADDRESS
,
PORT
);
in
=
new
BufferedReader
(
new
InputStreamReader
(
socket
.
getInputStream
()));
out
=
new
PrintWriter
(
socket
.
getOutputStream
(),
true
);
System
.
out
.
println
(
"Connecté au serveur Mastermind !"
);
play
();
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"Erreur de connexion au serveur : "
+
e
.
getMessage
());
}
finally
{
closeConnection
();
}
}
private
void
play
()
{
while
(
true
)
{
String
guess
=
getUserInput
();
if
(
guess
==
null
)
continue
;
sendGuess
(
guess
);
String
response
=
receiveResponse
();
if
(
response
==
null
)
{
System
.
out
.
println
(
"Connexion fermée par le serveur."
);
break
;
}
System
.
out
.
println
(
"Réponse du serveur : "
+
response
);
if
(
response
.
equals
(
"4 0"
))
{
System
.
out
.
println
(
"Félicitations ! Vous avez trouvé la bonne combinaison !"
);
break
;
}
}
}
private
String
getUserInput
()
{
System
.
out
.
print
(
"Entrez une combinaison (4 lettres parmi B,G,O,R,W,Y) : "
);
String
input
=
scanner
.
nextLine
().
toUpperCase
();
if
(!
input
.
matches
(
"[BGORWY]{4}"
))
{
System
.
out
.
println
(
"Combinaison invalide, veuillez entrer exactement 4 lettres parmi B, G, O, R, W, Y."
);
return
null
;
}
return
input
;
}
private
void
sendGuess
(
String
guess
)
{
out
.
println
(
guess
);
}
private
String
receiveResponse
()
{
try
{
return
in
.
readLine
();
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"Erreur de lecture du serveur : "
+
e
.
getMessage
());
return
null
;
}
}
private
void
closeConnection
()
{
try
{
if
(
socket
!=
null
)
socket
.
close
();
if
(
in
!=
null
)
in
.
close
();
if
(
out
!=
null
)
out
.
close
();
scanner
.
close
();
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"Erreur lors de la fermeture des ressources : "
+
e
.
getMessage
());
}
}
public
static
void
main
(
String
[]
args
)
{
new
Client
().
connect
();
}
}
This diff is collapsed.
Click to expand it.
src/Code.java
+
74
−
0
View file @
e1e7eb4a
package
src
;
import
java.util.Random
;
public
class
Code
{
public
static
final
int
CODE_LENGTH
=
4
;
public
static
char
[]
COLORS
=
new
char
[]{
'B'
,
'G'
,
'O'
,
'R'
,
'W'
,
'Y'
};
private
final
char
[]
codeWord
=
new
char
[
CODE_LENGTH
];
public
Code
(
Random
random
){
for
(
int
i
=
0
;
i
<
CODE_LENGTH
;
i
++)
{
codeWord
[
i
]
=
COLORS
[
random
.
nextInt
(
COLORS
.
length
)];
}
}
public
Code
(
String
codeString
){
assert
(
codeString
.
length
()
==
CODE_LENGTH
);
for
(
int
i
=
0
;
i
<
CODE_LENGTH
;
i
++)
codeWord
[
i
]
=
codeString
.
charAt
(
i
);
}
@Override
public
String
toString
()
{
return
new
String
(
codeWord
);
}
/**
* return the number of colors of guess that are correctly positioned
*/
public
int
numberOfColorsWithCorrectPosition
(
Code
guess
){
int
count
=
0
;
for
(
char
color
:
COLORS
){
count
+=
numberOfMatches
(
color
,
guess
);
}
return
count
;
}
/**
* return the number of colors of guess that are in this codeWord
* but do not have the correct position
*/
public
int
numberOfColorsWithIncorrectPosition
(
Code
guess
){
int
count
=
0
;
for
(
char
color:
COLORS
){
int
nMatchedOccurrences
=
numberOfMatches
(
color
,
guess
);
int
nUnmatchedOccurrencesCode
=
numberOfOccurrences
(
color
,
this
)
-
nMatchedOccurrences
;
int
nUnmatchedOccurrencesGuess
=
numberOfOccurrences
(
color
,
guess
)
-
nMatchedOccurrences
;
count
+=
Math
.
min
(
nUnmatchedOccurrencesCode
,
nUnmatchedOccurrencesGuess
);
}
return
count
;
}
private
int
numberOfOccurrences
(
char
color
,
Code
code
){
int
count
=
0
;
for
(
int
i
=
0
;
i
<
CODE_LENGTH
;
i
++)
{
if
(
code
.
codeWord
[
i
]
==
color
)
count
++;
}
return
count
;
}
private
int
numberOfMatches
(
char
color
,
Code
guess
){
int
count
=
0
;
for
(
int
i
=
0
;
i
<
CODE_LENGTH
;
i
++)
{
if
((
this
.
codeWord
[
i
]
==
guess
.
codeWord
[
i
])
&&
(
this
.
codeWord
[
i
]
==
color
)){
count
++;
}
}
return
count
;
}
@Override
public
boolean
equals
(
Object
o
){
if
(
o
==
null
)
return
false
;
if
(!(
o
instanceof
Code
))
return
false
;
return
this
.
toString
().
equals
(
o
.
toString
());
}
}
This diff is collapsed.
Click to expand it.
src/server.java
0 → 100644
+
4
−
0
View file @
e1e7eb4a
package
src
;
public
class
server
{
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment