Skip to content

Commit 679c736

Browse files
committed
Snake: Put entire game in one file, move toroid topo into extension
1 parent 434e995 commit 679c736

File tree

7 files changed

+589
-253
lines changed

7 files changed

+589
-253
lines changed

courses/snake/info.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,11 @@ plan:
6666
- lesson: snake/logic
6767
- title: Zabalení spustitelného souboru (bonus)
6868
url: null
69+
- title: Rozšíření
70+
slug: extensions
71+
date: 2018-09-01
72+
time:
73+
start: '18:00'
74+
end: '18:30'
75+
materials:
76+
- lesson: snake/toroid

lessons/snake/drawing/index.md

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ musí o hře „pamatovat“, aby mohl aktuální stav zobrazit?
1414

1515
Bude potřebovat například aktuální polohu všech částí hada: kde má začátek?
1616
Kroutí se doprava nebo doleva? Jak je dlouhý?
17-
Naopak barvu hada se stavu ukložit nepotřebuješ – každý had v téhle hře bude
17+
Naopak barvu hada ve stavu uložit nepotřebuješ – každý had v téhle hře bude
1818
stejný.
1919

2020
Napadne tě, jak polohu hada zapsat pomocí čísel, seznamů a dalších základních
@@ -35,7 +35,7 @@ Každý bod v rovině (třeba na obrazovce!)
3535
je možné popsat dvěmi čísly: <var>x</var>-ovou a <var>y</var>-ovou souřadnicí.
3636
Ta <var>x</var>-ová říká, jak moc vlevo je bod od nějakého počátku,
3737
ta <var>y</var>-ová udává jak moc je nahoře.
38-
My za onen „počátek“ zvolíme roh okýnka, ve kterém se bude plazit náš had.
38+
My za onen „počátek“ zvolíme roh okýnka, ve kterém se bude náš had plazit.
3939

4040
Na rozdíl od školní geometrie se had bude plazit po čtverečkové mřížce.
4141
Je to jako na šachovnici – když jde pěšec na D5, D značí, jak moc je to
@@ -100,10 +100,6 @@ se souřadnicemi (10, 20).
100100
Na to, abychom hada vykreslili, použijeme okýnko z Pygletu.
101101
Tady je základní kostra programu Pyglet, které už bys měl{{a}} rozumět.
102102

103-
Udělej si nový, prázdný adresář na hadí hru, a kostru si
104-
zkopíruj do souboru `ui.py`.
105-
Budeme ji dál rozvíjet.
106-
107103
```python
108104
import pyglet
109105

@@ -116,6 +112,10 @@ def on_draw():
116112
pyglet.app.run()
117113
```
118114

115+
Udělej si nový, prázdný adresář na hadí hru, a kostru si
116+
zkopíruj do souboru `had.py`.
117+
Budeme ji dál rozvíjet.
118+
119119
<img src="{{ static('green.png') }}" alt="" style="display:block; float:right; margin: 2px; border: 1px solid #ccc; border-radius: 1px;">
120120
Stáhni si soubor [green.png]({{ static('green.png') }}) – zelený čtvereček –
121121
a dej ho do adresáře, kam píšeš kód.
@@ -133,7 +133,7 @@ Potom zkus dovnitř do funkce `on_draw` přidat vykreslení obrázku na souřadn
133133
green_image.blit(40, 50, width=10, height=10)
134134
```
135135

136-
Program spusť (`cd` do nového adresáře; `python ui.py`). Funguje?
136+
Program spusť (`cd` do nového adresáře; `python had.py`). Funguje?
137137
(Je docela důležité, aby fungoval – nevidíš-li zelený čtvereček,
138138
nečti dál a program radši oprav.)
139139

@@ -201,17 +201,16 @@ for x, y in snake:
201201
...
202202
```
203203

204-
Funguje to? Vidíš v tom – aspoň zhruba – hada
205-
(i když je poskládaný ze čtverečků)?
204+
Funguje to? Vidíš v tom – aspoň zhruba – hada poskládaného ze čtverečků?
206205

207206
{{ figure(
208207
img=static('coords-blocks.svg'),
209208
alt="Had na „šachovnici“ a ukázka programu",
210209
) }}
211210

212211
Jestli ne, nezoufej, zkontroluj si to znovu, poptej se na radu.
213-
Řešení využij až jako krajní možnost, jak pokračovat dál – nebo na kontrolu
214-
správného řešení.
212+
Ukázkové řešení využij až jako krajní možnost, jak pokračovat dál.
213+
Nebo pro kontrolu.
215214

