Skip to content

Commit b3a3de5

Browse files
committed
More work on Snake workshop
1 parent 3ce9db8 commit b3a3de5

File tree

8 files changed

+1597
-2
lines changed

8 files changed

+1597
-2
lines changed

lessons/projects/snake/drawing.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Nakresli mi hada
2+
3+
Většina videoher má vlastní svět – spoustu čísel, textů, seznamů a jiných
4+
datových objektů, které popisují všechno, co ve hře je – celý *stav* hry.
5+
Tenhle stav se časem mění, ať už automaticky nebo podle akcí hráče.
6+
A docela často – většinou zhruba šedesátkrát za vteřinu – se stav hry převede
7+
na obrázek, který se hráčovi ukáže.
8+
9+
Abys mohl{{a}} zobrazit hada, budeš napřed muset definovat stav hry – zadat
10+
to, co se má vykreslovat.
11+
12+
Zkus se zamyslet, co všechno bude ten stav obsahovat: co všechno si počítač
13+
musí o hře „pamatovat“, aby mohl aktuální stav zobrazit?
14+
15+
Bude potřebovat například aktuální polohu všech částí hada: kde má začátek?
16+
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
18+
stejný.
19+
20+
Napadne tě, jak polohu hada zapsat pomocí čísel, seznamů a dalších základních
21+
datových typů?
22+
23+
24+
## Reprezentace hada
25+
26+
Asi nejjednodušší způsob, jak si v počítači „zapamatovat“ herního hada,
27+
je pomocí seznamu souřadnic.
28+
29+
Pamatuješ si ze školy na kartézské souřadnice?
30+
To je taková ta část matematiky, co možná vypadala že nemá praktické využití.
31+
Pro počítačovou grafiku jsou ale souřadnice to co pro češtinu písmenka.
32+
Pojďme si je osvěžit.
33+
34+
Každý bod v rovině (třeba na obrazovce!)
35+
je možné popsat dvěmi čísly: <var>x</var>-ovou a <var>y</var>-ovou souřadnicí.
36+
Ta <var>x</var>-ová říká, jak moc vlevo je bod od nějakého počátku,
37+
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.
39+
40+
Na rozdíl od školní geometrie se had bude plazit po čtverečkové mřížce.
41+
Je to jako na šachovnici – když jde pěšec na D5, D značí, jak moc je to
42+
políčko vlevo od okraje a 5 jak moc „nahoře“.
43+
44+
Tady je had, který začíná na souřadnicích (1, 2) a hlavu má na (4, 5):
45+
46+
{{ figure(
47+
img=static('coords.svg'),
48+
alt="Had na „šachovnici“ se souřadnicemi",
49+
) }}
50+
51+
Možná si všimneš, že matematický zápis souřadnic – (1, 2) – odpovídá
52+
způsobu, jak se v Pythonu píšou <var>n</var>-tice.
53+
To není náhoda!
54+
Dvojice čísel je perfektní způsob, jak uložit souřdadnice kousku hada.
55+
56+
Had má ale kousků víc, a jinak dlouzí hadi jich budou mít různý počet.
57+
Na to je dobré použít seznam. Seznam souřadnic.
58+
A protože souřadnice pro nás budou dvojice čísel,
59+
seznam souřadnic bude dvojice čísel.
60+
61+
Had z obrázku výše bude v Pythonu vypadat takto:
62+
63+
```python
64+
had = [(1, 2), (2, 2), (3, 2), (3, 3), (3, 4), (3, 5), (4, 5)]
65+
```
66+
67+
Tohle je reprezentace hada – to, co je z hlediska hry potřeba o konkrétním
68+
hadovi vědět.
69+
70+
Počítačům (a programátorům?) to takhle stačí.
71+
My si to ale zkusme zobrazit barevně, ať hadovi rozumí i hráč naší budoucí hry.
72+
73+
74+
## Vykreslení hada
75+
76+
Na to, abychom hada vykreslili, použijeme okýnko z Pygletu.
77+
Tady je základní kostra programu Pyglet, které už bys měl{{a}} rozumět.
78+
Zkopíruj si ji do souboru `ui.py`; budeme ji dál rozvíjet.
79+
80+
```python
81+
import pyglet
82+
83+
had = [(1, 2), (2, 2), (3, 2), (3, 3), (3, 4), (3, 5), (4, 5)]
84+
85+
window = pyglet.window.Window()
86+
87+
@window.event
88+
def on_draw():
89+
window.clear()
90+
91+
@pyglet.clock.schedule
92+
def sched(dt):
93+
print(dt)
94+
95+
pyglet.app.run()
96+
```
97+
98+
U vykreslování hada musíme vyřešit jeden základní problém:
99+
převod *logických souřadnic* na souřadnice *obrazovky*.
100+
101+
Displeje počítačů fungují podobně jako naše souřadnicová „šachovnice“:
102+
jsou to čtvercové mřížky plné políček.
103+
Každému políčku – *pixelu* – lze nastavit barvu.
104+
Hlavní rozdíl proti šachovnici je v tom, že pixelů na obrazovce je mnohem,
105+
mnohem víc.
106+
107+
108+
{{ figure(
109+
img=static('coords-px.svg'),
110+
alt="Had na „šachovnici“ se souřadnicemi",
111+
) }}
112+
113+

