Commit f14a19e2 authored by Victor BARRETEAU's avatar Victor BARRETEAU
Browse files

Initial commit

parents
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="lib" level="project" />
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.4.2/junit-jupiter-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.4.2/junit-jupiter-api-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.4.2/junit-platform-commons-1.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.4.2/junit-jupiter-params-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.4.2/junit-jupiter-engine-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.4.2/junit-platform-engine-1.4.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
\ No newline at end of file
<component name="libraryTable">
<library name="lib">
<CLASSES>
<root url="file://$PROJECT_DIR$/lib" />
</CLASSES>
<JAVADOC />
<SOURCES />
<jarDirectory url="file://$PROJECT_DIR$/lib" recursive="false" />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/battleship-student-project-2021.iml" filepath="$PROJECT_DIR$/.idea/battleship-student-project-2021.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
# Projet S2 : Bataille Navale
![French_battleship_Brennus_NH_64443](img/French_battleship_Brennus_NH_64443.jpg)
## Présentation rapide
Il va s'agir de développer une application cliente permettant de jouer
en réseau à la bataille navale : https://fr.wikipedia.org/wiki/Bataille_navale_(jeu)
Un serveur de jeu est accessible en ligne sous la forme d'une API Rest
(http://37.187.38.219/api/v0) et une librairie Java
interfaçant le serveur vous est fournie (en partie).
**En cas de questions / bugs / etc. privilégiez les _issues_ de ce dépôt git.**
## Travail à faire
### initialisation du projet
1. créez un git spécifique à votre groupe sur le gitlab de l'université :
https://gitlab.univ-nantes.fr/ avec la convention de nommage suivante :
`projetS2-2021-NUM_GROUPE-INITIALES_ENSEIGNANT` ; `exemple projetS2-03-AL`
2. ajoutez comme "maintainer" votre enseignant-référent et M. Arnaud Lanoix
3. déposez sur votre git, l'ensemble des sources récupérées ici :
https://gitlab.univ-nantes.fr/iut.info1.project/battleship-student-project-2021/-/archive/master/battleship-student-project-2021-master.zip
OU faites un fork de ce dépot.
**Vous respecterez la structure imposée en terme de dossiers/paquetages**
NB :le source récupéré contient un repertoire lib/
contenant une archive jar `battleship-library-1.x.jar`
il faut ajouter ce .jar comme une librairie dans votre IDE préféré
il s'agit de code qui vous est fourni, que vous devrez utiliser
mais que vous ne pouvez pas modifier
### implémentation de `ships.*`
2. il vous faut (terminer de) développer le modèle de données représentant
la flotte de bateaux ; pour cela, il vous faut coder
les classes suivantes (dans `src/info1/ships/`) :
* `Coord` implémentant `ICoord`
* `Ship` implémentant `IShip` et (si nécessaire) modifier les classes "filles" fournies
* `NavyFleet` implémentant `INavyFleet`
Les interfaces à implémenter sont présentes dans `battleship-library-1.x.jar` ;
elles sont sont documentées dans la javadoc fournie (documentation/javadoc).
NB :des cas de tests écrit en Junit 5.4 vous
permettront de valider votre implémentation :
* `CoordTest`
* `NavyFleetTest`
* `ShipTest`
![package ships](documentation/package_ships.png)
### utilisation de `info1.network.Network` ...
vous pouvez maintenant utiliser la classe `Network` pour échanger avec le serveur,
càd créer ou rejoindre une partie, puis jouer, càd effectuer un tir
sur une coordonnée précise.
![package network](documentation/package_network.png)
La classe `Network` est documentée dans la javadoc fournie (documentation/javadoc).
Plus de détail sur l'usage de la classe Network dans ![HowToUseNetwork](documentation/HowtoUseNetwork.md).
La classe de tests `RunningGameTest` illustre également l'utilisation de `info1.network.Network` ; elle devrait
fonctionner une fois que vous avez correctement implémenter les classes du package `ships.*`.s
### ... et développement d'une interface graphique
Développez une interface graphique en Swing vous permettant de jouer, cad
1. positionner des bateaux
2. créer une flotte de bateaux
3. initialiser une partie sur le serveur
4. rejoindre une partie initialisée sur le serveur
5. jouer via le serveur
6. gagner ;-)
## Remarques
Chaque groupe aura un enseignant-référent qui passera
vous voir régulièrement afin de vous assister
mais aussi évaluer votre travail.
_Image du bateau issue de https://en.wikipedia.org/wiki/French_battleship_Brennus_
# Documentation de **Network**
La serveur de jeu est un serveur REST disponible à l'adresse suivante :
http://37.187.38.219/api/v0
La logique d'échange est la suivante :
## 1ere phase : initialisation
Des joueurs s'inscrivent sur le serveur via
`Network.suscribeNewPlayer(...)`
On peut lister les joueurs déjà inscrits via
`Network.listActivePlayers(...)`
Des joueurs initient des parties sur le serveur via
`Network.initNewGame(...)`
On peut lister les parties initialisées via
`Network.listInitializedGames(...)`
Un joueur peut rejoindre une partie initialisée
`Network.joinGame(...)`
alors la phase de jeu commence...
## 2ième phase : dérouler d'une partie
A tour de rôle les deux joueurs de la partie vont pouvoir jouer.
Avant de jouer, il faut vérifier l'état de la partie via
`Network.getInfo(...)`
Puis on peut jouer si c'est à notre tour via
`Network.playOneTurn(...)`
## Les limitations du serveur sont les suivantes
* le joueur qui a initialisé une partie ne sera pas prévenu qu'un joueur
a rejoint sa partie ;
* lorsqu'un joueur a joué l'autre joueur n'est pas prévenu que c'est
à son tour de jouer ;
* lorsqu'un joueur touche (ou coule) un navire adverse,
l'autre joueur n'est pas prévenu ;
* lorsqu'un joueur gagne la partie, l'autre joueur n'est pas
prévenu non plus.
**NB : il faut utiliser `Network.getInfo(...)` pour s'informer
périodiquement de l'état courant de la partie**
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_265) on Fri Jun 18 17:16:24 CEST 2021 -->
<title>All Classes</title>
<meta name="date" content="2021-06-18">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="info1/ships/BadCoordException.html" title="class in info1.ships" target="classFrame">BadCoordException</a></li>
<li><a href="info1/network/BadIdException.html" title="class in info1.network" target="classFrame">BadIdException</a></li>
<li><a href="info1/ships/CoordsBadShipException.html" title="class in info1.ships" target="classFrame">CoordsBadShipException</a></li>
<li><a href="info1/network/Game.html" title="class in info1.network" target="classFrame">Game</a></li>
<li><a href="info1/ships/ICoord.html" title="interface in info1.ships" target="classFrame"><span class="interfaceName">ICoord</span></a></li>
<li><a href="info1/ships/INavyFleet.html" title="interface in info1.ships" target="classFrame"><span class="interfaceName">INavyFleet</span></a></li>
<li><a href="info1/ships/IShip.html" title="interface in info1.ships" target="classFrame"><span class="interfaceName">IShip</span></a></li>
<li><a href="info1/network/Network.html" title="class in info1.network" target="classFrame">Network</a></li>
<li><a href="info1/network/Player.html" title="class in info1.network" target="classFrame">Player</a></li>
<li><a href="info1/ships/ShipCategory.html" title="enum in info1.ships" target="classFrame">ShipCategory</a></li>
<li><a href="info1/ships/UncompleteFleetException.html" title="class in info1.ships" target="classFrame">UncompleteFleetException</a></li>
</ul>
</div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_265) on Fri Jun 18 17:16:24 CEST 2021 -->
<title>All Classes</title>
<meta name="date" content="2021-06-18">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="info1/ships/BadCoordException.html" title="class in info1.ships">BadCoordException</a></li>
<li><a href="info1/network/BadIdException.html" title="class in info1.network">BadIdException</a></li>
<li><a href="info1/ships/CoordsBadShipException.html" title="class in info1.ships">CoordsBadShipException</a></li>
<li><a href="info1/network/Game.html" title="class in info1.network">Game</a></li>
<li><a href="info1/ships/ICoord.html" title="interface in info1.ships"><span class="interfaceName">ICoord</span></a></li>
<li><a href="info1/ships/INavyFleet.html" title="interface in info1.ships"><span class="interfaceName">INavyFleet</span></a></li>
<li><a href="info1/ships/IShip.html" title="interface in info1.ships"><span class="interfaceName">IShip</span></a></li>
<li><a href="info1/network/Network.html" title="class in info1.network">Network</a></li>
<li><a href="info1/network/Player.html" title="class in info1.network">Player</a></li>
<li><a href="info1/ships/ShipCategory.html" title="enum in info1.ships">ShipCategory</a></li>
<li><a href="info1/ships/UncompleteFleetException.html" title="class in info1.ships">UncompleteFleetException</a></li>
</ul>
</div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_265) on Fri Jun 18 17:16:24 CEST 2021 -->
<title>Constant Field Values</title>
<meta name="date" content="2021-06-18">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Constant Field Values";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
<h2 title="Contents">Contents</h2>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_265) on Fri Jun 18 17:16:24 CEST 2021 -->
<title>API Help</title>
<meta name="date" content="2021-06-18">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="API Help";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li class="navBarCell1Rev">Help</li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">How This API Document Is Organized</h1>
<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<h2>Overview</h2>
<p>The <a href="overview-summary.html">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.</p>
</li>
<li class="blockList">
<h2>Package</h2>
<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
<ul>
<li>Interfaces (italic)</li>
<li>Classes</li>
<li>Enums</li>
<li>Exceptions</li>
<li>Errors</li>
<li>Annotation Types</li>
</ul>
</li>
<li class="blockList">
<h2>Class/Interface</h2>
<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
<ul>
<li>Class inheritance diagram</li>
<li>Direct Subclasses</li>
<li>All Known Subinterfaces</li>
<li>All Known Implementing Classes</li>
<li>Class/interface declaration</li>
<li>Class/interface description</li>
</ul>
<ul>
<li>Nested Class Summary</li>
<li>Field Summary</li>
<li>Constructor Summary</li>
<li>Method Summary</li>
</ul>
<ul>
<li>Field Detail</li>
<li>Constructor Detail</li>
<li>Method Detail</li>
</ul>
<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
</li>
<li class="blockList">
<h2>Annotation Type</h2>
<p>Each annotation type has its own separate page with the following sections:</p>
<ul>
<li>Annotation Type declaration</li>
<li>Annotation Type description</li>
<li>Required Element Summary</li>
<li>Optional Element Summary</li>
<li>Element Detail</li>
</ul>
</li>
<li class="blockList">
<h2>Enum</h2>
<p>Each enum has its own separate page with the following sections:</p>
<ul>
<li>Enum declaration</li>
<li>Enum description</li>
<li>Enum Constant Summary</li>
<li>Enum Constant Detail</li>
</ul>
</li>
<li class="blockList">
<h2>Tree (Class Hierarchy)</h2>
<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
<ul>
<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
</ul>
</li>
<li class="blockList">
<h2>Index</h2>
<p>The <a href="index-files/index-1.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
</li>
<li class="blockList">
<h2>Prev/Next</h2>
<p>These links take you to the next or previous class, interface, package, or related page.</p>
</li>
<li class="blockList">
<h2>Frames/No Frames</h2>
<p>These links show and hide the HTML frames. All pages are available with or without frames.</p>
</li>
<li class="blockList">
<h2>All Classes</h2>
<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
</li>
<li class="blockList">
<h2>Serialized Form</h2>
<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
</li>
<li class="blockList">
<h2>Constant Field Values</h2>
<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
</li>
</ul>
<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href=