Uploaded by davronovazuhra58

1111.pptx1

advertisement
Графика в Python
1
Koordinatalar tizimi
kelib
chiqishi
X
(0,0)
y
x
(x,
y)
Y
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
2
Koordinatalarni aniqlash
(0,0)
tayanch
nuqtasi
( 100 ,
100 )
? )
( 50.150
__
( 100 ,
200 ) ?
Y
 К.Ю. Поляков, 2017 -2018
X
?
( 200 ,
200)
50
?
( 200 , 15
0)
( 200 , 2
50 )?
?
(3 00 ,
100 )
100
( 3? 5 0 , 15
0)
(3 00 ,
200
? )
http://kpolyakov.spb.ru
Графика в Python
3
Ranglarni boshqarish
Grafik modul ulanishi:
grafik importidan *
grafik modulining
Chiziq rangi:
qalam rangi (
qizil
)
oq, qora,
kulrang, ko'k, ko'k,
zangori, yashil, sariq, qizil, to'q
sariq, jigarrang, jigarrang,
binafsha,
Chiziq
qalinligi: binafsha, ...http://bit.ly/2mNrkoq
qalam o'lchami ( 2 )
To'ldirish rangi:
cho'tka rangi (
 К.Ю. "yashil"
Поляков, 2017 -2018 )
http://kpolyakov.spb.ru
Графика в Python
4
Ranglarni boshqarish ( RGB )
RGB rangi :
"sariq"
qalam rangi ( 255 , 255
, 0 ) R(
G ( yashil
B ( ko'k )
qizil )
)
0..255
0..255
0..255
cho'tka rangi
255 )
qalam rangi (
255 )
cho'tka rangi
255 )
qalam rangi (
 К.Ю. Поляков, 2017 -2018
( 255 , 0 ,
magenta
0 , 255 ,
"ko'k"
( 255 , 255 ,
0 , 0 , 0 )
"oq"
"qora"
http://kpolyakov.spb.ru
Графика в Python
5
Primitivlar (oddiy shakllar)
(x,y)
( x 1, y
1)
( x 1, y
1)
( x 5, y
5)
penColor ( 0 , 0 , 255 )
nuqta (x, y)
( x 2, y
2)
( x 2, y
2)
( x 3, y
3)
( x 4, y
 К.Ю. Поляков, 2017 -2018
4)
penColor ( 0 , 255 , 0 )
qator (x1, y1, x2, y2)
penColor ( 255 , 0 , 0 )
To (x1, y1)
lineTo (x2, y2)
lineTo (x3, y3)
lineTo (x4, y4)
lineTo (x5, y5)
http://kpolyakov.spb.ru
Графика в Python
6
Primitivlar (oddiy shakllar)
(10, 20)
( 50 , 40
( 10 , 10 )
)
( 10 , 5
) ,3
(050
0)
(5 0 , 5
0)
R=20
 К.Ю. Поляков, 2017 -2018
penColor ( "ko'k" )
brushColor ( "sariq" )
to'rtburchaklar ( 10 , 20 , 50
, 40 )
penColor ( "ko'k" )
brushColor ( "magenta" )
ko'pburchak ( [( 10 , 10 ), (
50 , 50 ),
( 10 , 50 ), ( 10 , 10 )] )
penColor ( "qizil" )
brushColor ( "yashil" )
doira ( 50 , 30 , 20 )
http://kpolyakov.spb.ru
Графика в Python
7
Misol
grafik importidan * _
(200, 50)
p en Rang ( "magenta" )
b shoshilinch Rang ( "ko'k" )
(100, 100)
r to'rtburchak ( 100 , 100 ,
300 , 200 )
b shoshilinch Rang ( "sariq"
)
( 200 , 150
)
(300, 200)
ko'pburchak ([( 100 , 100 ),
( 200 , 50 ),
( 300 , 100 ), ( 100 , 100
)])
p en Rang ( "oq" )
 К.Ю. Поляков, 2017 -2018
b shoshilinch Rang (http://kpolyakov.spb.ru
"yashil"
Графика в Python
8
Vazifalar
"3": "Uy"
"4": "Baqa"
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
9
Vazifalar
"5": "Toj"
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
10
dasturlash : Grafika
2018-03-22 _ Protseduralar
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
11
Protseduralar
Vazifa : figurani yarating:
? Ma'lum usullar bilan hal qilish mumkinmi ?
Xususiyat : uchta o'xshash raqam.
umumiy: o'lchamlar, burilish burchagi
farqlar: koordinatalar, rang
? Qancha koordinata o'rnatishingiz
kerak ?
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
12
Protseduralar (kichik dasturlar)
Jarayon ba'zi harakatlarni bajarish uchun mo'ljallangan
yordamchi algoritmdir.
Ilova :
• dasturning turli joylarida bir xil harakatlarni bajarish
• yaxshiroq tushunish uchun dasturni (yoki boshqa
protsedurani) pastki vazifalarga bo'lish
Vazifa
Kichik vazifa 1
1.1
1.2
 К.Ю. Поляков, 2017 -2018
1.3
2-
2.1 _ 2.2 _ 2.3 _
Quyi vazifa 3
3.1 _ 3.2 _ 3.3 _
http://kpolyakov.spb.ru
Графика в Python
13
Jarayonni qanday qurish kerak?
• bir xil yoki o'xshash harakatlarni ajratib ko'rsatish (
uchta shakl )
• ularda umumiy ( o'lchamlari, shakli, burilish burchagi
) va farqlarni ( koordinatalar, rang ) toping.
• farqlarni o'zgaruvchilar sifatida belgilang, ular
protsedura
!
Parametrlar - protseduraning ishlashi bog'liq
bo'lgan ma'lumotlar .
(x,y60)
60
( x , y 100
)
 К.Ю. Поляков, 2017 -2018
Variantlar:
x, y - burchak
koordinatalari
( x +100, y )
c - rangni to'ldirish
http://kpolyakov.spb.ru
Графика в Python
14
Jarayon
(x,y60)
60
belgilash _ _
_
(x,y
)
Ism
100
( x +100, y )
variantlari
def treug (x, y, c):
cho'tka rangi (c)
chekinis
h
ko'pburchak ( [(x,y), (x,y60 ),
(x+ 100 ,y), (x,y)] )
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
15
Jarayoni bilan dastur
60
( 100 ,
100
) ,
( 200
100 )
100
(2 00 , 1
60)
protsedura
chaqiruvlari
 К.Ю. Поляков, 2017 -2018
