Skip to content

Commit 1540817

Browse files
committed
Merge branch 'dev'
# Conflicts: # CMakeLists.txt # cmake/CodeCoverage.cmake # src/client/client/Example.cpp # src/client/main.cpp # src/shared/CMakeLists.txt # src/shared/state/Example.cpp # src/state.dia # test/CMakeLists.txt # test/shared/test_shared_dummy.cpp
2 parents cdd9a10 + 6b09152 commit 1540817

File tree

15 files changed

+1096
-275
lines changed

15 files changed

+1096
-275
lines changed

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ build
33
cmake-build-debug
44
bin
55
nbproject
6-
src/*/*.h
7-
src/*/*/*.h
6+
src/**/*.h
87
.idea
98
*.autosave
10-
9+
tmp

CMakeLists.txt

Lines changed: 70 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ project(plt)
33

44
# CMP0074 policy enable find_* to use <PackageName>_ROOT variables to find
55
# packages.
6-
if (POLICY CMP0074)
7-
cmake_policy(SET CMP0074 NEW)
8-
endif ()
9-
6+
if(POLICY CMP0074)
7+
cmake_policy(SET CMP0074 NEW)
8+
endif()
109

1110
# Include helper functions
1211
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
@@ -20,97 +19,95 @@ set(CMAKE_CXX_STANDARD 11)
2019
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2120

2221
# Enable Debug and Release builds
23-
if (NOT CMAKE_BUILD_TYPE)
24-
set(CMAKE_BUILD_TYPE Debug CACHE STRING
25-
"Build type, Debug or Release" FORCE)
26-
endif ()
22+
if(NOT CMAKE_BUILD_TYPE)
23+
set(CMAKE_BUILD_TYPE Debug CACHE STRING
24+
"Build type, Debug or Release" FORCE)
25+
endif()
2726
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
28-
IF (CMAKE_COMPILER_IS_GNUCC)
29-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11 -pthread -g")
30-
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -pthread -g")
31-
ENDIF (CMAKE_COMPILER_IS_GNUCC)
27+
IF(CMAKE_COMPILER_IS_GNUCC)
28+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11 -pthread -g")
29+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -pthread -g")
30+
ENDIF(CMAKE_COMPILER_IS_GNUCC)
31+
3232

3333

