Daiktas
Speciali klasė, skirta programuoti judančius paveiksliukus. Iš Daiktų patogu sudėlioti žaidimo arba asmeninio internetinio puslapio grafinius elementus, taip pat juos kilnoti ir sukioti.
Sudėtingesniems judesiams programuoti skirta klasė Veikėjas.
Paprastas pavyzdys
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)
pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)
Daiktas.atsirask
komandai reikalingi du parametrai - x ir y. Šiame pavyzdyje, medis atsiras koordinatese x=100 , y = 100, o pilis - koordinatėse x = 300 , y = 100. Koordinatės skaičiuojamos nuo viršutinio kairiojo kampo.
Turėk omenyje, kad Daiktai negali persidengti. Jeigu bandytum medžiui nurodyti tokias koordinates, kai medis persidentų su pilimi, tai medis.atsirask
komanda nieko neįvykdytų, ir medis liktų kur likęs.
Atsiradimas ir pasislėpimas
Daiktai turi komandas atsirask
ir pasislėpk
.
atsirask
komanda gali nurodyti naujas koordinates, o jei niekas nenurodyta - tiesiog padaro Daiktą vėl matomu.
pasislėpk
komanda tiesiog paslepia daiktą.
Sužinoti, ar Daiktas matomas, gali jam iškvietęs komandą arMatomas
(atsakymas bus True jei Daiktas matomas, ir False kitu atveju).
Štai programa, kurioje pilis atsiranda ir vėl pranyksta kas 2 sekundes:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/pilis1.png'])
pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask (x=300, y=300)
komanda pakeiskMatomumą():
jei pilis.arMatomas():
rašyk("pasislėpiau")
pilis.pasislėpk()
kituatveju:
rašyk("pasirodžiau")
pilis.atsirask()
angis.Taimeris(veiksmas = pakeiskMatomumą, dažnis = 2)
Šioje programoje sukuriamas naujas Taimeris , kuris kas dvi sekundes iškviečia komandą arba pilis.pasislėpk()
, arba pilis.atsirask()
Kliūtis (užimama vieta)
Daiktas gali užimti visą plotą, kurį dengia jo paveiksliukas - tada kiti Daiktai ir Veikėjai negali persidengti. Jeigu nori pamatyti, kokią vietą Daiktas iš tikrųjų užima ekrane, iškviesk jam komandą rodykZonas
:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)
medis.rodykZonas()
pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)
pilis.rodykZonas()
Čia violetiniai stačiakampiai rodo Daikto kliūtį - tai yra, zoną, kurioje negalima atsirasti kitiems Daiktams ir Veikėjams.
Tačiau kartais reikia nustatyti kitokią užimamą vietą nei paveiksliuko dydis. Tada reikia kliūtį sumažinti, ir Daiktas galės šiek tiek persidengti:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)
medis.nustatykKliūtį(x=50, y=110, plotis=40)
medis.rodykZonas()
pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)
pilis.nustatykKliūtį(x=10, y=120, plotis=180)
pilis.rodykZonas()
Atkreipk dėmesį į komandą nustatykKliūtį
. Ji nurodo, kokia bus šio Daikto (pilies arba medžio) kliūties zona.
Kaip matai, dabar pilis ir medis gali šiek tiek persidengti: dabar Angis užtikrina, kad nepersidengtų violetiniai stačiakampiai (t.y. Daikto kliūties zona), kurie yra mažesni už visą Daikto užimamą plotą (t.y. žalią stačiakampį).
Komanda rodykZonas() naudinga tik tuomet, kol dar programuoji ir taisai savo programą. Kai norėsi programa dalintis, nepamiršk ištrinti arba užkomentuoti šias vietas, kad zonų (t.y. žalių ir violetinių stačiakampių) neberodytų.
Sukiojimasis
Daiktas gali pasisukti tam tikra kryptimi. Tam reikalinga komanda sukis(laipsniai)
.
Štai kaip galima apsukti Daiktą 360 laipsnių:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)
kartok 360:
medis.sukis(laipsniai = 1)
angis.palauk(1)
Šiame pavyzdyje medis sukasi 1 laipsniu ir programa palaukia 1 milisekundę; visas veiksmas kartojamas 360 kartų. Tokiu būdu medis lėtai apsisuka aplink 360 laipsnių kampu.
Valdymas pele
Daiktas gali reaguoti į pelės paspaudimus, judinimus ir kt. signalus:
pelęUžvedus
pelęNuvedus
pelęPaspaudus
pelęAtleidus
pelęPaspaudusDešinįKlavišą
pelęAtleidusDešinįKlavišą
pelęJudinant
Štai pavyzdys, kaip suprogramuoti daiktų dingimą, ant jų paspaudus pele:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)
komanda pranyk(pelėsX, pelėsY):
medis.pasislėpk()
medis.pelęPaspaudus( veiksmas = pranyk )
Reagavimas į pelės signalus registruojamas taip: norimam Daiktui iškviečiama atitinkama komanda, pavyzdžiui, pelęPaspaudus
, o parametru nurodoma komanda, kurią kompiuteris įvykdys kada nors ateityje, tam įvykiui nutikus.
Svarbu: atkreipk dėmesį, registruojant veiksmą, nurodomas tik komandos pavadinimas be skliaustelių: medis.pelęPaspaudus(pranyk)
.
Svarbu: atkreipk dėmesį, kad registruotoji veiksmo komanda privalo turėti lygiai du parametrus - pavyzdžiui, pelėsX ir pelėsY - net jei šie parametrai ir nenaudojami. Veiksmo komanda su kitokiu parametrų skaičiumi nebus kviečiama.
Pavyzdžiui, komanda pranyk(x, y, z):
jau būtų klaida!
Prikabinimas prie pelės
Daiktas gali būti prikabinamas prie pelės, ir tokiu būdu nešiojamas per ekraną kartu su pelės kursoriumi.
- Daiktas.prisikabinkPriePelės()
- Daiktas.atsikabinkNuoPelės()
reikalingas žaidimas
pilis = žaidimas.Daiktas('pav/pilis1.png', 200, 200)
komanda prikabinkPilįPriePilies(x, y):
pilis.prisikabinkPriePelės()
pilis.pelęPaspaudus( prikabinkPilįPriePilies )
Piešimas
Daiktas gali būti "piešimo režime": perkeliant Daiktą į naują koordinatę, bus nupiešiama linija iš senosios koordinatės.
Piešimo režimas įjungiamas komanda piešim()
, o išjungiamas komanda nebepiešim()
.
Štai pavyzdys:
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/medis1.png'])
medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)
medis.piešim()
medis.atsirask(100, 200)
medis.atsirask(200, 200)
medis.atsirask(200, 100)
Šia programa medis
keliauja per keturias koordinates, ir palieka liniją.
Kitas pavyzdys: linijų piešimo programa.
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/stat/akmuo1.png'])
akmuo = žaidimas.Daiktas('pav/stat/akmuo1.png')
akmuo.piešim()
komanda brėžkLiniją(pelėsX, pelėsY):
akmuo.atsirask(pelėsX, pelėsY)
žaidimas.pelęPaspaudus(brėžkLiniją)
Ši programa perkelią Daiktą į pelės paspaudimo koordinates, ir iki to taško nupiešia liniją.
Dar vienas pavyzdys: piešimo programa.
reikalinga angis
reikalingas žaidimas
angis.naudosiuFailus(['pav/stat/akmuo1.png'])
akmuo = žaidimas.Daiktas('pav/stat/akmuo1.png')
komanda įjunkPiešimoRežimą(pelėsX, pelėsY):
akmuo.piešim()
komanda išjunkPiešimoRežimą(pelėsX, pelėsY):
akmuo.nebepiešim()
komanda perkelkAkmenį(pelėsX, pelėsY):
akmuo.atsirask(pelėsX, pelėsY)
žaidimas.pelęPaspaudus(įjunkPiešimoRežimą)
žaidimas.pelęAtleidus(išjunkPiešimoRežimą)
žaidimas.pelęJudinant(perkelkAkmenį)
Ši programa įjungia piešimo režimą paspaudus pelės mygtuką, o atleidus mygtuką - jį išjungia. Pelę judinant, programa perkelia Daiktą akmuo
į pelės koordinates. Tokiu būdu galima piešti.
Pilna specifikacija
(paveldi visus metodus iš Plytelės)
Konstruktorius
konstruktorius(failoVardas, x, y)
iš Plytelės paveldėti metodai
komanda naudokPaveiksliuką(failoVardas)
fonas = naudokPaveiksliuką;
komanda naudokAnimaciją(animacija)
komanda duokKoordinates()
komanda duokIšmatavimus()
komanda sukis(laipsniai, greitis)
komanda sukis(kryptis, greitis )
komanda pasislėpk()
slėpkis = pasislėpk;
komanda pasirodyk()
rodykis = pasirodyk;
komanda arMatomas()
yraMatomas = arMatomas
matomas = arMatomas
klasės Daiktas metodai
komanda teleportuokis(x, y);
atsirask = teleportuokis;
show = atsirask;
teleport = atsirask;
komanda duokKliūtį(): x, y, plotis, aukštis
komanda nustatykKliūtį(x, y, plotis, aukštis)
komanda prisikabinkPriePelės()
komanda atsikabinkNuoPelės()
komanda rodykZonas()
showZones = rodykZonas;
komanda slėpkZonas()
hideZones = slėpkZonas;
komanda piešim()
piešk = piešim;
penDown = piešim;
komanda nebepiešim()
nebepiešk = nebepiešim;
nepiešk = nebepiešim;
nepiešim = nebepiešim;
penUp = nebepiešim;
komanda pelęUžvedus(komanda)
komanda pelęNuvedus(komanda)
komanda pelęPaspaudus(komanda)
komanda pelęAtleidus(komanda)
komanda pelęPaspaudusDešinįKlavišą(komanda)
komanda pelęAtleidusDešinįKlavišą(komanda)
komanda pelęJudinant(komanda)