grafik importidan *
def treug (x, y, c):
cho'tka rangi (c)
ko'pburchak ([(x,y),(x,y60 ),
(x+ 100 ,y),(x,y)] )
penColor ( "qora" )
treug ( 100 , 100 , "ko'k" )
treug ( 200 , 100 , "yashil"
)
treug ( 200 , 160 , "qizil" )
yugurish ()argumentlar (parametr
qiymatlari)
http://kpolyakov.spb.ru
Графика в Python
16
Vazifalar
" 3 ": Bitta protseduradan foydalanib, rasm tuzing.
" 4 ": Bitta protseduradan foydalanib, rasm tuzing.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
17
Vazifalar
" 5 ": Bitta protseduradan foydalanib, rasm tuzing.
"6": Bitta protseduradan foydalanib, rasm tuzing.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
18
dasturlash : Grafika
3 . Velosipedlar
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
19
Looplardan foydalanish
40
100
160
40
? Nima
o'zgarmoqda ?
doira (40, 40, 20)
doira (100, 40, 20)
doira (160, 40, 20)
x
...
? qanday o'zgaradi?
40
"5 marta
x= 40
uchun i ichida diapazon ( 5 bajaring"
):
doira (x, 40 , 20 )
x x
+=+=
6060
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
20
Looplardan foydalanish
40
100
160
40
10 0
1 60
1- qator :
? 2-qator uchun qanday o'zgarishlar
?
x= 40
uchun i ichida diapazon ( 5Siz
):qila olasizmi?
bilan protsedura
doira (x, 40
40 , 20 )
parametr y !
y
x += 60
!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
21
Looplardan foydalanish
grafik importidan * _
def qatori (y):
x= 40
men
uchun
_ diapazon
( 5 ( 5 ):
uchun
i ichida
diapazon
): doira (x, y, 20 )
(x, y, 20 )
x +=doira
60
x
y=+=
4060
k uchun _ diapazon (protsedura
3 ):
chaqiruvi
qator (y)
y += 60
60 ga tushdi
yugurish ()
 К.Ю. Поляков, 2017 -2018
tartib
http://kpolyakov.spb.ru
Графика в Python
22
Vazifalar
" 3 ": Klaviaturadan N raqamini kiriting va 5 ta
doiradan iborat N qatorni chizing.
Misol ( N = 3 ) :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
23
Vazifalar
"4": Klaviaturadan N raqamini kiriting va
doiralardan N dan N gacha bo'lgan
to'rtburchaklar o'lchamini chizing .
Misol ( N = 3 ) :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
24
Vazifalar
" 5 ": Klaviaturadan N raqamini kiriting va
balandligi N bo'lgan doiralardan teng yonli
uchburchak chizing. Har bir qator o'z rangiga
bo'yalgan bo'lishi kerak.
Misol ( N = 3 ) :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
25
Vazifalar-2
" 3 ": Klaviaturadan N raqamini kiriting va 5 ta
rombdan iborat N vertikal qatorni chizing.
Misol ( N = 2) :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
26
Vazifalar-2
"4": sikl va protseduralardan foydalanib, naqsh
chizing. Klaviaturadan N naqshning
takrorlanish sonini kiriting.
Misol ( N = 3) :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
27
Vazifalar-2
"5": sikl va protseduralardan foydalanib, naqsh
chizing.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
28
dasturlash : Grafika
4 . Chiqish
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
29
Chiqish
N qator ( N=5)
( x 1, y
1)
? h ni qanday
x 1 +h
topish mumkin ?
h
h
x2  x1
N 1
X ni tsiklda o'zgartiring :
chiziq (x, y1, x, y2)
( x 2, y
2)
to'rtburchak (x1, y1, x2, y2)
chiziq (x1+h, y1, x1+h, y2)
chiziq (x1+2*h, y1, x1+2*h,
y2)
chiziq (x1+3*h,
x y1, x1+3*h,
x
y2)
... 2017 -2018
 К.Ю. Поляков,
http://kpolyakov.spb.ru
Графика в Python
30
Chiqish
N qator ( N=5)
( x 1, y
1)
o'zgarmoqd
a!
chiziq x
(x, y1,x x, y2)
? Qanday
x=?
h
( x 2, y
2)
o'zgarmoqda ?
1-qator uchun
x = x1 + h
men uchun _ diapazon
(N):
chiziq (x, y1, x, y2)
keyingi qator
x += h
uchun
 К.Ю. Поляков, 2017 -2018
" N marta
bajaring"
? Nima yomon
?
http://kpolyakov.spb.ru
Графика в Python
31
Chiqish
grafik importidan * _
x1 = 100 ; y1 = 100
x2 = 300 ; y2 = 200
N= 10
to'rtburchak
(x1,y1,x2,y2)
( x 2 , y h = (x2-x1)/(N+1)
x = x1 + h
2)
men uchun _ diapazon (N):
chiziq (x, y1, x, y2)
x += h
yugurish ()
N qator
( x 1, y
1)
h
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
32
Murakkab inkubatsiya
a
( x 1, y
1)
( x 3+ a ,
y 1)
? Qanday topish
mumkin a va h ?
a  x1  x2
( x 2, y
2)
h
( x 3, y
2)
x3  x2
h
N 1
chiziq ( x1+h, y1, x1+ga, y2) ;
chiziq ( x1+2*h, y1, x1+2*ga, y2)
;
chiziq ( x1+3*h, y1, x1+3*ga, y2)
x
X qanday o'zgaradi
xa
;
?
Boshida:
Bir
tsiklda:
...
?
x = x1 + h
 К.Ю. Поляков, 2017 -2018
