Skip to content

Commit 3e5212b

Browse files
committed
snake/drawing: Use nested loops instead of pathlib.Path
1 parent d2b9f45 commit 3e5212b

File tree

2 files changed

+34
-62
lines changed

2 files changed

+34
-62
lines changed

lessons/snake/drawing/index.md

Lines changed: 19 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def on_draw():
229229
window.clear()
230230
for x, y in snake:
231231
green_image.blit(x * TILE_SIZE, y * TILE_SIZE,
232-
width=TILE_SIZE, height=TILE_SIZE)
232+
width=TILE_SIZE, height=TILE_SIZE)
233233

234234
pyglet.app.run()
235235
```
@@ -267,10 +267,10 @@ def on_draw():
267267
window.clear()
268268
for x, y in snake:
269269
green_image.blit(x * TILE_SIZE, y * TILE_SIZE,
270-
width=TILE_SIZE, height=TILE_SIZE)
270+
width=TILE_SIZE, height=TILE_SIZE)
271271
for x, y in food:
272272
red_image.blit(x * TILE_SIZE, y * TILE_SIZE,
273-
width=TILE_SIZE, height=TILE_SIZE)
273+
width=TILE_SIZE, height=TILE_SIZE)
274274

275275
pyglet.app.run()
276276
```
@@ -336,43 +336,29 @@ bottom_top = pyglet.image.load('snake-tiles/bottom-top.png')
336336
Ale obrázků je spousta, tímhle způsobem by to bylo zdlouhavé a nejspíš bys
337337
na některý zapomněl{{a}}.
338338

