Skip to content

Commit 15a2a1d

Browse files
Merge pull request pyvec#53 from frenzymadness/autumn2019
[Ostrava] Add feedback for lesson about pyglet
2 parents 4720166 + d07e2ba commit 15a2a1d

3 files changed

Lines changed: 240 additions & 0 deletions

File tree

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {
6+
"slideshow": {
7+
"slide_type": "slide"
8+
}
9+
},
10+
"source": [
11+
"# Feedback k domácím projektům"
12+
]
13+
},
14+
{
15+
"cell_type": "markdown",
16+
"metadata": {
17+
"slideshow": {
18+
"slide_type": "slide"
19+
}
20+
},
21+
"source": [
22+
"## Problém s proměnnými - lokální vs. globální, mutable vs. immutable"
23+
]
24+
},
25+
{
26+
"cell_type": "code",
27+
"execution_count": null,
28+
"metadata": {},
29+
"outputs": [],
30+
"source": [
31+
"import pyglet\n",
32+
"from random import randint\n",
33+
"\n",
34+
"sirka = 1280\n",
35+
"vyska = 800\n",
36+
"rychlost_x = 0\n",
37+
"rychlost_y = 0\n",
38+
"\n",
39+
"window = pyglet.window.Window(sirka, vyska)\n",
40+
"\n",
41+
"obrazek = pyglet.image.load(\"ball.png\")\n",
42+
"sprite = pyglet.sprite.Sprite(obrazek)\n",
43+
"sprite.x = -100\n",
44+
"sprite.y = -100\n",
45+
"\n",
46+
"def tik(t):\n",
47+
" sprite.x = sprite.x + t * rychlost_x\n",
48+
" sprite.y = sprite.y + t * rychlost_y\n",
49+
" if sprite.x + obrazek.width > sirka or sprite.x < 0:\n",
50+
" rychlost_x = -rychlost_x\n",
51+
" if sprite.y + obrazek.height > vyska or sprite.y < 0:\n",
52+
" rychlost_y = -rychlost_y\n",
53+
"\n",
54+
"def klik(x, y, tlacitko, mod):\n",
55+
" sprite.x = x\n",
56+
" sprite.y = y\n",
57+
" rychlost_x = randint(-500, 500)\n",
58+
" rychlost_y = randint(-500, 500)\n",
59+
"\n",
60+
"def vykresli():\n",
61+
" window.clear()\n",
62+
" sprite.draw()\n",
63+
"\n",
64+
"pyglet.clock.schedule_interval(tik, 1/30)\n",
65+
"window.push_handlers(on_draw=vykresli, on_mouse_press=klik)\n",
66+
"\n",
67+
"pyglet.app.run()"
68+
]
69+
},
70+
{
71+
"cell_type": "markdown",
72+
"metadata": {},
73+
"source": [
74+
"Tento kód nefunguje, protože se uvnitř funkcí snažíme měnit obsah proměnných a zároveň přistupovat k jejich globálnímu stavu."
75+
]
76+
},
77+
{
78+
"cell_type": "markdown",
79+
"metadata": {
80+
"slideshow": {
81+
"slide_type": "slide"
82+
}
83+
},
84+
"source": [
85+
"## Řešení 1 - kouzelný příkaz `global`"
86+
]
87+
},
88+
{
89+
"cell_type": "code",
90+
"execution_count": null,
91+
"metadata": {},
92+
"outputs": [],
93+
"source": [
94+
"def tik(t):\n",
95+
" global rychlost_x, rychlost_y\n",
96+
" sprite.x = sprite.x + t * rychlost_x\n",
97+
" sprite.y = sprite.y + t * rychlost_y\n",
98+
" if sprite.x + obrazek.width > sirka or sprite.x < 0:\n",
99+
" rychlost_x = -rychlost_x\n",
100+
" if sprite.y + obrazek.height > vyska or sprite.y < 0:\n",
101+
" rychlost_y = -rychlost_y\n",
102+
"\n",
103+
"def klik(x, y, tlacitko, mod):\n",
104+
" global rychlost_x, rychlost_y\n",
105+
" sprite.x = x\n",
106+
" sprite.y = y\n",
107+
" rychlost_x = randint(-500, 500)\n",
108+
" rychlost_y = randint(-500, 500)"
109+
]
110+
},
111+
{
112+
"cell_type": "markdown",
113+
"metadata": {
114+
"slideshow": {
115+
"slide_type": "slide"
116+
}
117+
},
118+
"source": [
119+
"## Řešení 2 - slovníky a seznamy"
120+
]
121+
},
122+
{
123+
"cell_type": "code",
124+
"execution_count": null,
125+
"metadata": {},
126+
"outputs": [],
127+
"source": [
128+
"rychlost = {\"x\": 0, \"y\": 0}\n",
129+
"\n",
130+
"def tik(t):\n",
131+
" sprite.x = sprite.x + t * rychlost[\"x\"]\n",
132+
" sprite.y = sprite.y + t * rychlost[\"y\"]\n",
133+
" if sprite.x + obrazek.width > sirka or sprite.x < 0:\n",
134+
" rychlost[\"x\"] = -rychlost[\"x\"]\n",
135+
" if sprite.y + obrazek.height > vyska or sprite.y < 0:\n",
136+
" rychlost[\"y\"] = -rychlost[\"y\"]\n",
137+
"\n",
138+
"def klik(x, y, tlacitko, mod):\n",
139+
" sprite.x = x\n",
140+
" sprite.y = y\n",
141+
" rychlost[\"x\"] = randint(-500, 500)\n",
142+
" rychlost[\"y\"] = randint(-500, 500)"
143+
]
144+
},
145+
{
146+
"cell_type": "markdown",
147+
"metadata": {
148+
"slideshow": {
149+
"slide_type": "slide"
150+
}
151+
},
152+
"source": [
153+
"## Řešení 3 - třída a objekty"
154+
]
155+
},
156+
{
157+
"cell_type": "code",
158+
"execution_count": null,
159+
"metadata": {},
160+
"outputs": [],
161+
"source": [
162+
"import pyglet\n",
163+
"from random import randint\n",
164+
"\n",
165+
"sirka = 1280\n",
166+
"vyska = 800\n",
167+
"\n",
168+
"window = pyglet.window.Window(sirka, vyska)\n",
169+
"\n",
170+
"obrazek = pyglet.image.load(\"ball.png\")\n",
171+
"\n",
172+
"class Kulicka:\n",
173+
" def __init__(self, x, y):\n",
174+
" self.sprite = pyglet.sprite.Sprite(obrazek)\n",
175+
" self.sprite.x = x\n",
176+
" self.sprite.y = y\n",
177+
" self.rychlost_x = randint(-500, 500)\n",
178+
" self.rychlost_y = randint(-500, 500)\n",
179+
"\n",
180+
" def vykresli(self):\n",
181+
" self.sprite.draw()\n",
182+
" \n",
183+
" def tik(self, t):\n",
184+
" self.sprite.x = self.sprite.x + t * self.rychlost_x\n",
185+
" self.sprite.y = self.sprite.y + t * self.rychlost_y\n",
186+
" if self.sprite.x + obrazek.width > sirka or self.sprite.x < 0:\n",
187+
" self.rychlost_x = -self.rychlost_x\n",
188+
" if self.sprite.y + obrazek.height > vyska or self.sprite.y < 0:\n",
189+
" self.rychlost_y = -self.rychlost_y\n",
190+
"\n",
191+
"kulicky = []\n",
192+
"\n",
193+
"def tik(t):\n",
194+
" for kulicka in kulicky:\n",
195+
" kulicka.tik(t)\n",
196+
"\n",
197+
"def klik(x, y, tlacitko, mod):\n",
198+
" kulicky.append(Kulicka(x, y))\n",
199+
"\n",
200+
"def vykresli():\n",
201+
" window.clear()\n",
202+
" for kulicka in kulicky:\n",
203+
" kulicka.vykresli()\n",
204+
"\n",
205+
"pyglet.clock.schedule_interval(tik, 1/30)\n",
206+
"window.push_handlers(on_draw=vykresli, on_mouse_press=klik)\n",
207+
"\n",
208+
"pyglet.app.run()\n"
209+
]
210+
}
211+
],
212+
"metadata": {
213+
"celltoolbar": "Slideshow",
214+
"kernelspec": {
215+
"display_name": "Python 3",
216+
"language": "python",
217+
"name": "python3"
218+
},
219+
"language_info": {
220+
"codemirror_mode": {
221+
"name": "ipython",
222+
"version": 3
223+
},
224+
"file_extension": ".py",
225+
"mimetype": "text/x-python",
226+
"name": "python",
227+
"nbconvert_exporter": "python",
228+
"pygments_lexer": "ipython3",
229+
"version": "3.7.5"
230+
}
231+
},
232+
"nbformat": 4,
233+
"nbformat_minor": 2
234+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
title: Zpětná vazba k domácím projektům
2+
style: ipynb
3+
attribution: Pro PyLadies Ostrava napsal Lumír Balhar, 2019.
4+
license: cc-by-sa-40

runs/2019/pyladies-ostrava-podzim/info.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ plan:
167167
- title: Tahák na Pyglet
168168
url: https://pyvec.github.io/cheatsheets/pyglet/pyglet-basics-cs.pdf
169169
type: cheatsheet
170+
- lesson: feedback/ostrava10
171+
type: lesson
170172
- title: Třídy
171173
slug: class
172174
date: 2019-11-13

0 commit comments

Comments
 (0)