216215
{% filter solution %}
217216
```python
@@ -239,12 +238,11 @@ pyglet.app.run()
239238

240239
## Krmení
241240

242-
<img src="{{ static('red.png') }}" alt="" style="display:block; float:right; margin: 2px; border: 1px solid #ccc; border-radius: 1px;">
243241
<img src="{{ static('apple.png') }}" alt="" style="display:block; float:right; margin: 2px; border: 1px solid #ccc; border-radius: 1px;">
244242
Aby bylo ve hře co dělat, budeme potřebovat pro hada krmení.
245-
Stáhni si do adresáře s projektem obrázek `apple.png` (ať už jednoduchý
246-
čtvereček nebo detailnější obrázek), a zkus vykreslit jídlo třeba
247-
na následující souřadnice:
243+
Stáhni si do adresáře s projektem obrázek
244+
[apple.png](({{ static('apple.png') }}) a zkus vykreslit
245+
jablíčka na následující souřadnice:
248246

249247
```python
250248
food = [(2, 0), (5, 1), (1, 4)]
@@ -278,12 +276,13 @@ pyglet.app.run()
278276
```
279277
{% endfilter %}
280278

281-
Používáš-li detailnější obrázek, možná si všimneš, že má trošičku „zubaté“ hrany.
282-
To je dáno způsobem, jakým v Pygletu obrázek vykreslujeme.
283-
Úplné vysvětlení by zabralo příliš času, proto ukážu jen řešení.
284-
Až se naučíš grafiku víc do hloubky, pochopíš co se tu děje :)
279+
Možná si všimneš, že obrázek má ve hře trošičku „zubaté“ hrany.
280+
To je dáno způsobem, jakým v Pygletu vykreslujeme.
281+
Úplné vysvětlení by se do tohoto návodu nevešlo, potřebuje trochu hlubší
282+
znalosti počítačové grafiky.
283+
Proto uvedu jen řešení.
285284

286-
Do funkce `on_draw`, hned za `clear`, dej následující dva řádky:
285+
Do funkce `on_draw`, hned za `clear`, dej následující tři řádky:
287286

288287
```python
289288
# Lepší vykreslování (pro nás zatím kouzelné zaříkadlo)
@@ -319,7 +318,8 @@ Obrázek se jmenuje <var>odkud</var>-<var>kam</var>.png.
319318

320319
> [note]
321320
> Co jsou taková ta divná „hadí vajíčka”?
322-
> To je pro přímad, že by had byl jen jedno políčko dlouhý – a tedy měl hlavu
321+
> <img src="{{ static('snake-tiles/tail-head.png') }}" alt="" style="display:block; float:left; margin: 2px; border: 1px solid #ccc; border-radius: 1px;">
322+
> To je pro případ, že by had byl jen jedno políčko dlouhý – a tedy měl hlavu
323323
> i ocas na stejném políčku.
324324
> V naší hře se do takového stavu nedostaneme (had bude začínat s délkou 2),
325325
> ale může se stát, že se do něj dostaneš omylem při vývoji hry.
@@ -372,7 +372,7 @@ právě vypsal{{a}}.
372372

373373
Začni s prázdným slovníkem, `{}`, a v cyklu `for` do něj postupně přidávej
374374
záznamy.
375-
Pak slovník vypiš.
375+
Pak celý slovník vypiš.
376376

377377
Až to budeš mít, měl by výpis vypadat asi takhle:
378378

@@ -458,9 +458,9 @@ Místo toho, aby byl všude stejný kousek hada,
458458
ale budeme chtít vybrat vždycky ten správný.
459459

460460
Jak na to?
461-
462461
Podle čeho ho vybrat?
463462

463+
Pojďme si to vyzkoušet vedle.
464464
Vytvoř soubor `smery.py` a napiš do něj:
465465

466466
```python
@@ -533,16 +533,15 @@ vrať se k materiálům k předchozím lekcím (hlavně k úvodu do Pythonu),
533533
zkoušej a objevuj… A časem na to přijdeš.
534534

535535
Až se to stane, zkus své řešení co nejvíc *zjednodušit* a pak ho zakomponovat
536-
do vykreslovací funkce.
537-
To by už nemělo být příliš složité:
536+
do vykreslovací funkce místo existujícího cyklu `for x, y in snake`.
538537

539538
```python
540-
for ??? in ???snake???:
539+
for ... in ...:
541540
...
542-
x = ???
543-
y = ???
544-
odkud = ???
545-
kam = ???
541+
x = ...
542+
y = ...
543+
odkud = ...
544+
kam = ...
546545
...
547546

548547
snake_tiles[odkud + '-' + kam].blit(

0 commit comments

Comments
 (0)