Upload
vivult
View
107
Download
0
Embed Size (px)
Citation preview
1 dalis: Programavimas Greenfoot’u
Ar įsivaizduojate, kas tai yra klasės ir objektai?
Tai išsiaiškinsime tiesiog parašydami žaidimą!
James Brucker
Kasetsart University 2010
Lietuviška (KTU) versija – 2011
Tomas Blažauskas, Eimutis Karčiauskas
Greenfootas: kitoks mokymasis
Greenfoot yra Java karkasas , kuris padės išmokti prorgamuoti.
Jis turi komponentus jūsų gyvenimo palengvinimui.
Jūs galite matyti ir sąveikauti su savo programa.
Nepaisant to – programuosite gryna Java.
Java
Greenfoot
Jūsų programa
Krabų programavimas
Pamėginsime suprogramuoti krabų žaidimą.
1. Paleiskite Greenfoot programą.
2. Atidarykite ktu-crab scenarijų...
Jis yra kataloge greenfoot\scenarios
Jei nepatinka ktu-crab, naudokite "crab”
3. Išsaugokite kaip "crabgame“:
Scenario -> Save a Copy As ...
"greenfoot\scenarios\crabgame"
4. Atidarykite "crabgame" scenarijų (ir uždarykite ku-crab)
Programos kūrimo planas
1 etapas
aiškinsimės kaip programuojama, naudojant Greenfoot
sukuriamas Krabas, kuris juda ir valgo Sliekus
sukuriamas Jūros Vėžys, kuris juda ir valgo Krabus
2 etapas
valdyti klaviatūrą (kad galėtume žaisti)
ir pridėti garsus
3 etapas
veikėjų animacija
taškų lenta
po 3 etapo
Patarimai tapti dar kūrybiškesniu
Patyrinėkite elgesį patys
Naudokite crabgame scenarijų.
1. Sukurkite naują Krabą (new Crab).
Dešiniu mygtuku spustelkite Crab.
Parinkite "new Crab( )".
Padėkite krabą į krabų “pasaulį” kairėje.
2. Dešiniu mygtuku spustelkite ant Krabo.
3. Kokią elgseną turi Krabas?
4. Kokią elgseną paveldi Krabas iš Animal klasės?
Krabų žaidimas
Čia yra “klasės"
Dešinys mygtukas naujo krabo sukūrimui
Krabo objektas sukurtas iš Krabo klasės
Suteikite krabui judėjimą ir pasisukimą
Dešiniu mygtuku spustelkite krabą...
inherited from Animal > move( )
Dar kartą iškvieskite meniu ir...
inherited from Animal > turn( int angle )
Veikia! Dabar pasirinkite "act( )" Krabo metodą.
act( ) yra Krabo klasės dalis.
Kas atsitinka?... Nieko neįvyksta.
Krabo elgsena
move( ) ir turn( ) yra krabo elgsenos dalis (metodai).
act( ) yra kita elgsenos dalis.
Elgsena apibrėžiama metodais, parašytais Java kalba.
Dabar rašysite Java kodą act( ) elgsenai.
Kodėl "act()" yra svarbusact( ) yra Greenfoot "run“ (vykdyti) scenarijaus dalis
Mes spaudžiame
Kai spaudžiame
Greenfoot iškviečia act() metodą pasaulio (world ) objektui ir kiekvienam veikėjui (actor) vieną kartą.
Greenfoot liepia pasauliui ir kiekvienam veikėjui vykdyti act( ) vėl ir vėl ir vėl...
Paredaguokite Krabo act( ) medotą
Pakeiskite act( ) taip, kad jis lieptų krabui judėti.
1. Redaguojame krabo programą:
a) Dešiniu mygtuku ant Crab klasės
b) pasirinkite Open editor
2. Koreguokite act( ) metodą tokiu būdu:
public void act( ){
move();}
Krabas: act( )
Spauskite "compile" Krabo klasės sukompiliavimui.
Uždarykite redaktoriaus langą(naujoje versijoje tai nebūtina)
Sukurkite naują krabą. Spauskite ">Act". Spauskite "►Run" tam kad
iškviesti act() daug kartų.
Protingesnis krabas
Kai paspaudžiate ">Run", kas atsitinka?
Liūdna – atsimušęs į sieną, užstringa
Reikia krabui įkrėsti proto.
Tarkime, pradžioje būtų gerai tokia elgsena:
moveJei esate pasaulio krašte,
tuomet pasisukite 15 laipsnių
atWorldEdge( )
Animal (gyvūnas) turi metodą, pavadintą: atWorldEdge( ).
Ką jis daro?
1) Padėkite krabą į pasaulio centrą. Dešiniu mygtuku parinkite:
Inherited from Animal -> atWorldEdge()
Kokia reikšmė?
2) Pajudinkite krabą į pasaulio kraštą.Dar kartą panaudokite
atWorldEdge().
Kokia reikšmė?
Naudokite atWorldEdge Krabo kode
Atidarykite Crab klasę redaktoriuje
Pakeiskite "act()" metodą šitaip:
public void act(){ // atlieka vieną judesio elementą
move(); // jei pasaulio krašte - pasisukti if ( atWorldEdge() ) turn( 15 );}
Sukompiliuokite Uždarykite redaktorių Sukurkite naują krabą ir paleiskite (Run)
Bus tiesa ("true“), jei krabas yra pasaulio krašte
Turite rašyti tiksliai taip kaip pateikta.
Kiekvienas Objektas turi savo žinias
Naudokite "new Crab( )" sukuriant 3 krabus.Pasukite kiekvieną krabą – padarykite kiekvieną krabą
skirtingą.Spauskite "►Run".Kiekvienas Krabo objektas elgiasi skirtingai.
turn(-90)
Kiekvienas krabas turi skirtingas atributų reikšmes.
Taigi, jie elgiasi skirtingai.
turn(-45)
Krabai išalko...
Reikia pašerti krabus kokiu nors maistu.
Sukurkime naują objekto “tipą" pavadintą slieku (Worm).
1. Dešiniu mygtuku spauskite Animal ir pasirinkite "New subclass..."
2. Pavadinkite Worm
3. Parinkite jam paveiksliuką.
Worm yra Klasė
Ką tik sukūrėte naują klasę "class" pavadintą Worm.
Sliekas (Worm) taip pat yra gyvūnas (Animal).
Dabar galime sukurti Worm objektus.
Pridėkite Worm objektų į pasaulį
1. Dešiniu mygtuku ant Worm pasirinkite "new Worm( )"
2. Kad greičiau sukurti daug sliekų: Parinkite Worm klasę Įspauskite SHIFT mygtuką ir dėliokite krabų
pasaulyje.
3. Padarykite krabą objektu.
4. ►Run
Kas atsitinka?
Išmokykite krabą suvalgyti slieką
užveskite krabą ant slieko
Dešiniu mygtuku ant krabo ir
inherited from Animal -> eat( Class cls )
įrašykite Worm.class (tipas daikto kurį norime valgyti).
Suprogramuokime krabą valgyti sliekus
Paredaguokite krabo programą (ir vėl)...
act( )
moveJei matote slieką,
suvalgykite sliekąkitaip jei esate pasaulio krašte,
pasisukite 15 laipsnių
new act() elgseną:
Paredaguokite krabo klasę (redaktoriuje)
Pakeiskite "act()" metodą šitaip:
public void act(){ move( ); // jei krabas mato valgomą objektą... if ( canSee( Worm.class ) )
eat( Worm.class );// jei pasaulio krašte - pasisukiteelse if ( atWorldEdge() )
turn( 15 );}
(1) Sukompiliuokite. (2) uždarykite redaktorių. | (3) Išmėginkite scenarijų.
Objektų išdėliojimas krabų pasaulyje
Tarkime, mes norime turėti jau išdėstytą krabų pasaulį, kiekvieną kartą paleisdami jį.
Pridėkite populate metodą krabų pasauliui tam, kad sukurti objektus:
populate( )
sukurti keletą sliekų
sukurti krabą
išdėstyti pasaulyje (atsitiktinai)
crabWorld.addObject( )
CrabWorld turi metodą pavadintą addObject( ).
Jis turi 1 parametrą: veikėją, kurį norime pridėti.
addObject() padeda objektą atsitiktinėje vietoje.
Išmėginkite!
new Crab( )
Daugeli objektų įdėjimas automatiškai
Tikslas: Realizuoti populate metodą pridedant daugybę
sliekų ir vieną krabą.
Redaguokite CrabWorld klasę, joje įrašykite:
public void populate( ){ // create worms
addObject( new Worm() );addObject( new Worm() );...// create one crab, tooaddObject( new Crab() );
}
Patikrinkite populate metodą
1. Dešiniu meniu krabų pasaulyje iškvieskite meniu
2. choose populate()
3. ►Run
Tegul pasaulis populate()’inasi pats
populate( ) yra naudingas, bet mes vis dar turime iškviesti jį per meniu.
Mes norime daugintis (populate) patys ;-)
Kaip?
Kvieskite populate() metodą CrabWorld viduje
Kiekviena klasė specialų metodą, vadinamą konstruktoriumi.
Konkstruktorius iškviečiamas visada, kai objektas sukuriamas.
Pridėkite populate() metodą CrabWorld konstruktoriui.
1. Paredaguokite CrabWorld klasę.
2. Pakeiskite "public CrabWorld()" tokiu būdu:
3. Pridėkite "populate();"
4. Sukompiliuokite ir
uždarykite redaktorių.
public CrabWorld() { super(500, 400, 1); setBackground("sand.jpg"); populate( );}
Čia yra konstruktorius
Geriau! Krabų pasaulis pats susikuria
Kiekvieną kartą kai “išvalome" (Reset) žaidimą, Greenfoot sukuria naują krabų pasaulį.
CrabWorld konstruktorius iškviečią populate( ).
1. Reset sukuria naują krabų pasaulį.
2. Java iškviečia CrabWorld konstruktorių.
3. Konkstruktorius iškviečia populate( ).
Apibendrinimai: Objektiškai – orientuotos prorgamos
Objektiškai orientuotose programose:
programa susideda iš objektų objektai žino būsenas ir atlieka veiksmus (elgsena)
objektai gali sąveikauti.
klasė apibrėžia objektų tipą
Kiekvienas daiktas yra objektas,
Net ir pasaulis yra objektas
Apibendrinimai: Objektai ir klasėsKlasė yra objekto tipo pavyzdys (šablonas).
Klasė apibrėžia objektų elgseną ir atributus (ką objektai žino).
Objektai yra klasių egzemplioriai (instances).
Krabo klasė yra šablonas
Krabų objektai yra konkretūs gyvūnai
Apibendrinimai: Kas yra klasė? Klasė apibrėžia (būsimų) objektų atributus
(charakteristikas) ir metodus.
Klasė yra aprašoma programavimo kalba tokia kaip Java.
public class Crab extends Animal {
public void act() {move( );// if you see a Worm then eat itif ( canSee( Worm.class ) )
eat( Worm.class );// if at edge of world, then turnelse if ( atWorldEdge() )
turn( 15 );}...
Apibendrinimai: Java naudojimas
Krabo klasės išeities kodas yra faile Crab.java.
Pakeiskite Krabo kodą, naudodami redaktorių.
Pakeitus išeities kodą, turite sukompiliuoti jį prieš naudodami.
Kompiliatorius išverčia Java tekstus į “baitkodą".
Jei yra klaidų, kompiliatorius rodys klaidos pranešimą.
Sukompiliuotas “baitkodas" yra faile Crab.class. Neredaguokite jo – tai beprasmiška.
Java Virtuali Mašina (JVM) vykdo baitkodą.
Užduotys savarankiškam darbui Įveskite į krabų pasaulį naują veikėją (vėžį,
delfiną, žuvį, ... ), kurie judėtų ne tiesiai, o ratu.Patarimas – metode move() kombinuokite super.move() ir turn(a) komandas bei tinkamai parinkite kampus.
Sukurkite naujus pasaulius:
pavyzdžiui panaudokite povandeninius rūmus, į kuriuos įplaukęs krabas žūsta (rūmai suvalgo krabą );
raketų, skriejančių tarp meteoritų, pasaulį;
bitučių, skaidančių tarp gėlių, pasaulį;
ir panašiai ...