x += h
http://kpolyakov.spb.ru
Графика в Python
33
Juda murakkab soya
( x 1, y
1)
h
?h
topiladi va h y
?
x
hy
N
x qanday
x2  x1
hx 
N 1
y2  y1
hy 
N 1
Boshida:
x = x1+hx
y = y1+hy
Bir tsiklda:
x + = hx
y += hy
( x 2, y
2)
chiziq ( x1, y1+hy, x1+hx, y1+hy) ;
chiziq( x1, y1+2*hy, x1+2*hx, y1+2*hy)
;
chiziq( x1, y1+3*hy, x1+3*hx, y1+3*hy)
y
x
y
;
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
34
Vazifalar
" 3 ": Klaviaturadan satrlar sonini kiriting , rasm
tuzing va inkubatsiya qiling :
"4": Klaviaturadan qatorlar sonini kiriting , raqamni
yarating va inkubatsiya qiling :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
35
Vazifalar
"5": klaviaturadan qatorlar sonini kiriting va
raqamni yarating:
" 6 ": Klaviaturadan qatorlar sonini kiriting va
raqamni yarating:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
36
dasturlash : Grafika
5 . Hududlarni to'ldirish
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
37
Turli ranglar bilan to'ldiring
( x 1, y
1)
x x+
h
N qator
h
kulrang: R=G=B
cho'tka rangi (c, c,
c)
to'rtburchak (x, y1,
x+h,
y2)o'zgartirish bosqichi:
Rangni
( x 2, y
2)
hc = 255 // N
x = x1; c = 0
uchun i ichida diapazon (N):
cho'tka rangi (c, c, c)
to'rtburchak (x, y1, x+h,
y2)
x += h; c += hc
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
38
Vazifalar
"3": Klaviaturadan chiziqlar sonini kiriting va barcha
maydonlarni turli xil ranglar bilan to'ldirib, raqamni
yarating.
"4": Klaviaturadan chiziqlar sonini kiriting va barcha
maydonlarni turli ranglar bilan to'ldirib, raqamni yarating.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
39
Vazifalar
"5": Klaviaturadan chiziqlar sonini kiriting va barcha
maydonlarni turli ranglar bilan to'ldirib, raqamni yarating.
yoki
"6": Klaviaturadan chiziqlar sonini kiriting va barcha
maydonlarni turli ranglar bilan to'ldirib, raqamni yarating.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
40
dasturlash : Grafika
6 . Chizma funktsiyalari
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
41
Funktsional grafiklar
Vazifa: y = x
2
funksiya grafigini tuzing -2 dan 2 gacha
bo'lgan oraliqda .
Y
Tahlil:
maksimal qiymat
ymax _ = 4 da x = ±2
minimal qiymat
ymin _ = 0 da x = 0
X
Muammo: funktsiya matematik koordinatalar tizimida
berilgan, u piksellarda koordinatalarini ko'rsatib, ekranda
qurish kerak .
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
42
Koordinatani o'zgartirish
Matematik
koordinata tizimi
(0,
0)
Y
x
(0,
0)
_
y0
y
x
(x,
y)
y
e
( x e, y
e)
e
X
k - masshtab (ekrandagi bitta
segment tasvirining uzunligi)
 К.Ю. Поляков, 2017 -2018
Ekran koordinata tizimi
(piksel)
x
0
x
e=
x0 _
+ kx
y e=y 0-
http://kpolyakov.spb.ru
Графика в Python
43
Koordinata o'qlari
(0,
0)
x
0
( x 0,
0)
_
y0
150
(0 ,y 0
)
( x 0, y 0
+20 )
( x 0 +150 ,
y 0)
chiziq ( 0 , y0, x0+ 150 , y0)
chiziq (x0, 0 , x0, y0+ 20 )
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
44
Koordinata o'qlarini chizish
grafik importidan *
x0 = 150 # kelib chiqishi
y0 = 250
k = 50
# masshtab
xmin = -2 ; xmax = 2 # x chegaralar
chiziq ( 0 , y0, x0+ 150 , y0)
chiziq (x0, 0 , x0, y0+ 20 )
...
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
45
Nuqtalar bo'yicha qurish
...
x=xmin # x ning
h = 0,02 # qadam x
penColor ( "qizil" )
x<=xmax esa :
y = x*x # funksiyasi
ekran koordinatalari
xexe
= x0
+ k*x
= x0
+ k*x
(piksellarda)
yeye
= y0
- k*y
= y0
- k*y
nuqta (xe, ye) ekranda
x += h # keyingi nuqtaga
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
46
Nuqtalarni chiziqlar bilan ulash
G'oya: avval xotirada nuqtalar massivini yaratamiz , keyin
nuqtalarni chiziqlar bilan bog'laymiz ( ko'pburchak )
ball = [] # bo'sh massiv
x<=xmax esa :
y = x*x
massivga nuqta
xe = x0 + k*x
qo'shing
ye = y0 - k*y
ball.
qo'shish
((xe,
ye))
ball.
qo'shish
((xe,
ye))
x += h
penColor ( "qizil" )
polyline (nuqta) # chiziq chizish!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
47
Vazifalar
" 3 ": Funksiyaning grafigini chizing
y  x2
segmentida [-2,2].
"4": Funksiya grafiklarini tuzish
Va
yx
2
y  x2
segmentida [-2,2].
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
48
Vazifalar
" 5 ": Funktsiya grafiklarini chizish
2
2
x


y
Va x  y
segmentida [-2,2].
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
49
dasturlash : Grafika
7. Animatsiya
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
50
Animatsiya
Animatsiya (ing. animatsiya ) ekrandagi tasvirni jonlantirish.
Qiyinchilik : 400x400 pikselli ko'k
kvadrat ichida 20x20 pikselli sariq
kvadrat chapdan o'ngga siljiydi. Esc
tugmasi bosilganda dastur to'xtaydi
yoki kvadrat ko'k maydonning
chegarasiga etib keldi.
(x,y
)
Bog'lash: Ob'ekt holati koordinatalari (
( x +20, y
x, y) bilan beriladi
+20)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
51
Animatsiya printsipi
1. x,y) nuqtasida chizish
2. bir necha millisekundlik kechikish
3. ob'ektni o'chiring
4. koordinatalarini o'zgartirish ( x,y )
5. 1-bosqichga o'ting
! Python -da chizmani tashkil etuvchi barcha
shakllar
ob'ektlardir (ular
o'zlarini qayta chizishlari mumkin)!
ob'ekt
eksa ofsetlari
moveObjectBy (obj, dx, dy)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
52
Boshlovchi rasm
grafik importidan *
ko'k
kvadrat
brushColor ( "ko'k" )
to'rtburchak ( 0 , 0 , 400 , 400 )
x= 100
y= 100
boshlash
koordinatalari
sariq
kvadrat
penColor ( "sariq" )
brushColor ( "sariq" )
obj = to'rtburchak (x, y, x+ 20 ,
y+ 20 )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
53
Harakat
def yangilash ():
moveObject tomonidan (obj, 5 , 0 )
agar x Koord ( obj ) >= 380 : agar
chiqilsa
yopish () # chegaradan tashqarida
x - koordinata
onTimer ( yangilash , 50 )
qo'ng'iroqlarni
yangilash har 50
ms
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
54
Escape
Voqea (eng. event ) - dasturdagi ba'zi ob'ektlarning
holatini o'zgartirish (tugmachani bosish, sichqonchani
bosish, oynani ko'chirish yoki o'lchamini o'zgartirish
va hokazo).
voqea boshqaruvchisi
Esc kalit kodi
= 27
def tugmasi bosilgan (hodisa):
agar event.keycode == VK_ESCAPE:
yopish () # oynani yoping
istalgan
tugma
onKey ( tugmacha bosilgan
)
bosilganda
qo'ng'iroq qiling
voqea ishlovchisini
o'rnatish
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
55
To'liq dastur
grafik importidan *
def yangilash ():
...
protseduralar
def tugma bosilgan (hodisa):
...
brushColor ( "ko'k" )
to'rtburchak ( 0 , 0 , 400 , 400 )
x= 100
y= 100
penColor ( "sariq" )
brushColor ( "sariq" )
obj = to'rtburchak (x, y, x+ 20 , y+
20 )
hodisani
onKey ( tugmacha bosilgan
)
boshqarish
onTimer ( yangilash , 50 )
yugurish
()
 К.Ю.
Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
56
Vazifalar
"3": Kvadrat o'ngdan chapga
siljiydi:
"4": Ikki kvadrat qarama-qarshi
yo'nalishda harakat qiladi:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
57
Vazifalar
"5": Ikki kvadrat qarama-qarshi yo'nalishda
harakatlanadi va ko'k kvadratning devorlarini
itarib yuboradi:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
58
Kalit boshqaruvi
Vazifa : Moviy kvadrat ichidagi sariq kvadrat o'q tugmalari
bilan boshqariladi. Kalit kodlari:
chapga - 37 yuqoriga - 38 Esc - 27
o'ngga - 39 pastga - 40
VK_ESCAPE
Muammo : harakat yo'nalishini qanday o'zgartirish mumkin?
Voqea boshqaruvchisi :
=37
def tugmasi bosilgan (hodisa):
agar event.keycode == VK_LEFT:
=39
moveObjectBy ( obj , - 5 , 0 )
elif event.keycode == VK_RIGHT:
moveObjectBy ( obj , 5 , 0 ) VK_UP = 38
... # bundan keyin - o'zingiz ...
VK_DOWN = 40
onKey ( tugmacha bosilgan ) # to'plam ishlov
beruvchisi
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
59
Vazifalar
" 3 ": Eng boshida joylashgan
kvadrat pastki o'ng
burchakda joylashgan bo'lib,
o'qlarni bosganingizda faqat
yuqoriga yoki chapga siljiydi:
"4": O'qlar bosilganda kvadrat
harakatlanadi, lekin ko'k
kvadratdan tashqariga chiqa
olmaydi:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
60
Vazifalar
" 5 " : Ikki kvadrat, biri strelkalar,
ikkinchisi boshqa tugmalar
bilan boshqariladi. Ikkalasi ham
ko'k maydondan nariga o'ta
olmaydi.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
61
Talab bo'yicha boshqaruv
Qiyinchilik : Sariq kvadrat doimiy ravishda harakatlanadi va
o'q tugmachalarini bosganingizda yo'nalishini o'zgartiradi.
Bo'sh joy tugmasini bosganingizda, u to'xtaydi.
Muammo : harakat yo'nalishini qanday o'zgartirish mumkin?
Yechim :
def yangilash ():
...
Biz nimani
moveObjectBy ( obj
d ,
x 5dy, 0 )
o'zgartiryapmiz
...
?
onTimer ( yangilash , 50 )
bo'lishi kerak
!
?
!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
Klaviatura bosishni qanday "ushlash"
mumkin?
62
Bu global
def tugma bosilgan (hodisa): o'zgaruvchilar!
global dx , dy
agar event.keycode == VK_LEFT :
dx = -5
?
dy = 0?
Qolgan kalitlar haqida nima
...
deyish mumkin?
onKey ( tugmacha bosilgan )
?
Bo'sh joy :
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
63
To'liq dastur
grafik importidan *
def yangilash ():
...
protseduralar
def tugma bosilgan (hodisa):
...
# ko'k kvadrat chizing
x = 100 ; y= 100
global
dx = 0 ; dy = 0
o'zgaruvchilar
penColor ( "sariq" )
brushColor ( "sariq" )
obj = to'rtburchak (x, y, x+ 20 ,
y+ 20 )
hodisani
onKey ( tugmacha bosilgan
)
boshqarish
onTimer ( yangilash , 50 )
yugurish
 К.Ю.
Поляков, 2017 -2018()
http://kpolyakov.spb.ru
Графика в Python
64
Vazifalar
" 3 " : Dasturni tuzing va ishga
tushiring.
"4" : Kvadrat ko'k kvadrat
chegarasidan tashqariga
chiqa olmaydi, u devor bilan
to'qnashganda darhol
to'xtaydi.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
65
Vazifalar
" 5 " : Kvadrat devorlardan
qaytariladi.
"6": Kvadrat diagonal bo'ylab
harakatlanishi mumkin (yana 4 ta
tugmachadan foydalaning) va
devorlardan sakrab tushishi
mumkin.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
66
"Ilon"
Vazifa : ilon
bosh va bir nechta
tana qismlaridan iborat bo'lib,
o'q tugmachalarini bosganda doimo
harakat qiladi va
yo'nalishini o'zgartiradi . Bo'sh joy
tugmasini
bosganingizda
, u to'xtaydi.
Muammolar :
1) ilon ma'lumotlarini qanday saqlash
kerak?
2) uni qanday qilib to'g'ri yo'nalishda
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
67
Ilonni qanday saqlash kerak?
Snake = kvadrat havolalar massivi
(x,
a
y)
ilon = [obj0, obj1, obj2, obj3, obj4]
ilon = []
bosh uchun chegara va
penColor ( "sariq" )
to'ldirish rangi
brushColor ( "sariq" )
uchun i inrange (N):
obj = to'rtburchak ( x+i *a, y, x+i * a+a ,
y+a )
qolganlari yashil
ilon. qo'shish ( obj )
brushColor ( "yashil" )
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
68
Ilonni qanday harakatlantirish kerak?
!
avvalgisiga o'tadi !
koordinatalar
oldingi havola
newCoord = koordlar (ilon[k- 1 ])
moveObjectTo (ilon[k], newCoord [ 0 ],
newCoord [ 1 ])
K -chi havola uchun :
? Havolalar qanday tartibda saralanishi
kerak?
 К.Ю. Поляков, 2017 -2018
