33
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

GreenFoot 1 dalis

  • Upload
    vivult

  • View
    107

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GreenFoot 1 dalis

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

Page 2: GreenFoot 1 dalis

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

Page 3: GreenFoot 1 dalis

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)

Page 4: GreenFoot 1 dalis

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

Page 5: GreenFoot 1 dalis

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?

Page 6: GreenFoot 1 dalis

Krabų žaidimas

Čia yra “klasės"

Dešinys mygtukas naujo krabo sukūrimui

Krabo objektas sukurtas iš Krabo klasės

Page 7: GreenFoot 1 dalis

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.

Page 8: GreenFoot 1 dalis

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.

Page 9: GreenFoot 1 dalis

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...

Page 10: GreenFoot 1 dalis

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();}

Page 11: GreenFoot 1 dalis

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ų.

Page 12: GreenFoot 1 dalis

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ų

Page 13: GreenFoot 1 dalis

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ė?

Page 14: GreenFoot 1 dalis

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.

Page 15: GreenFoot 1 dalis

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)

Page 16: GreenFoot 1 dalis

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ą.

Page 17: GreenFoot 1 dalis

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.

Page 18: GreenFoot 1 dalis

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?

Page 19: GreenFoot 1 dalis

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).

Page 20: GreenFoot 1 dalis

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ą:

Page 21: GreenFoot 1 dalis

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ų.

Page 22: GreenFoot 1 dalis

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)

Page 23: GreenFoot 1 dalis

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( )

Page 24: GreenFoot 1 dalis

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() );

}

Page 25: GreenFoot 1 dalis

Patikrinkite populate metodą

1. Dešiniu meniu krabų pasaulyje iškvieskite meniu

2. choose populate()

3. ►Run

Page 26: GreenFoot 1 dalis

Tegul pasaulis populate()’inasi pats

populate( ) yra naudingas, bet mes vis dar turime iškviesti jį per meniu.

Mes norime daugintis (populate) patys ;-)

Kaip?

Page 27: GreenFoot 1 dalis

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

Page 28: GreenFoot 1 dalis

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( ).

Page 29: GreenFoot 1 dalis

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

Page 30: GreenFoot 1 dalis

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

Page 31: GreenFoot 1 dalis

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 );}...

Page 32: GreenFoot 1 dalis

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ą.

Page 33: GreenFoot 1 dalis

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 ...