Skip to content

Commit 2e2ee65

Browse files
committed
boids ported to arcade 3.x
1 parent cab80c1 commit 2e2ee65

21 files changed

+133
-145
lines changed

notebooks/tps/boids/.teacher/README-boids-corrige-nb.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ dans ce TP nous allons
6666

6767
### notre sujet
6868

69-
dans sa version originale chaque animal décide de sa trajectoire, **en fonction uniquement de ses voisins proches**, et cela en suivant trois règles:
69+
dans sa version originale chaque animal décide de sa trajectoire, **en fonction
70+
uniquement de ses voisins proches**, et cela en suivant trois règles:
7071

7172
* séparation (typiquement pour éviter les obstacles)
7273
* alignement (tout le monde va, en gros, dans la même direction)
@@ -83,6 +84,15 @@ les élèves rapides et/ou motivés pourront poursuivre jusqu'à réaliser une s
8384

8485
voici d'abord une vidéo très courte pour vous montrer les différentes étapes du TP
8586

87+
::::{admonition} arcade 3.x
88+
:class: danger
89+
90+
comme la librairie `arcade` a récemment évolué vers la version 3.x, le code de
91+
démarrage a été mis à jour en conséquence, et c'est pourquoi avec le code de
92+
départ que je vous fournis **vous allez commencer directement à l'étape 2** de la
93+
vidéo
94+
::::
95+
8696
::::{figure}
8797
:align: center
8898
```{iframe} https://www.youtube.com/embed/d4789cBD3Ek?rel=0&controls=1
@@ -104,7 +114,7 @@ boids
104114

105115
le zip contient
106116

107-
* le starter code dans `boids-01.py`
117+
* le starter code dans `boids-02.py`
108118
* les figures dans le dossier `media/`
109119

110120
---
@@ -119,7 +129,7 @@ le zip contient
119129
::::{admonition} le code de départ
120130
:class: dropdown
121131

122-
:::{literalinclude} boids-01.py
132+
:::{literalinclude} boids-02.py
123133
:::
124134
::::
125135

@@ -202,7 +212,7 @@ et on va au contraire la **spécialiser** pour créer notre propre classe `Boid`
202212
* pour chaque cycle de la *mainloop*, l'objet `Window` utilise
203213
* sa méthode `on_update()` pour mettre à jour l'état des objets (juste en mémoire)
204214
* et sa méthode `on_draw()` pour les redessiner
205-
c'est pour cela que celle-ci commence par `start_render()`
215+
c'est pour cela que celle-ci commence par `clear()`
206216
qui efface tout, et remet simplement le fond d'écran
207217
* bref, le résultat c'est qu'on peut **faire avancer le boid**
208218
simplement en **redéfinissant quelques méthodes** dans le code

notebooks/tps/boids/.teacher/boids-01.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

notebooks/tps/boids/.teacher/boids-02.py

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../boids-02.py

notebooks/tps/boids/.teacher/boids-03.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def __init__(self):
1717
self.center_x, self.center_y = 100, 100
1818
self.speed = 100 # in pixels / second
1919

20-
def on_update(self, delta_time):
20+
def update(self, delta_time):
2121
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
2222
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
2323

@@ -36,11 +36,11 @@ def setup(self):
3636
self.boids.append(boid)
3737

3838
def on_draw(self):
39-
arcade.start_render()
39+
self.clear()
4040
self.boids.draw()
4141

4242
def on_update(self, delta_time):
43-
self.boids.on_update(delta_time)
43+
self.boids.update()
4444

4545
window = Window()
4646
window.setup()

notebooks/tps/boids/.teacher/boids-04.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ class Boid(arcade.Sprite):
1717
def __init__(self):
1818
super().__init__(IMAGE)
1919
self.center_x, self.center_y = 100, 100
20-
self.angle = -135
20+
self.angle = 135
2121
self.speed = 100 # in pixels / second
2222

23-
def on_update(self, delta_time):
24-
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
25-
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
23+
def update(self, delta_time):
24+
self.center_x += self.speed * delta_time * math.cos(math.radians(-self.angle))
25+
self.center_y += self.speed * delta_time * math.sin(math.radians(-self.angle))
2626

2727
self.center_x %= WIDTH
2828
self.center_y %= HEIGHT
@@ -42,11 +42,11 @@ def setup(self):
4242
self.boids.append(boid)
4343

4444
def on_draw(self):
45-
arcade.start_render()
45+
self.clear()
4646
self.boids.draw()
4747

4848
def on_update(self, delta_time):
49-
self.boids.on_update(delta_time)
49+
self.boids.update()
5050

5151
window = Window()
5252
window.setup()

notebooks/tps/boids/.teacher/boids-05.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@ class Boid(arcade.Sprite):
1818
def __init__(self):
1919
super().__init__(IMAGE)
2020
self.center_x, self.center_y = 100, 100
21-
self.angle = -135
21+
self.angle = 135
2222
self.speed = 100 # in pixels / second
2323

24-
def on_update(self, delta_time):
25-
2624
self.angle += (1 - 2*random.random()) * NOISE_ANGLE
2725

28-
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
29-
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
26+
def update(self, delta_time):
27+
self.center_x += self.speed * delta_time * math.cos(math.radians(-self.angle))
28+
self.center_y += self.speed * delta_time * math.sin(math.radians(-self.angle))
3029

3130
self.center_x %= WIDTH
3231
self.center_y %= HEIGHT
@@ -46,11 +45,11 @@ def setup(self):
4645
self.boids.append(boid)
4746

4847
def on_draw(self):
49-
arcade.start_render()
48+
self.clear()
5049
self.boids.draw()
5150

5251
def on_update(self, delta_time):
53-
self.boids.on_update(delta_time)
52+
self.boids.update(delta_time)
5453

5554
window = Window()
5655
window.setup()

notebooks/tps/boids/.teacher/boids-06.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ class Boid(arcade.Sprite):
1919
def __init__(self):
2020
super().__init__(IMAGE)
2121
self.center_x, self.center_y = 100, 100
22-
self.angle = -135
22+
self.angle = 135
2323
self.speed = 100 # in pixels / second
2424
self.steer = 0
2525

26-
def on_update(self, delta_time):
26+
def update(self, delta_time):
2727

2828
self.angle += self.steer
2929

3030
self.angle += (1 - 2*random.random()) * NOISE_ANGLE
3131

32-
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
33-
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
32+
self.center_x += self.speed * delta_time * math.cos(math.radians(-self.angle))
33+
self.center_y += self.speed * delta_time * math.sin(math.radians(-self.angle))
3434

3535
self.center_x %= WIDTH
3636
self.center_y %= HEIGHT
@@ -57,11 +57,11 @@ def setup(self):
5757
self.boids.append(boid)
5858

5959
def on_draw(self):
60-
arcade.start_render()
60+
self.clear()
6161
self.boids.draw()
6262

6363
def on_update(self, delta_time):
64-
self.boids.on_update(delta_time)
64+
self.boids.update(delta_time)
6565

6666
def on_key_press(self, symbol: int, modifiers: int):
6767
if symbol == arcade.key.LEFT:

notebooks/tps/boids/.teacher/boids-07.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ class Boid(arcade.Sprite):
2828
def __init__(self):
2929
super().__init__(IMAGE)
3030
self.center_x, self.center_y = 100, 100
31-
self.angle = -135
31+
self.angle = 135
3232
self.speed = 100 # in pixels / second
3333
self.steer = 0
3434

35-
def on_update(self, delta_time):
35+
def update(self, delta_time):
3636

3737
self.angle += self.steer
3838

3939
self.angle += (1 - 2*random.random()) * NOISE_ANGLE
4040

41-
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
42-
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
41+
self.center_x += self.speed * delta_time * math.cos(math.radians(-self.angle))
42+
self.center_y += self.speed * delta_time * math.sin(math.radians(-self.angle))
4343

4444
self.center_x %= WIDTH
4545
self.center_y %= HEIGHT
@@ -69,13 +69,13 @@ def setup(self):
6969
self.obstacles.append(Obstacle(WIDTH//2, HEIGHT//2))
7070

7171
def on_draw(self):
72-
arcade.start_render()
72+
self.clear()
7373
self.boids.draw()
7474
self.obstacles.draw()
7575

7676
def on_update(self, delta_time):
77-
self.boids.on_update(delta_time)
78-
self.obstacles.on_update(delta_time)
77+
self.boids.update(delta_time)
78+
self.obstacles.update(delta_time)
7979

8080
def on_key_press(self, symbol: int, modifiers: int):
8181
if symbol == arcade.key.LEFT:

notebooks/tps/boids/.teacher/boids-08.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ class Boid(arcade.Sprite):
3131
def __init__(self):
3232
super().__init__(IMAGE)
3333
self.center_x, self.center_y = 100, 100
34-
self.angle = -135
34+
self.angle = 135
3535
self.speed = 100 # in pixels / second
3636
self.steer = 0
3737

38-
def on_update(self, delta_time):
38+
def update(self, delta_time):
3939

4040
self.angle += self.steer
4141

4242
self.angle += (1 - 2*random.random()) * NOISE_ANGLE
4343

44-
self.center_x += self.speed * delta_time * math.cos(math.radians(self.angle))
45-
self.center_y += self.speed * delta_time * math.sin(math.radians(self.angle))
44+
self.center_x += self.speed * delta_time * math.cos(math.radians(-self.angle))
45+
self.center_y += self.speed * delta_time * math.sin(math.radians(-self.angle))
4646

4747
self.center_x %= WIDTH
4848
self.center_y %= HEIGHT
@@ -76,13 +76,13 @@ def setup(self):
7676
self.obstacles.append(Obstacle(ox, oy))
7777

7878
def on_draw(self):
79-
arcade.start_render()
79+
self.clear()
8080
self.boids.draw()
8181
self.obstacles.draw()
8282

8383
def on_update(self, delta_time):
84-
self.boids.on_update(delta_time)
85-
self.obstacles.on_update(delta_time)
84+
self.boids.update(delta_time)
85+
self.obstacles.update(delta_time)
8686

8787
def on_key_press(self, symbol: int, modifiers: int):
8888
if symbol == arcade.key.LEFT:

0 commit comments

Comments
 (0)