lessons/projects/snake/index.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,61 @@
11
# Had
2+
3+
Pojďme si udělat hru!
4+
5+
Uděláme hru [Had](https://en.wikipedia.org/wiki/Snake_(video_game)),
6+
která existuje v různých variantách od sedmdesátých let.
7+
Je to ideální hra pro začínající programátory: technicky poměrně
8+
jednoduchá, známá (takže budeme řešit *jak* ji naprogramovat, spíš než
9+
*co* máme programovat), a zábavná (což možná produktivitě nesvědčí,
10+
ale výsledek nebude nudný).
11+
12+
Naše hra bude vypadat zhruba násldovně:
13+
14+
{{ figure(
15+
img=static('screenshot-finished.png'),
16+
alt="Screenshot hotové hry",
17+
) }}
18+
19+
Had se bude normálně pohybovat dopředu, ale hráč ho pomocí šipek na
20+
klávesnici může otáčet.
21+
Když had „vyleze“ ven z okýnka, objeví se na druhé straně.
22+
Na herní ploše bude jídlo, po jehož sežrání jídla had povyroste.
23+
Když had narazí sám do sebe, hra končí.
24+
25+
26+
## Osnova
27+
28+
Na začátku každého podobného projektu je dobré si ujasnit, co zhruba budeme
29+
dělat, rozvrhnout si práci, stanovit první krok, který povede k cíli.
30+
31+
U tohohle projektu je takové plánování už vyřešené, takže jednotlivé kroky
32+
na sebe budou plynule navazovat a budou seřazené tak, aby ses u to co nejvíc
33+
(a co nejlíp) naučil{{a}}.
34+
Podotýkám, že u „opravdového“ programování to tak většinou není, a cestu si
35+
musíš hledat {{gnd('sám', 'sama')}}.
36+
37+
Jak to tedy uděláme?
38+
39+
Nejdřív hada *vykreslíme* – převedeme seznamy, <var>n</var>-tice a čísla
40+
na obrazovku, zatím bez pohybování a co nejjednodušeji – bez obrázků,
41+
které je potřeba vybírat a otáčet.
42+
43+
Pak přidáme jídlo, hteré had bude jíst. Pro představu, hra bude zatím
44+
vypadat takto:
45+
46+
{{ figure(
47+
img=static('screenshot-initial.png'),
48+
alt="Screenshot první části hry",
49+
) }}
50+
51+
Potom hada oživíme – naprogramujeme logiku hry: pohyb, zatáčení, krmení,
52+
ale i narážení.
53+
54+
Nakonec, zbude-li čas a nálada, hada převlečeme do hezčího „kabátku“
55+
a zabalíme tak, aby se dla hrát i na počítačích, kde není nainstalovaný
56+
Python.
57+
58+
Připraven{{a}}? do toho!
59+
60+
* [Vykreslení hada](./drawing/)
61+

lessons/projects/snake/info.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ title: Had
22
style: md
33
attribution: Pro PyLadies CZ napsal Petr Viktorin, 2018.
44
license: cc-by-sa-40
5+
subpages:
6+
drawing:
7+
title: Kreslení hada

0 commit comments

Comments
 (0)