oxirgidan!
http://kpolyakov.spb.ru
Графика в Python
69
Ilonni qanday harakatlantirish kerak?
Butun ilon:
boshdan tashqari,
def moveSnake ( xNew , yNew ):oxirgidan büstü
global x, y
k uchun _ diapazon ( len (ilon)- 1 , 0
,- 1 ):
newCoord = koordlar (ilon[k- 1 ])
moveObjectTo (ilon[k], newCoord [ 0 ],
newCoord [ 1 ])
moveObjectTo (ilon[ 0 ], xNew, yNew)
boshingizni
x = xYangi
harakatlantiring
y = y Yangi
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
70
Ilonni qanday harakatlantirish kerak?
!
Harakat bosqichi har doim a !
Qulaylik bilan shunday: dx, dy = -1, 0 yoki 1
def tugma bosilgan (hodisa):
global dx , dy
agar event.keycode == VK_LEFT :
dx = -1 _
dy = 0
agar ikkalasi ham
nol bo'lsa, harakat
...
qilish kerak emas!
def yangilash ():
agar dx yoki dy :
dy*a
harakat ilon ( dx*a
x + dx *a ,y
+ dy *a
)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
71
To'liq dastur
grafik importidan *
def Snake-ni harakatga keltiring (xYangi, yNew):
...
def yangilash ():
...
def tugma bosilgan (hodisa):
...
# ko'k kvadrat chizing
x = 100 ; y= 100 # bosh koordinatalari
dx = 0 ; dy = 0
# boshida joyida qoladi
a = 10 N = 20 # o'lcham va havolalar soni
# ilonni boshlang'ich holatiga torting
onKey ( tugmacha bosilgan )
onTimer ( yangilash , 50 )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
72
Vazifalar
" 3 " : Dasturni tuzing va ishga
tushiring.
"4" : Ilon ko'k kvadratdan
tashqariga chiqa olmaydi (
devorda to'xtaydi).
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
73
Vazifalar
" 5 " : Ilon dala chegarasi bilan
toʻqnashganda, u shu chegara
boʻylab sudralay boshlaydi.
"6": Agar ilon o'zini kesib
o'tsa, o'yin tugaydi.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
74
tasodifiy raqamlar
Tasodifan…
Tasodifiy tanlov :
• ko'chada bir do'st bilan uchrashish
• musobaqalar uchun qur'a tas
• plastinkani sindirish
• 10 rublni toping
• lotereyada yutuq raqamlari
• lotereya yutib oling
Qanday qilib tasodifiy olish mumkin?
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
75
Kompyuterda tasodifiy raqamlar
Elektron generator
• maxsus qurilma kerak
• natijalarni takrorlash mumkin emas
Pseudo-tasodifiy raqamlar - tasodifiy sonlarning
xususiyatlariga ega, ammo har bir keyingi raqam berilgan
formula bo'yicha hisoblanadi.
O'rta kvadrat usuli (J. von Neumann)
makka
jo'xori
564321
318458191041
458191
kvadrat
• kichik davr
(10 6 ta raqamdan keyin ketmaketlik takrorlanadi)
209938992481
938992
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
76
Chiziqli kongruensial generator
X : = ( a*X + b ) % c # interval 0 dan c-1
gacha
X : = ( X + 7 ) % 10 # interval 0 dan 9 gacha
X : =  7  4  1  8  5  2
0
2  9  6  3  0
makkaj
aylanish
o'xori
! Parametrlarni to'g'ri tanlash muhimdir
a , b va bilan !
GCC kompilyatori :
a = 1103515245
b = 12345
c = 2 31
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
77
Tasodifiy raqamlar generatori
tasodifiy
Ingliz tasodifiy - tasodifiy
[a,b] oraliqdagi butun sonlar :
X = tasodifiy _ _ randint ( 1 , 6 ) # soxta
so'z . raqam
Y = tasodifiy _ _ randint ( 1 , 6 ) #
Generator
[0,1) boshqa
:
allaqachon
raqam!
X = r a ndom.r a ndom () # psevdoso'z .
raqam
Y = r a ndom.r a ndom () # boshqa raqam!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
78
Tasodifiy raqamlar generatori
tasodifiy importdan *
hamma narsani
ulang!
Ingliz tasodifiy - tasodifiy
[a,b] oraliqdagi butun sonlar :
X = randint ( 10 , 60 ) # psevdo-tasodifiy
raqam
Y = randint ( 10 , 60 ) # boshqa raqam!
Generator [0,1) :
X = tasodifiy ( ) ; _ # psevdo-tasodifiy
raqam
Y = r a ndom () # bu boshqa raqam!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
79
tasodifiy raqamlar
Vazifa : 400 x 300 pikselli to'rtburchakni
tasodifiy rangdagi nuqtalar bilan teng ravishda
to'ldiring
Tasodifiy nuqta koordinatalarini qanday olish
x = randint ( 0 , 399 )
mumkin?
y = randint ( 0 , 299 )
Bir xillikka qanday erishish mumkin?
qachon avtomatik ravishda taqdim etiladi
foydalanish randin funktsiyalari
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
80
Ro'yxatdagi tasodifiy rang nuqtasi
tasodifiy import tanlovidan _
Hammasi
variantlari
...
ranglar = [ "qizil" , "yashil" ,
"ko'k" ,
"qora" , "#FFFF00" ]
tasodifiy
col = tanlov
tanlash
kol(ranglar)
qalam rangi ( ??? )
chek qo'yish
nuqta (x, y)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
81
Tasodifiy rang nuqtasi ( RGB )
RGB rangi :
"sariq"
qalam rangi ( 255 , 255
, 0 ) R(
G ( yashil
B ( ko'k )
qizil )
)
0..255
0..255
0..255
r = randint ( 0 ,
g = randint ( 0 ,
b = randint ( 0 ,
qalam rangi
???
r,(g,
b
nuqta (x, y)
 К.Ю. Поляков, 2017 -2018
255 )
255 )
255 )
)
http://kpolyakov.spb.ru
Графика в Python
82
Butun dastur
grafik importidan * _
tasodifiy import tanlovidan _
ranglar = [ "qizil" , "yashil" , "ko'k" ,
"qora" , "#FFFF00" ]
def newPoint ():
10 ms dan
x = randint ( 0 , 399 )
keyin yangi
y = randint ( 0 , 299 )
nuqta
col = tanlov (ranglar)
qalam rangi ( rang )
nuqta (x, y)
Escape
def tugma bosilgan (hodisa):
agar event.keycode == VK_ESCAPE:
yopish ()
onKey ( tugmacha bosilgan ) hodisa ishlov
onTimer ( newPoint , 10 )
beruvchilarini
yugurish ()
sozlash
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
83
Vazifalar
"3": kvadratni tasodifiy rangdagi nuqtalar bilan
to'ldiring. klaviaturadan kvadrat o'lchamini
kiriting:
Misol:
Kvadrat hajmini kiriting:
150
"4": ikkita maydonni tasodifiy rangli nuqta bilan
to'ldiring:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
84
Vazifalar
"5": maydonni tasodifiy rangdagi nuqtalar bilan
to'ldiring:
yoki
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
85
dasturlash : Grafika
8. O'yinlar
 К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
Графика в Python
86
Aylanadigan to'p bilan tank
x0 _ x 1 ( x ,
1
y 1)
(0,0)
y1
H
y0

?X
1 ni qanday
topish
mumkin va y1 ?
x1  x0  L cos 
y1  y0  L sin 
chiziq (x0, y0, x1,
y1)
doira (x0, y0, Vt/
V
2 )
to'rtburchak (x0-Vt/ 2 , y0-Y/
2 ,
x0+W/ 2 , y0+H/ 2 )
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
87
Boshlovchi rasm
grafik importidan * _
import matematika
H= 60 ; W= 30 ; L= 40 # tank o'lchamlari
x0 = 200 ; y0 = 400 ; burchak = 90 # to'p
brushColor ( "#6b8e23" )
to'rtburchak (x0-V/ 2 , y0- Y/ 2 , x0+V/ 2 ,
y0+Y/ 2 )
ramka
a = burchak * matematik. pi / 180 # radianga
x1 = x0+L*matematik. chunkimagistr
(a)
al
y1 = y0-L*matematik. gunoh (a)
qalam o'lchami ( 5 )
chiziq (x0, y0, x1, y1)
qalam o'lchami ( 1 )
minora
brushColor ( "#556b2f" )
doira (x0, y0, Vt/ 2 )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
88
To'pni aylantirish animatsiyasi
def tugma bosilgan (hodisa):
agar event.keycode == VK_LEFT:
qurol chizish (burchak + 5 ) # chapga 5
daraja
elif event.keycode == VK_RIGHT:
qurol chizish (burchak - 5 ) # o'ngga 5
daraja
elif event.keycode == VK_ESCAPE:
yopish ()
...
onKey ( tugmacha bosilgan )
DrawGun protsedurasini yozishingiz kerak
!
!
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
89
To'pni chizish va aylantirish
G'oya : biz birinchi marta chizamiz, keyin koordinatalarni
o'zgartiramiz.
birinchi Yo'q -
"bo'sh"
def drawGun (angleNew):
global burchak, qurol # global
o'zgaruvchilar
burchak = burchak Yangi # yangi burchakni
eslang
aRad = burchak * matematik. pi /180 #
radianga
x1 = x0 + L * matematika. cos (aRad)
y1 = y0 - L * matematika. gunoh (aRad)
agar qurol == Yo'q : # agar bu birinchi
chiziqning
marta
bo'lsa ...
"manzilini" eslab
yangi koordinatalar
qurol
= chiziq (x0, y0, x1, y1)
qoling
massivi
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
90
To'pni chizish va aylantirish
U qanday ishlaydi:
qurol = Hech kim # hali qurol chizmagan
qurol chizish (burchak) # birinchi marta
durang
qurol = chiziq (x0, y0, x1, y1)
# endi qurol qator manzilini o'z ichiga
oladi
...
def tugma
bosilgan (qurol,
(hodisa):
ChangeCoord
[(x0,y0), (x1,y1)] )
qurol chizish (burchak + 5 ) #aylantirish
_
# shunchaki koordinatalarni
o'zgartiring
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
91
To'liq dastur
grafik importidan * _
import matematika
def tugma bosilgan (hodisa):
...
protseduralar
def drawGun ( angleNew ):
...
H= 60 ; W= 30 ; L= 40
boshlang'ich
x0 = 200 ; y0 = 400 ; burchak = 90
qiymatlari
qurol = yo'q
brushColor ( "#6b8e23" )
ramka
to'rtburchak (x0-V/ 2 , y0- Y/ 2 , x0+V/ 2 , y0+Y/ 2
)
qalam o'lchami ( 5 ) qurol
chizilgan qurol ( burchak)
qalam o'lchami ( 1 )
minora
brushColor ( "#556b2f" )
doira (x0, y0, Vt/ 2 )
onKey ( tugmacha bosilgan )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
92
Vazifalar
"3": qarama-qarshi yo'nalishda o'rnatilgan qurol
bilan tank yasang:
"4": Yon tomonga o'rnatilgan qurol bilan tank
yasang. Boshqaruv - "yuqoriga" va "pastga"
tugmalari:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
93
Vazifalar
"5": ikkita tank yasang, bitta to'p "chap" va "o'ng"
tugmachalari bilan boshqariladi, ikkinchisi "yuqoriga" va "pastga" tugmalari bilan.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
94
To'pdan otish
(0,0)
x0 _
Ob'ekt yaratish:
x0 = 200 ; y0 = 400
r= 3
# snaryad radiusi
brushColor ( "qora" )
o'q = doira (x0, y0, r)
y0
bo'sh
joyni
bosing"
ob'ekt kodini
eslab qoling
Harakat:
moveObjectBy (market, 0 , 5 )
tomonidan
X
 К.Ю. Поляков, 2017 -2018
