Commit 8796c7a5 authored by Quentin's avatar Quentin
Browse files

First commit

parents
build/
node_modules/
.vscode
package-lock.json
\ No newline at end of file
# Jeu d'échecs en ligne
Ce projet consiste à déployer une application web de jeu d'échecs jouable en multijoueur.
## Installation et lancement
* Récupération du projet, des dépendances et compilation :
```bash
git clone https://gitlab.univ-nantes.fr/tonneau-q/onlineChess.git
cd onlineChess
npm install
tsc
```
* Lancement du serveur :
```bash
node build/main.js
```
* Accès à l'application : http://adresseduserveur:8080 (ou http://localhost:8080 sur le pc local)
## Manuel d'utilisation
Indiquer dans le formulaire en bas de page la pièce à déplacer et sa destination au format `PieceColonneLigne` puis validez.
L'accronyme de la pièce est exprimé selon la liste suivante :
* R : roi
* D : dame
* Fc | Ff : fou initialement en colonne c|f
* Cb | Cg : cavalier initialement en colonne b|g
* Ta | Th : tour initialement en colonne a|h
* Pa | Pb | Pc | ... : pion initialement en colonne a|b|c|...
>Exemple : PbB4 déplace le pion initialement en colonne B à la case `B4`.
## Organisation des sources
* server : sources relatives au serveur
* `main.ts` : algorithme principale de création et gestion du serveur
* client: sources relatives aux navigateur(s)
* `index.html` : page principale de l'application
* `style.css` : design de l'application
* `script.js` : algorithme(s) JavaScript côté client
* build : résultats de la compilation TypeScript
* node_modules : modules externes importés (express)
* `sujet.pdf` : sujet du projet
* `.gitignore` : filtre des fichiers à exclure dans le dépôt git
* `.tsconfig` et `package.json` : paramètres de compilation et d'exécution
## API
L'adresse [/status.js](http://localhost:8080/status.js) distribue toutes les informations de la partie en cours.
\ No newline at end of file
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Online Chess</title>
<!-- Chargement des styles -->
<link rel="stylesheet" type="text/css" href="style.css">
<!-- Chargement des scripts -->
<script src="status.js"></script><!-- import de la partie actuelle -->
<script src="script.js"></script><!-- affichage et gestion de l'échiquier -->
</head>
<body onload="init()">
<center>
<h1>Online Chess</h1>
<!-- L'échiquier est un tableau de 8 lignes x 8 colonnes -->
<table class="echiquier">
<tr><th></th><th>a</th><th>b</th><th>c</th><th>d</th><th>e</th><th>f</th><th>g</th><th>f</th></tr>
<tr><th>1</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>1</th></tr>
<tr><th>2</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>2</th></tr>
<tr><th>3</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>3</th></tr>
<tr><th>4</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>4</th></tr>
<tr><th>5</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>5</th></tr>
<tr><th>6</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>6</th></tr>
<tr><th>7</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>7</th></tr>
<tr><th>8</th><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><th>8</th></tr>
<tr><th></th><th>a</th><th>b</th><th>c</th><th>d</th><th>e</th><th>f</th><th>g</th><th>f</th></tr>
</table><br/>
<!-- Formulaire de saisie et emission du coup à jouer
Envoie une requêtes sur '/ (POST)' au serveur -->
<form method="POST">
<input type="text" name="coup" placeholder="Coup à jouer (TaH3)" autofocus></input>
<input type="submit" value="Envoyer"></input>
</form>
</center>
</body>
</html>
\ No newline at end of file
/*
* @Author: Quentin Tonneau
* @Date: 2018-03-19 13:23:50
* @Last Modified by: Quentin Tonneau
* @Last Modified time: 2018-03-19 15:20:20
*/
/**
* Fonction principale executée après le chargement de la page
* Initialise l'échiquier en fonction de la variable "echiquier"
*/
function init(){
/************** PARTIE ELEVE 3 ****************/
/******* A ADAPTER SELON VOS INTERFACES *******/
for(var i=0;i<echiquier.plateau.length;i++){
for(var j=0;j<echiquier.plateau.length;j++){
var piece = echiquier.plateau[i][j];
if(piece.nom=="vide"){
//Vidage de la case
document.getElementsByTagName("tr")[j+1].getElementsByTagName("td")[i].innerHTML="";
}else{
//Affichage du symbole / image
document.getElementsByTagName("tr")[j+1].getElementsByTagName("td")[i].innerHTML=piece.symbole; // version symbole
//document.getElementsByTagName("tr")[j+1].getElementsByTagName("td")[i].innerHTML="<img src=\""+piece.image+"\"/>"; //version image
}
}
}
}
\ No newline at end of file
.echiquier {
border:brown 10px solid;border-collapse: collapse;
}
/* Mise en forme des noms de ligne/colonne */
.echiquier th{
padding:5px;
}
/* Style des cases de l'echiquier */
.echiquier td{
/*Dimensionnement relatif au navigateur*/
width:8vmin;
height:8vmin;
min-height:30px;
min-width:30px;
font-size: 6vmin;
background:chocolate; /*couleur par défaut*/
color:black;
text-align: center;
border : solid 1px grey;
}
/* Gestion des cases blanches */
.echiquier tr:nth-child(odd) td:nth-child(even), .echiquier tr:nth-child(even) td:nth-child(odd) {
background: bisque;
}
/* Gestion des images dans les cases de l'échiquier (option) */
.echiquier td img{
max-width:90%;
max-height:90%;
}
\ No newline at end of file
{
"name": "projetEchecs",
"description": "",
"version": "1.0.0",
"main": "build/main.js",
"scripts": {
"build": "tsc"
},
"keywords": [],
"author": "Quentin Tonneau",
"license": "MIT",
"dependencies": {
"body-parser": "^1.18.2",
"express": "^4.16.3"
}
}
/*
* Programme principal du serveur d'échecs en ligne
* @Author: Quentin Tonneau
* @Date: 2018-03-15 22:23:16
* @Last Modified by: Quentin Tonneau
* @Last Modified time: 2018-03-19 11:45:29
*/
//Imports des modules serveur web
import express = require('express');
import bodyParser = require('body-parser');
declare var __dirname;
const _PORT_ = 8080; //port d'écoute du serveur
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(__dirname+'/../client')); //distribution automatique des fichiers (ex : index.html)
/************** PARTIE ELEVE 1 ****************/
import { Echiquier, createEchiquier } from './echiquier';
import { jouerCoup } from './Coup';
let echiquier:Echiquier = createEchiquier(); //Création d'une variable globale de la partie en cours
/************* FIN PARTIE ELEVE 1 ************/
//Fonction de traitement d'un coup envoyé par le navigateur
app.post("/",function(req,res){
let coup : string = req.body.coup; //récupération du coup
/************** PARTIE ELEVE 2 ****************/
echiquier = jouerCoup(coup,echiquier);
/************* FIN PARTIE ELEVE 2 ************/
res.redirect("/");//On redirige l'utilisateur vers l'affichage du nouvel echiquier
});
//Fonction retournant l'échiquier actuel
app.get("/status.js",function(req,res){
res.end("var echiquier = "+JSON.stringify(echiquier));
});
//Lancement de l'application
app.listen(_PORT_, function () {
console.log('Application lancée à l\'adresse http://localhost:'+_PORT_);
});
\ No newline at end of file
File added
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"outDir": "build"
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment