You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
on se propose de réaliser un petit jeu multi joueur, et pour cela nous aurons besoin de
28
19
29
20
*[redis](https://redis.io/), un système de base de données *light* et rapide, où les données sont stockées en mémoire; il ne s'agit pas d'un système traditionnel, ici pas de SQL ni de stockage sur le disque
30
-
**attendez avant de l'installer**, les modalités ne sont pas les mêmes sur tous les OS
21
+
```{admonition} **attendez avant de l'installer** !
22
+
:class: warning
23
+
24
+
les modalités ne sont pas les mêmes sur tous les OS
25
+
```
31
26
32
27
*[pygame](www.pygame.org), pour le graphisme et autres interactions avec le jeu
33
28
34
29
+++
35
30
36
-
# architecture
31
+
##architecture
37
32
38
33
+++
39
34
40
-
## *process* et isolation
41
-
42
-
un jeu multi-joueur pose des défis qui vont au-delà de ce qu'on apprend dans un cours de programmation de base
43
-
44
-
en effet on apprend pour commencer à programmer dans un monde fini et isolé - l'OS appelle ça un *process* - qui **par définition** ne partage aucune donnée avec les autres programmes qui tournent dans le même ordinateur
35
+
### *process* et isolation
45
36
46
-
typiquement quand vous écrivez un programme Python et que vous le lancez avec `python mon_code.py`, tout le code tourne dans un seul process (sauf si vous faites exprès d'en créer d'autres bien entendu)
37
+
un jeu multi-joueur pose des défis qui vont au-delà de ce qu'on apprend dans un cours de programmation de base
38
+
en effet on apprend pour commencer à programmer dans un monde fini et isolé - l'OS appelle ça un *process* - qui **par définition** ne partage aucune donnée avec les autres programmes qui tournent dans le même ordinateur
39
+
typiquement quand vous écrivez un programme Python et que vous le lancez avec `python mon_code.py`, tout le code tourne **dans un seul process**
40
+
(sauf si vous faites exprès d'en créer d'autres bien entendu)
47
41
48
42
+++
49
43
50
-
## comment partager
44
+
###comment partager
51
45
52
46
du coup lorsqu'on veut faire jouer ensemble, disons deux personnes, on aurait en théorie le choix entre
53
47
54
48
* faire tourner tout le jeu, c'est-à-dire les deux joueurs, dans un seul process; mais ça impose de jouer tous les deux sur le même ordi, pas glop du tout
55
-
* du coup ça n'est pas une solution en général, donc c'est beaucoup mieux que chaque joueur lance son propre process, qui pourront même du coup tourner sur des ordinateurs différents pourvu qu'on s'y prenne correctement
49
+
* du coup ça n'est pas une solution en général, donc c'est beaucoup mieux que **chaque joueur lance son propre process**,
50
+
qui pourront même du coup tourner sur des ordinateurs différents pourvu qu'on s'y prenne correctement
56
51
57
-
mais avec cette deuxième approche il faut trouver **un moyen d'échanger des informations**: chaque process a le contrôle sur la position de son joueur, mais a besoin d'obtenir les positions des autres joueurs
52
+
mais avec cette deuxième approche il faut trouver **un moyen d'échanger des informations**:
53
+
chaque process a le contrôle sur la position de son joueur, mais a besoin d'obtenir les positions des autres joueurs
58
54
59
55
on va voir comment on peut s'y prendre
60
56
61
57
+++
62
58
63
-
## une solution centralisée
59
+
###une solution centralisée
64
60
65
61
+++
66
62
@@ -74,7 +70,7 @@ l'architecture la plus simple pour établir la communication entre tous les joue
74
70
75
71
+++
76
72
77
-
# prototype
73
+
##prototype
78
74
79
75
+++
80
76
@@ -84,7 +80,15 @@ pour le mettre en oeuvre :
84
80
85
81
+++
86
82
87
-
## serveur
83
+
### requirements
84
+
85
+
```shell
86
+
pip install -r requirements.txt
87
+
```
88
+
89
+
+++
90
+
91
+
### serveur
88
92
89
93
il faut pour commencer lancer un serveur redis
90
94
(après avoir installé [l'outil redis](https://redis.io/), bien entendu)
@@ -95,30 +99,24 @@ redis-server --protected-mode no
95
99
96
100
bien sûr ce process **ne termine pas** (vous remarquez que le shell ne vous affiche pas le *prompt* avec le `$`)
97
101
98
-
il faut le laisser tourner pendant tout le temps du jeu; donc ce terminal va être monopolisé pour ça, créez-en un autre pour lancer les autres morceaux
102
+
il faut le laisser tourner pendant tout le temps du jeu; donc ce terminal va
103
+
être monopolisé pour ça, créez-en un autre pour lancer les autres morceaux
99
104
100
105
+++
101
106
102
-
## jeux
103
-
104
-
### requirements
105
-
106
-
```shell
107
-
pip install pygame redis
108
-
```
109
-
110
107
### un premier jeu
111
108
112
109
```shell
113
-
python multi-game.py pierre
110
+
python game.py pierre
114
111
```
115
112
116
-
pareil ici, ce process ne se terminera que lorque pierre aura fini de jouer; donc pendant tout ce temps le terminal va être occupé...
113
+
pareil ici, ce process ne se terminera que lorque pierre aura fini de jouer;
114
+
donc pendant tout ce temps le terminal va être occupé...
117
115
118
116
### un second
119
117
120
118
```shell
121
-
python multi-game.py paul
119
+
python game.py paul
122
120
```
123
121
124
122
Pierre voit Paul apparaitre sur son écran, et Paul également;
@@ -129,7 +127,7 @@ on peut lancer d'autres jeux en même temps, mais bien sûr l'espace libre sur l
129
127
130
128
+++
131
129
132
-
## défauts
130
+
###défauts
133
131
134
132
+++
135
133
@@ -143,19 +141,7 @@ bien sûr ce prototype a des zillions de défauts :
n'oubliez pas de lancer le serveur *redis***d'abord**, ça ne va pas fonctionner sinon.
153
-
154
-
+++
155
-
156
-
# plusieurs ordinateurs
157
-
158
-
+++
144
+
## plusieurs ordinateurs
159
145
160
146
jusqu'ici on a fait tourner tous les processus dans le même ordinateur
161
147
@@ -165,13 +151,12 @@ en vraie grandeur bien sûr, on veut faire tourner ça sur plusieurs ordinateurs
165
151
:align: center
166
152
```
167
153
168
-
pour que ça puisse fonctionner dans ce type de configuration il faut que Jacques lance le jeu en lui indiquant sur quel ordinateur se trouve le serveur redis
154
+
pour que ça puisse fonctionner dans ce type de configuration il faut que Jacques
155
+
lance le jeu en lui indiquant sur quel ordinateur se trouve le serveur redis
169
156
170
157
+++
171
158
172
-
## trouver son IP address
173
-
174
-
+++
159
+
### trouver son addresse IP
175
160
176
161
selon les systèmes, lancez dans un terminal la commande suivante
177
162
* Windows `ipconfig`
@@ -188,29 +173,18 @@ et cherchez une adresse parmi les intervalles réservés aux adresses privées
188
173
189
174
+++
190
175
191
-
## pour lancer le jeu
176
+
###pour lancer le jeu
192
177
193
-
dans notre configuration, si Pierre est sur l'adresse disons `192.168.200.20`, il suffit aux autres joueurs qui veulent le rejoindre de lancer par exemple
178
+
dans notre configuration, si Pierre est sur l'adresse disons `192.168.200.20`,
179
+
il suffit aux autres joueurs qui veulent le rejoindre de lancer par exemple
194
180
195
181
```
196
-
multi-game.py --server 192.168.200.20 Jacques
182
+
game.py --server 192.168.200.20 Jacques
197
183
```
198
184
199
185
+++
200
186
201
-
# Notes
202
-
203
-
## scope
204
-
205
-
faut-il simplifier le jeu ?
206
-
207
-
## Précisions multi-OS
208
-
209
-
### general
210
-
211
-
* lancer redis-server --protected-mode no
212
-
* lancer redis-server --bind 0.0.0.0
213
-
* ouvrir le firewall
187
+
## Notes / précisions multi-OS
214
188
215
189
### Windows
216
190
@@ -220,7 +194,17 @@ faut-il simplifier le jeu ?
220
194
* autre option: memurai
221
195
* dont l'installation se charge de créer un service microsoft
222
196
197
+
### MacOS
198
+
199
+
*`brew install redis`
200
+
223
201
### linux / fedora
224
202
225
-
* dnf install redis
226
-
* si firewalld: sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
203
+
*`dnf install redis`
204
+
* si firewalld est actif: `sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp`
205
+
206
+
### pour lancer redis
207
+
208
+
* lancer `redis-server --protected-mode no`
209
+
* lancer `redis-server --bind 0.0.0.0`
210
+
* ouvrir le firewall si activé, sinon pas moyen de communiquer entre ordis
0 commit comments