3434
# Add code coverage support for Gcov using GCC
3535
set(BUILD_CODE_COVERAGE ON CACHE BOOL
36-
"Set BUILD_CODE_COVERAGE to OFF to disable code coverage")
37-
if (BUILD_CODE_COVERAGE AND NOT UNIX)
38-
message(WARNING "Code coverage is only available for UNIX systems")
39-
set(BUILD_CODE_COVERAGE OFF)
40-
elseif (BUILD_CODE_COVERAGE AND NOT CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
41-
message(WARNING "Code coverage is only available for GNU compiler and Clang compiler")
42-
set(BUILD_CODE_COVERAGE OFF)
43-
endif ()
36+
"Set BUILD_CODE_COVERAGE to OFF to disable code coverage")
37+
if(BUILD_CODE_COVERAGE AND NOT UNIX)
38+
message(WARNING "Code coverage is only available for UNIX systems")
39+
set(BUILD_CODE_COVERAGE OFF)
40+
elseif(BUILD_CODE_COVERAGE AND NOT CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
41+
message(WARNING "Code coverage is only available for GNU compiler and Clang compiler")
42+
set(BUILD_CODE_COVERAGE OFF)
43+
endif()
4444

4545
message(STATUS "Code coverage: ${BUILD_CODE_COVERAGE}")
46-
if (BUILD_CODE_COVERAGE)
47-
include(CodeCoverage)
48-
APPEND_COVERAGE_COMPILER_FLAGS()
49-
# Exclude all code not directly generated by user from code coverage
50-
set(COVERAGE_LCOV_EXCLUDES
51-
'/usr/*'
52-
'${PROJECT_SOURCE_DIR}/test/*'
53-
'${PROJECT_SOURCE_DIR}/extern/*')
54-
set(COVERAGE_GCOVR_EXCLUDES
55-
/usr/
56-
"${PROJECT_SOURCE_DIR}/test/"
57-
"${PROJECT_SOURCE_DIR}/extern/")
58-
# Create script to run tests for code coverage
59-
set(test_runner "${CMAKE_CURRENT_BINARY_DIR}/run_test.sh")
60-
file(CONFIGURE
61-
OUTPUT ${test_runner}
62-
CONTENT
63-
"cd \"${CMAKE_CURRENT_BINARY_DIR}/test\" && ctest --timeout 300 ||/bin/true\n"
64-
)
65-
# Create target for code coverage
66-
SETUP_TARGET_FOR_COVERAGE_LCOV(
67-
NAME code-coverage
68-
EXECUTABLE sh ${test_runner}
69-
DEPENDS ${test_runner}
46+
if(BUILD_CODE_COVERAGE)
47+
include(CodeCoverage)
48+
APPEND_COVERAGE_COMPILER_FLAGS()
49+
# Exclude all code not directly generated by user from code coverage
50+
set(COVERAGE_GCOVR_EXCLUDES
51+
"/usr/*"
52+
"${PROJECT_SOURCE_DIR}/test/*"
53+
"${PROJECT_SOURCE_DIR}/extern/*"
54+
)
55+
# Create script to run tests for code coverage
56+
set(test_runner "${CMAKE_CURRENT_BINARY_DIR}/run_test.sh")
57+
file(CONFIGURE
58+
OUTPUT ${test_runner}
59+
CONTENT
60+
"cd \"${CMAKE_CURRENT_BINARY_DIR}/test\" && ctest --timeout 300 ||/bin/true\n"
61+
)
62+
# Create target for code coverage
63+
SETUP_TARGET_FOR_COVERAGE_LCOV(
64+
NAME code-coverage
65+
EXECUTABLE sh ${test_runner}
66+
DEPENDS ${test_runner}
7067
)
71-
SETUP_TARGET_FOR_COVERAGE_GCOVR_XML(
72-
NAME code-coverage-gcov
73-
EXECUTABLE sh ${test_runner}
74-
DEPENDS ${test_runner}
68+
SETUP_TARGET_FOR_COVERAGE_GCOVR_XML(
69+
NAME code-coverage-gcov
70+
EXECUTABLE sh ${test_runner}
71+
DEPENDS ${test_runner}
7572
)
76-
endif ()
73+
endif()
7774

7875
# Build dia2code
7976
add_subdirectory(extern/dia2code)
8077

8178
# Add option to enable special build for ENSEA's machines
8279
set(MACHINE_ENSEA OFF CACHE BOOL
83-
"Set MACHINE_ENSEA to ON to build on the CentOS machine at ENSEA")
80+
"Set MACHINE_ENSEA to ON to build on the CentOS machine at ENSEA")
8481

8582
# Find library jsoncpp
8683
set(jsoncpp_include_dir "${PROJECT_SOURCE_DIR}/extern/jsoncpp-1.8.0")
8784
file(GLOB_RECURSE jsoncpp_sources extern/jsoncpp-1.8.0/*.cpp)
8885

8986
# Find library SFML
90-
if (WIN32)
91-
set(SFML_ROOT "D:/Utils/SFML-2.3" CACHE STRING
92-
"Root directory for SFML library")
93-
set(CMAKE_MODULE_PATH "${SFML_ROOT}/cmake/Modules" ${CMAKE_MODULE_PATH})
94-
else (WIN32)
95-
set(CMAKE_MODULE_PATH "/usr/share/SFML/cmake/Modules/" ${CMAKE_MODULE_PATH})
96-
endif (WIN32)
97-
if (${MACHINE_ENSEA})
98-
set(SFML_ROOT "/usr/lsa")
99-
set(CMAKE_MODULE_PATH "${SFML_ROOT}/share/SFML/cmake/Modules/" ${CMAKE_MODULE_PATH})
100-
endif ()
87+
if(WIN32)
88+
set(SFML_ROOT "D:/Utils/SFML-2.3" CACHE STRING
89+
"Root directory for SFML library")
90+
set(CMAKE_MODULE_PATH "${SFML_ROOT}/cmake/Modules" ${CMAKE_MODULE_PATH})
91+
else(WIN32)
92+
set(CMAKE_MODULE_PATH "/usr/share/SFML/cmake/Modules/" ${CMAKE_MODULE_PATH})
93+
endif(WIN32)
94+
if(${MACHINE_ENSEA})
95+
set(SFML_ROOT "/usr/lsa")
96+
set(CMAKE_MODULE_PATH "${SFML_ROOT}/share/SFML/cmake/Modules/" ${CMAKE_MODULE_PATH})
97+
endif()
10198
find_package(SFML 2 COMPONENTS graphics network window system)
102-
if (NOT ${MACHINE_ENSEA})
103-
set(SFML_LIBRARIES sfml-graphics sfml-network sfml-window sfml-system)
104-
endif ()
99+
if(NOT ${MACHINE_ENSEA})
100+
set(SFML_LIBRARIES sfml-graphics sfml-network sfml-window sfml-system)
101+
endif()
105102

106103
# Find library libmicrohttpd
107104
find_library(
108-
MHD_LIBRARY
109-
NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll
110-
DOC "microhttpd library"
105+
MHD_LIBRARY
106+
NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll
107+
DOC "microhttpd library"
111108
)
112109

113-
# Add source subdirectories
110+
# Add source subdirectories
114111
add_subdirectory(src/shared)
115112
add_subdirectory(src/client)
116113
#add_subdirectory(src/server)
@@ -121,11 +118,11 @@ add_subdirectory(rapport)
121118
# Unit tests
122119
# Set BUILD_TESTING to OFF in CMakeCache to disable tests
123120
set(BUILD_TESTING ON CACHE BOOL
124-
"Set BUILD_TESTING to OFF to disable tests")
125-
if (BUILD_TESTING)
126-
# Include tests scripts
127-
add_subdirectory(test)
128-
endif ()
121+
"Set BUILD_TESTING to OFF to disable tests")
122+
if(BUILD_TESTING)
123+
# Include tests scripts
124+
add_subdirectory(test)
125+
endif()
129126

130127
# vim: set sw=2 sts=2 et:
131128

Rapport.md

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# Projet Logiciel Transversal
2+
3+
---
4+
5+
#### Prénom NOM – Prénom NOM
6+
7+
---
8+
9+
## 1 Objectif
10+
11+
### 1.1 Présentation générale
12+
Présenter ici une description générale du projet. On peut s'appuyer sur des schémas ou croquis pour illustrer cette présentation. Éventuellement, proposer des projets existants et/ou captures d'écrans permettant de rapidement comprendre la nature du projet.
13+
14+
### 1.2 Règles du jeu
15+
Présenter ici une description des principales règles du jeu. Il doit y avoir suffisamment d'éléments pour pouvoir former entièrement le jeu, sans pour autant entrer dans les détails . Notez que c'est une description en «français» qui est demandé, il n'est pas question d'informatique et de programmation dans cette section.
16+
17+
### 1.3 Conception Logiciel
18+
Présenter ici les packages de votre solution, ainsi que leurs dépendances.
19+
20+
21+
## 2 Description et conception des états
22+
L'objectif de cette section est une description très fine des états dans le projet. Plusieurs niveaux de descriptions sont attendus. Le premier doit être général, afin que le lecteur puisse comprendre les éléments et principes en jeux. Le niveau suivant est celui de la conception logicielle. Pour ce faire, on présente à la fois un diagramme des classes, ainsi qu'un commentaire détaillé de ce diagramme. Indiquer l'utilisation de patron de conception sera très apprécié. Notez bien que les règles de changement d'état ne sont pas attendues dans cette section, même s'il n'est pas interdit d'illustrer de temps à autre des états par leurs possibles changements.
23+
24+
### 2.1 Description des états
25+
26+
### 2.2 Conception logicielle
27+
28+
### 2.3 Conception logicielle: extension pour le rendu
29+
30+
### 2.4 Conception logicielle: extension pour le moteur de jeu
31+
32+
### 2.5 Ressources
33+
34+
Illustration 1: Diagramme des classes d'état
35+
36+
37+
## 3 Rendu: Stratégie et Conception
38+
Présentez ici la stratégie générale que vous comptez suivre pour rendre un état. Cela doit tenir compte des problématiques de synchronisation entre les changements d'états et la vitesse d'affichage à l'écran. Puis, lorsque vous serez rendu à la partie client/serveur, expliquez comment vous aller gérer les problèmes liés à la latence. Après cette description, présentez la conception logicielle. Pour celle-ci, il est fortement recommandé de former une première partie indépendante de toute librairie graphique, puis de présenter d'autres parties qui l'implémente pour une librairie particulière. Enfin, toutes les classes de la première partie doivent avoir pour unique dépendance les classes d'état de la section précédente.
39+
40+
### 3.1 Stratégie de rendu d'un état
41+
42+
### 3.2 Conception logicielle
43+
44+
### 3.3 Conception logicielle: extension pour les animations
45+
46+
### 3.4 Ressources
47+
48+
### 3.5 Exemple de rendu
49+
50+
Illustration 2: Diagramme de classes pour le rendu
51+
52+
## 4 Règles de changement d'états et moteur de jeu
53+
Dans cette section, il faut présenter les événements qui peuvent faire passer d'un état à un autre. Il faut également décrire les aspects liés au temps, comme la chronologie des événements et les aspects de synchronisation. Une fois ceci présenté, on propose une conception logicielle pour pouvoir mettre en œuvre ces règles, autrement dit le moteur de jeu.
54+
55+
### 4.1 Horloge globale
56+
57+
### 4.2 Changements extérieurs
58+
59+
### 4.3 Changements autonomes
60+
61+
### 4.4 Conception logicielle
62+
63+
### 4.5 Conception logicielle: extension pour l'IA
64+
65+
### 4.6 Conception logicielle: extension pour la parallélisation
66+
67+
Illustration 3: Diagrammes des classes pour le moteur de jeu
68+
69+
70+
## 5 Intelligence Artificielle
71+
Cette section est dédiée aux stratégies et outils développés pour créer un joueur artificiel. Ce robot doit utiliser les mêmes commandes qu'un joueur humain, ie utiliser les mêmes actions/ordres que ceux produit par le clavier ou la souris. Le robot ne doit pas avoir accès à plus information qu'un joueur humain. Comme pour les autres sections, commencez par présenter la stratégie, puis la conception logicielle.
72+
### 5.1 Stratégies
73+
74+
#### 5.1.1 Intelligence minimale
75+
76+
#### 5.1.2 Intelligence basée sur des heuristiques
77+
78+
#### 5.1.3 Intelligence basée sur les arbres de recherche
79+
80+
### 5.2 Conception logicielle
81+
82+
### 5.3 Conception logicielle: extension pour l'IA composée
83+
84+
### 5.4 Conception logicielle: extension pour IA avancée
85+
86+
### 5.5 Conception logicielle: extension pour la parallélisation
87+
88+
89+
## 6 Modularisation
90+
Cette section se concentre sur la répartition des différents modules du jeu dans différents processus. Deux niveaux doivent être considérés. Le premier est la répartition des modules sur différents threads. Notons bien que ce qui est attendu est un parallélisation maximale des traitements: il faut bien démontrer que l'intersection des processus communs ou bloquant est minimale. Le deuxième niveau est la répartition des modules sur différentes machines, via une interface réseau. Dans tous les cas, motivez vos choix, et indiquez également les latences qui en résulte.
91+
92+
### 6.1 Organisation des modules
93+
94+
#### 6.1.1 Répartition sur différents threads
95+
96+
#### 6.1.2 Répartition sur différentes machines
97+
98+
### 6.2 Conception logiciel
99+
100+
### 6.3 Conception logiciel: extension réseau
101+
102+
### 6.4 Conception logiciel: client Android
103+
104+
Illustration 4: Diagramme de classes pour la modularisation

0 commit comments

Comments
 (0)