Skip to content

Commit c86a41e

Browse files
committed
tweaks in redis - still not quite ready yet
in terms of what exactly needs to be done
1 parent 37baa58 commit c86a41e

File tree

4 files changed

+114
-142
lines changed

4 files changed

+114
-142
lines changed
Lines changed: 57 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
---
22
jupytext:
3-
cell_metadata_filter: all,-hidden,-heading_collapsed,-run_control,-trusted
4-
notebook_metadata_filter: all, -jupytext.text_representation.jupytext_version, -jupytext.text_representation.format_version,
5-
-jupytext.custom_cell_magics, -language_info.version, -language_info.codemirror_mode.version,
6-
-language_info.codemirror_mode, -language_info.file_extension, -language_info.mimetype,
7-
-toc, -vscode
83
text_representation:
94
extension: .md
105
format_name: myst
6+
format_version: 0.13
7+
jupytext_version: 1.16.4
118
kernelspec:
129
display_name: Python 3 (ipykernel)
1310
language: python
1411
name: python3
15-
language_info:
16-
name: python
17-
nbconvert_exporter: python
18-
pygments_lexer: ipython3
19-
nbhosting:
20-
title: un jeu multijoueurs
2112
---
2213

2314
# un jeu multi-joueur
@@ -27,40 +18,45 @@ nbhosting:
2718
on se propose de réaliser un petit jeu multi joueur, et pour cela nous aurons besoin de
2819

2920
* [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+
```
3126

3227
* [pygame](www.pygame.org), pour le graphisme et autres interactions avec le jeu
3328

3429
+++
3530

36-
# architecture
31+
## architecture
3732

3833
+++
3934

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
4536

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)
4741

4842
+++
4943

50-
## comment partager
44+
### comment partager
5145

5246
du coup lorsqu'on veut faire jouer ensemble, disons deux personnes, on aurait en théorie le choix entre
5347

5448
* 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
5651

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
5854

5955
on va voir comment on peut s'y prendre
6056

6157
+++
6258

63-
## une solution centralisée
59+
### une solution centralisée
6460

6561
+++
6662

@@ -74,7 +70,7 @@ l'architecture la plus simple pour établir la communication entre tous les joue
7470

7571
+++
7672

77-
# prototype
73+
## prototype
7874

7975
+++
8076

@@ -84,7 +80,15 @@ pour le mettre en oeuvre :
8480

8581
+++
8682

87-
## serveur
83+
### requirements
84+
85+
```shell
86+
pip install -r requirements.txt
87+
```
88+
89+
+++
90+
91+
### serveur
8892

8993
il faut pour commencer lancer un serveur redis
9094
(après avoir installé [l'outil redis](https://redis.io/), bien entendu)
@@ -95,30 +99,24 @@ redis-server --protected-mode no
9599

96100
bien sûr ce process **ne termine pas** (vous remarquez que le shell ne vous affiche pas le *prompt* avec le `$`)
97101

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
99104

100105
+++
101106

102-
## jeux
103-
104-
### requirements
105-
106-
```shell
107-
pip install pygame redis
108-
```
109-
110107
### un premier jeu
111108

112109
```shell
113-
python multi-game.py pierre
110+
python game.py pierre
114111
```
115112

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é...
117115

118116
### un second
119117

120118
```shell
121-
python multi-game.py paul
119+
python game.py paul
122120
```
123121

124122
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
129127

130128
+++
131129

132-
## défauts
130+
### défauts
133131

134132
+++
135133

@@ -143,19 +141,7 @@ bien sûr ce prototype a des zillions de défauts :
143141

144142
+++
145143

146-
# le code
147-
148-
+++
149-
150-
https://github.com/flotpython/exos/tree/main/python-tps/redis
151-
152-
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
159145

160146
jusqu'ici on a fait tourner tous les processus dans le même ordinateur
161147

@@ -165,13 +151,12 @@ en vraie grandeur bien sûr, on veut faire tourner ça sur plusieurs ordinateurs
165151
:align: center
166152
```
167153

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
169156

170157
+++
171158

172-
## trouver son IP address
173-
174-
+++
159+
### trouver son addresse IP
175160

176161
selon les systèmes, lancez dans un terminal la commande suivante
177162
* Windows `ipconfig`
@@ -188,29 +173,18 @@ et cherchez une adresse parmi les intervalles réservés aux adresses privées
188173

189174
+++
190175

191-
## pour lancer le jeu
176+
### pour lancer le jeu
192177

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
194180

195181
```
196-
multi-game.py --server 192.168.200.20 Jacques
182+
game.py --server 192.168.200.20 Jacques
197183
```
198184

199185
+++
200186

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
214188

215189
### Windows
216190

@@ -220,7 +194,17 @@ faut-il simplifier le jeu ?
220194
* autre option: memurai
221195
* dont l'installation se charge de créer un service microsoft
222196

197+
### MacOS
198+
199+
* `brew install redis`
200+
223201
### linux / fedora
224202

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

notebooks/tps/redis/ARTEFACTS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requirements.txt

0 commit comments

Comments
 (0)