tomonidan
Y
http://kpolyakov.spb.ru
Графика в Python
95
Derazadan tashqarida to'xtang
1. ob'ektning
2. agar u 0 dan kichik bo'lsa, u holda
• trafikni to'xtatish
• snaryadni dastlabki holatiga qaytarish
(x 1 ,
ob'ekt koordinatalari:
y 1 )
(x 2 ,y
(x 1 , y 1 , x 2 , y 2 )
2
)
y = koordinatlar (o'q)[ 1 ] yuqori chap
burchak
agar y < 0 bo'lsa :
isFlying = False
( x 0 -r , y
0 -r )
moveObjectTo (oʻq, x0-r, y0-r)
isFlying - mantiqiy o'zgaruvchi
To'g'ri - snaryad uchadi, Yolg'on - uchmaydi.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
96
Animatsiyani qanday tartibga solish kerak?
har 30 msda
chaqiriladi
def yangilash ():
global isFlying, bullet
agar uchayotgan bo'lsa:
# agar uchib
ketsa ...
y = koordinatlar (o'q)[ 1 ]
agar y < 0 bo'lsa : # agar ketgan bo'lsa
...
isFlying = False
moveObjectTo (oʻq, x0-r, y0-r)
boshqa : # oldinga uchadi...
moveObjectBy (market, 0 , -5 )
...
 К.Ю.
Поляков, 2017 -2018
http://kpolyakov.spb.ru
onTimer
( yangilash , 30 )
Графика в Python
97
Harakatni qanday boshlash kerak?
tugma bosilganda
chaqiriladi
def tugma bosilgan (hodisa):
global isFlying
agar event.keycode == VK_SPACE:
isFlying = To'g'ri #uchib ketdi!
elif event.keycode == VK_ESCAPE:
yopish () #ishni tugatish
...
onKey ( tugmacha bosilgan )
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
98
To'liq dastur
grafik importidan * _
def yangilash ():
protseduralar
...
def tugmasi bosilgan (hodisa):
...
x0 = 200 ; y0 = 400 ; r= 3
brushColor ( "qora" )
o'q = doira (x0, y0, r)
isFlying = False
onKey ( tugmacha bosilgan )
onTimer ( yangilash , 30 )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
99
Vazifalar
"3": Chapdan o'ngga tortishish simulyatsiyasi.
Ekrandan chiqqandan so'ng, snaryad o'zining
boshlang'ich nuqtasiga qaytadi.
"4": snaryad uchadigan tankni tugating:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
100
Vazifalar
" 5 ": ikkita tank bir vaqtning o'zida o't ochadi.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
101
Vazifalar
" 6 ": minorali tank. Otish barrel burilgan
yo'nalishda sodir bo'ladi:
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
102
stend otish
(0,0)
Bal: 1
 К.Ю. Поляков, 2017 -2018
1. plastina ob'ektlarini yaratish
Platelarni yaratish
2. plitalarni siljiting
Plitalar
harakatlantiring
3. plastinkaga tegib yoki
yo'qligini tekshiring
To'qnashuvni
tekshiring
4. ma'lum bir plastinkaga tegib
yoki yo'qligini tekshiring
urish
http://kpolyakov.spb.ru
Графика в Python
103
Plitalar qatorini yaratish
def Plitalar yaratish ( N ):
global plitalar # global massiv
yPlitalar = 100 # hammasi bir xil y
koordinatasiga
plitalar = []
# massiv bo'sh bo'lganda
men uchun _ diapazon (N):
brushColor ( randColor ())
p = doira ( randint ( 0 , 500 ), # x markaz
yPlitalar,
#y markaz
randint ( 10 , 20 )) # radius
plitalar. qo'shish (p) # massivga qo'shing
...
Plitalar yaratish ( 5 ) # protsedura
chaqiruvi
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
104
Cymbal harakati
def Plitalar ():
global plitalar # global massiv
plitalardagi p uchun : Har bir plastinka
uchun
moveObjectBy (p, -2 , 0 ) # siljish 2 ga
qoldi
x1,y1,x2,y2 = koordinatalar (p)
agar x1 < 0 : # agar chegaradan
tashqarida bo'lsa ...
500
# o'ngga sakrash kuni ...
( x 1, y 1)
moveObjectBy (p, randint ( 500 , 600 ),
0 )
( x 2, y 2)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
105
Bir piyola urish
def checkTo'qnashuv ():
global isFlying, o'q, plitalar
plitalardagi p uchun :
agar urish (p):
# plastinkani o'ngga tashlang
moveObjectBy (p, randint ( 500 , 600 ),
0 )
# snaryad boshlang'ich
nuqtasiga
moveObjectTo (oʻq, x0-r, y0-r)
isFlying = False # to'xtatilgan raketa
hit (p) - qaytaruvchi mantiqiy funksiya
tanaffus # bir vaqtning o'zida faqat
To'g'ri , agar o'q p bilan to'qnashgan bo'lsa va
bitta
plastinka
yolg'on
, duch kelmasa.
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
106
Snaryad bu idishga tegdimi?
?
o'tkazib yuborilgan
urish
( x p, y p
)
«Ur» sharti
formula shaklida qanday
yoziladi?
markazlar orasidagi masofa
d  ( xb  xc )  ( yb  yc )
Rp _
2
r
( x b,
y b)
 К.Ю. Поляков, 2017 -2018
!
"Urish":
2
d  (r  R p )
2
2
http://kpolyakov.spb.ru
Графика в Python
107
Snaryad bu idishga tegdimi?
def urish (p):
...
agar d2 <= ( Rp + r)**2:
qaytish To'g'ri
boshqa :
qaytish Yolg'on
def urish (p):
...
qaytish d2 <= ( Rp + r)**2
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
108
Snaryad bu idishga tegdimi?
def urish (p):
global o'q
( x b,
y b)
# snaryad koordinatalari
x1,y1,x2,y2 = koordinatlar (o'q) ( x , y )
1
1
xb = x1 + r # snaryad markazi
yb = y1 + r
( x 2, y 2)
# taom koordinatalari
( x 1p , y 1p )
x1p,y1p,x2p,y2p = koordinatlar (p)
xp = (x1p + x2p) / 2
( x p,
yp = (y1p + y2p) / 2
y p)
( x 2p, y 2p)
Rp = (x2p - x1p) / 2
d2 = ( xb-xp )**2 + ( yb-yp )**2
qaytish d2 <= (Rp +r )** 2
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
Ushbu funktsiyalarni qanday chaqirish
mumkin?
109
def yangilash ():
global isFlying, bullet
Plitalar
()
movePlates()
agar uchayotgan bo'lsa:
# agar uchib
ketsa ...
y = koordinatlar (o'q)[ 1 ]
agar y < 0 bo'lsa : # agar ketgan bo'lsa
...
isFlying = False
moveObjectTo (oʻq, x0-r, y0-r)
boshqa
: # oldinga uchadi...
checkCollision()
moveObjectBy (market, 0 , -5 )
har 30
to'qnashuvni tekshirish
() msda
chaqiriladi
...
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
110
To'liq dastur
grafik importidan * _
# barcha funksiyalar shu yerda
...
x0 = 200 ; y0 = 400 ; r= 3
Plitalar yaratish ( 5 )
brushColor ( "qora" )
o'q = doira (x0, y0, r)
isFlying = False
onKey ( tugmacha bosilgan )
onTimer ( yangilash , 30 )
yugurish ()
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
111
O'yin hisobini qanday olib tashlash mumkin?
!
ball
Hisob qanday va
qachon
o'zgaradi ?
Birinchisi : ball = 0
Xitda :
Bal: 1
Xol + = 1
turi elementi )
( x,y
fon
Yorliq yaratish :
)
lbl = yorliq ( "Baho: 0" , 10 , 200 , bg
= "oq" )
raqamdan qator
Yorliq matnini o'zgartirish :
lbl[ "matn" ] = " Baho: " + str (bal)
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
112
Vazifalar
"3": dasturni tuzing va ishga tushiring. Otish
tezligini oshiring.
"4": Chapdan o'ngga otish holati uchun "3" bo'yicha
topshiriqni bajaring (to'ldirgichlar yuqoridan
pastga uchadi). Tankni torting, uning og'zidan
snaryad uchadi.
Bal: 12
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
113
Vazifalar
" 5 ": Vazifani "4" bilan bajaring: kichikroq
plastinkani urish uchun o'yinchi ko'proq ball
oladi.
Bal: 12
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Графика в Python
114
Vazifalar
"6": Aylanadigan to'p bilan tank yasang. Snaryad
barreldan xuddi shu yo'nalishda uchadi.
Kichikroq plastinkani urish uchun o'yinchi
ko'proq ball oladi.
Bal: 12
 К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
Download