339-
Proto Pythonu řekneme, aby nám dal všechny soubory s koncovkou `.png` v daném
340-
adresáři.
341-
Na to se dá použít třída `Path` z modulu [`pathlib`](https://docs.python.org/3/library/pathlib.html).
342-
Zkus si do nového souboru, třeba `experiment.py`, napsat následující kód
343-
a spustit ho.
344-
Dokážeš vysvětlit, co dělá?
339+
Proto si obrázky načteme automaticky, v cyklu, a dáme je do slovníku.
345340

346-
```python
347-
from pathlib import Path
348-
349-
TILES_DIRECTORY = Path('snake-tiles')
350-
351-
for path in TILES_DIRECTORY.glob('*.png'):
352-
print(path)
353-
```
341+
Program bude vypadat takhle:
354342

355-
My z každého souboru potřebujeme nejlépe jméno, tedy místo
356-
`snake-tiles/right-end.png` jenom `right-end`.
357-
Na to naštěstí existuje atribut `stem` (*kořen*, t.j. jméno bez přípony).
358-
Místo `print(path)` použij:
343+
* Začni s prázdným slovníkem.
344+
* Pro každý *začátek* (`bottom`, `end`, `left`, `right`, `top`):
345+
* Pro každý *konec* (`bottom`, `end`, `left`, `right`, `top`, `dead`, `tongue`):
346+
* Budeme načítat obrázek „<var>začátek</var>-<var>konec</var>“; tento
347+
<var>klíč</var> si dej do proměnné
348+
* Načti obrázek <var>klíč</var>.png
349+
* Ulož obrázek do slovníku pod <var>klíč</var>.
359350

360351
```python
361-
print(path.stem)
352+
snake_tiles = {}
353+
for start in ['bottom', 'end', 'left', 'right', 'top']:
354+
for end in ['bottom', 'end', 'left', 'right', 'top', 'dead', 'tongue']:
355+
key = start + '-' + end
356+
image = pyglet.image.load('snake-tiles/' + key + '.png')
357+
snake_tiles[key] = image
362358
```
363359

364-
Funguje? Máš vypsané všechny možné kousky hada?
365-
366-
Teď budeme chtít načíst obrázky do *slovníku*.
367-
*Klíče* slovníku, podle kterých budeme vyhledávat, budou jména, která jsi
368-
právě vypsal{{a}}.
369-
*Hodnoty* pak budou pygletí obrázky, které ve hře můžeš rovnou vykreslit.
370-
371-
Začni s prázdným slovníkem, `{}`, a v cyklu `for` do něj postupně přidávej
372-
záznamy.
373360
Pak celý slovník vypiš.
374-
375-
Až to budeš mít, měl by výpis vypadat asi takhle:
361+
Výpis vypadat asi takhle:
376362

377363
```
378364
{'right-tongue': <ImageData 64x64>, 'top-tongue': <ImageData 64x64>,
@@ -382,22 +368,6 @@ Až to budeš mít, měl by výpis vypadat asi takhle:
382368
...
383369
```
384370

385-
{% filter solution %}
386-
```python
387-
from pathlib import Path
388-
389-
import pyglet
390-
391-
TILES_DIRECTORY = Path('snake-tiles')
392-
393-
snake_tiles = {}
394-
for path in TILES_DIRECTORY.glob('*.png'):
395-
snake_tiles[path.stem] = pyglet.image.load(path)
396-
397-
print(snake_tiles)
398-
```
399-
{% endfilter %}
400-
401371

402372
## Housenka
403373

lessons/snake/logic/index.md

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@ XXX - Nestíhám dopsat, omlouvám se
1616
Tvůj program teď, doufám, vypadá nějak takhle:
1717

1818
```python
19-
from pathlib import Path
20-
2119
import pyglet
2220

2321
TILE_SIZE = 64
24-
TILES_DIRECTORY = Path('snake-tiles')
2522

2623
snake = [(1, 2), (2, 2), (3, 2), (3, 3), (3, 4), (3, 5), (4, 5)]
2724
food = [(2, 0), (5, 1), (1, 4)]
2825

2926
red_image = pyglet.image.load('apple.png')
3027
snake_tiles = {}
31-
for path in TILES_DIRECTORY.glob('*.png'):
32-
snake_tiles[path.stem] = pyglet.image.load(path)
28+
for start in ['bottom', 'end', 'left', 'right', 'top']:
29+
for end in ['bottom', 'end', 'left', 'right', 'top', 'dead', 'tongue']:
30+
key = start + '-' + end
31+
image = pyglet.image.load('snake-tiles/' + key + '.png')
32+
snake_tiles[key] = image
3333

3434
window = pyglet.window.Window()
3535

@@ -166,12 +166,9 @@ Pro kontrolu můžeš svůj program porovnat s mým (ale nejde o jediné správ
166166

167167
{% filter solution %}
168168
```python
169-
from pathlib import Path
170-
171169
import pyglet
172170

173171
TILE_SIZE = 64
174-
TILES_DIRECTORY = Path('snake-tiles')
175172

176173
class State:
177174
def __init__(self):
@@ -188,8 +185,11 @@ class State:
188185

189186
red_image = pyglet.image.load('apple.png')
190187
snake_tiles = {}
191-
for path in TILES_DIRECTORY.glob('*.png'):
192-
snake_tiles[path.stem] = pyglet.image.load(path)
188+
for start in ['bottom', 'end', 'left', 'right', 'top']:
189+
for end in ['bottom', 'end', 'left', 'right', 'top', 'dead', 'tongue']:
190+
key = start + '-' + end
191+
image = pyglet.image.load('snake-tiles/' + key + '.png')
192+
snake_tiles[key] = image
193193

194194
window = pyglet.window.Window()
195195

@@ -816,7 +816,6 @@ from pathlib import Path
816816
import pyglet
817817

818818
TILE_SIZE = 64
819-
TILES_DIRECTORY = Path('snake-tiles')
820819

821820
class State:
822821
def __init__(self):
@@ -879,8 +878,11 @@ class State:
879878

880879
red_image = pyglet.image.load('apple.png')
881880
snake_tiles = {}
882-
for path in TILES_DIRECTORY.glob('*.png'):
883-
snake_tiles[path.stem] = pyglet.image.load(path)
881+
for start in ['bottom', 'end', 'left', 'right', 'top']:
882+
for end in ['bottom', 'end', 'left', 'right', 'top', 'dead', 'tongue']:
883+
key = start + '-' + end
884+
image = pyglet.image.load('snake-tiles/' + key + '.png')
885+
snake_tiles[key] = image
884886

885887
window = pyglet.window.Window()
886888

0 commit comments

Comments
 (0)