You are on page 1of 53

................................. UNIVERSITETAS ......................................

FAKULTETAS INFORMATIKOS KATEDRA

VARDENIS PAVARDENIS ..............................PROGRAMA

AIDIMO SUJUNK TAKUS PROGRAMAVIMAS Kursinis darbas

..................., 2010

PATVIRTINIMAS APIE DARBO SAVARANKIKUM


Tvirtinu, jog darbe pateikta mediaga nra plagijuota ir paruota naudojant literatros srae pateiktus informacinius altinius bei savo tyrim duomenis

Darbo autoriaus vardas ir pavard

...................

DARBO TIKSLAI IR UDAVINIAI

Darbo tikslai: sukurti interaktyv kompiuterin aidim naudojant Adobe Flash technologij. aidimas turi leisti sujungti takus, suskirstytus pagal paveiksliuko kontr. takai skaitomi i XML failo. taip pat turi bti sukurtas duomen XML fail krimo rankis.

I darbo tikslo kyla ie udaviniai: Sukurti Flash aidim Sukurti XML krimo program. Kuriant aidim i karto pasirenkama XML failo struktra, kuriai automatikai formuoti vliau bus sukurtas atskiras rankis (programa).

Darbo vadovo vardas ir pavard

...................... (paraas)

TURINYS

PATVIRTINIMAS APIE DARBO SAVARANKIKUM.......................................................................2 DARBO TIKSLAI IR UDAVINIAI........................................................................................................3 TURINYS..................................................................................................................................................4 1. VADAS.................................................................................................................................................5 2. PROBLEMOS APIBRTIS................................................................................................................6 3. TEORINIS PAGRINDIMAS.................................................................................................................7 4. PROJEKTIN DALIS. RANKI IR PRIEMONI PASIRINKIMO PAGRINDIMAS BEI TYRIMO EIGOS IR REZULTAT APRAYMAS...............................................................................10 5. PROBLEM SPRENDIMAI..............................................................................................................18 6. IVADOS.............................................................................................................................................19 7. BENDRAS DARBO IBAIGTUMAS IR ATITIKIMAS FORMALIEMS KURSINIO DARBO REIKALAVIMAMS................................................................................................................................20 8. LITERATROS IR INFORMACINI ALTINI SRAAI..........................................................24 9. ANOTACIJA (SUMMARY LIETUVI IR ANGL KALBOMIS)................................................25 10.PRIEDAI.............................................................................................................................................26 10.1.Duomen failo formavimo programos kodas..............................................................................26 10.2.aidimo kodas..............................................................................................................................40 10.2.aidimo kodas

1. VADAS

1. Temos aktualumas ir svarba: Darbo tema yra gantinai aktuali, nes praktinis aidimo sukrimas leido, geriau itirti aidimo krimui panaudotas technologijas.

2. Darbo tikslo ir darbo temos ssaja Darbo tikslas tiesiogiai susijs su darbo tema ir i jos iplaukia. 3. Darbo tiksl ir udavini ssaja Darbo udaviniai (sukurti Flash aidim, sukurti XML krimo program, kuriant aidim i karto pasirenkama XML failo struktra, kuriai automatikai formuoti vliau bus sukurtas atskiras rankis -programa) tiesiogiai kyla i darbo tiksl ( sukurti interaktyv kompiuterin aidim naudojant Adobe Flash technologij, aidimas turi leisti sujungti takus, suskirstytus pagal paveiksliuko kontr, takai skaitomi i XML failo, taip pat turi bti sukurtas duomen XML fail krimo rankis).

4. Paaikinimai dl naudot tyrimo metod Darbo atlikimui naudota mokslins literatros analiz bei praktini programins rangos krimo technologij analiz bei praktinis programins rangos krimas ir projektavimas. 5. Praktins reikms pateiktis Kadangi toks aidimas iki iol dar nebuvo sukurtas, jo technologija bus praktikai domi studijuojantiems informatik bei besimokantiems dirbti su analogikomis technologijomis, taip pat gali bti naudojamas mobiliuose technologijose bei renginiuose. aidimas turt sudominti vairaus amiaus bei IT ratingumo lygio laisvalaikio programins rangos naudotojus.

2. PROBLEMOS APIBRTIS

1. Problemos formuluots aikumas I darbo kyla problema, kad paprastai yra maai inaudojamos JAVA programos ir FLASH aidim integravimo galimybs.

2. Problemos adekvatumas tikslui Problemos sprendimas: atitinka tiksl sukurti aidim, rodant, kad tai yra manoma ir verta daryti.

3. TEORINIS PAGRINDIMAS

Adobe Flash Adobe Flash (anksiau vadintas Shockwave Flash ir Macromedia Flash) yra komplektas daugialyps programins rangos, sukurtos Macromedia kompanijos, o iuo metu jis vystomas Adobe kompanijos (Adobe nupirko Macromedia kompanij). Nuo 1996 m., Flash tapo populiariu bdu kurti animacij ir pridti interaktyvumo interneto svetainms; Flash yra daniausiai naudojamas kurti animacij, reklamas ir vairius tinklalapio komponentus, integruoti video svetaines bei sukurti turtingas (vos ne toki pat program naryklje kaip veikiani kompiuteryje) interneto svetaines. Adobe Flash programin ranga veikia vairiose operacinse sistemose Windows, Linux, Mac OS X, Solaris. Tam, kad sukurti Adobe Flash technologij naudojanti aidim pirmiausia reikjo pasirinkti tam skirt integruot programavimo aplink (IDE). Pasirinkau FlashDevelop programavimo aplink. i aplinka reikalauja .NET 2.0 bibliotek, todl veikia tik su Windows operacinmis sistemomis.

Pav. 1: FlashDevelop IDE vaizdas 7

Java rankis yra skirtas automatikai formuoti aidimo duomen fail ir yra suprogramuotas naudojant Java programavimo kalb. Java programavimo sistemoje programuotojo paraytas kodas kompiliuojamas ne procesoriui specifin, o tarpin form. i tarpin forma nepriklauso nuo procesoriaus tipo ar operacins sistemos, todl ikart tinka vykdymui vairiose aplinkose. Masyvo eilui tikrinimas Java programuotojams padeda ivengti sunkiai aptinkam programavimo klaid, vliau galini turti katastrofik pasekmi. vairios Java programos dalys nesunkiai gali bti vykdomos lygiagreiai (multithreading). Java taip pat turi gerai ivystyt refleksijos sistem. Pradedant naujesne 1.5 versija, Java kalba taip pat palaiko bendrybes (angl. generics), kurios primena aikesn, paprastesn praeityje kai kuriose kalbose buvusi makrokomand variant. Nuo 1.6 versijos Java palaiko skriptus galimyb vykdyti simboli eiluts kintamajame esant kitos programos tekst, jam keiiantis duomenimis su gaubianija programa. iuo metu esama tiek komercini, tiek ir atviro kodo (GNU Classpath, Apache Harmony) Java program vykdymo sistem. Java sukrusi Sun microsystems 2006 m lapkriio mnes paskelb, jog per kelet met palaipsniui pereina prie atviro kodo modelio, pateikiant visas Java programai vykdyti reikalingas dalis su GPL licencija, papildyta sujungimo iimtimi. Kuriant program buvo pasinaudota NetBeans programavimo aplinka. NetBeans integruota program krimo aplinka (IDE). Tai laisva, atviro kodo aplinka, skirta program krimui Java kalba. Veikia visose populiariausiose operacinse sistemose. Pasiymi lankstumu. Pagrindiniai tradicikai su kuriama programa susij veiksmai (kompiliavimas ir t. t.) realizuojami kaip Ant scenarijai. Dabartin versija (7.0) suteikia daug galimybi tiek J2ME, tiek J2SE, tiek ir J2EE programoms kurti.

Pav. 2: NetBeans programavimo aplinkos vaizdas

4. PROJEKTIN DALIS. RANKI IR PRIEMONI PASIRINKIMO PAGRINDIMAS BEI TYRIMO EIGOS IR REZULTAT APRAYMAS

1. Tyrimo metodo parinkimo adekvatumas Tyrimo metodas: praktinis programins rangos projektavimas ir krimas.

2. Tyrimo ssaja su darbo tikslu Tyrimas tiesiogiai siejasi su darbo tikslu: sukurti interaktyv kompiuterin aidim naudojant Adobe Flash technologij. Norint sukurti aidim teko praktikai itirti Flash ir XML technologij veikim. aidimas turi leisti sujungti takus, suskirstytus pagal paveiksliuko kontr. takai skaitomi i XML failo. taip pat turi bti sukurtas duomen XML fail krimo rankis.

I darbo tikslo kyla ie udaviniai: Sukurti Flash aidim Sukurti XML krimo program. Kuriant aidim i karto pasirenkama XML failo struktra, kuriai automatikai formuoti vliau bus sukurtas atskiras rankis (programa).

1. Tyrimo instrumento (ranki ir priemoni) parinkimas Inagrinjus teorin mediag, buvo pasirinktos FLASH ir XML technologijos kaip geriausiai atitinkanios tyrimo tikslus.

2. Tyrimo apibendrinimo galimybs Atlikus tyrim, jo apibendrinimas pateiktas skyriuje IVADOS. 10

3. Tyrimo eigos apraymas aidimo programavimui panaudota ActionScript programavimo kalba. ActionScript yra objektikai orientuota kalba, vienas i ECMAscript dialekt. i kalba yra skirta pridti prie Flash duomen apdorojimo ir interaktyvumo funkcijas. aidimas narykls lange atvaizduoja XML faile data.xml nurodytus takus. XML failo nuskaitymo funkcija: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 } private function processXML(e:Event):void { myXML = new XML(e.target.data); imgName = myXML.IMAGE[0].@VALUE; var w:String = myXML.SIZE[0].@WIDTH; var h:String = myXML.SIZE[0].@HEIGHT; imgWidth = Number(w); imgHeight = Number(h); N = Number(myXML.DOTS[0]); for (var i:int; i < N; i++ ) { var xx:int = myXML.DOT[i].@VALUE_X; var yy:int = myXML.DOT[i].@VALUE_Y; var point:Point=new Point(xx,yy); dotsArray.push(point); } init(); } private function loadImage():void { imgRequest = new URLRequest(imgName); imageLoader.load(imgRequest);

Takai yra ivedami eils tvarka ir prie kiekvieno i j yra skaiius (eils numeris). Tak pieimo funkcija:
private function drawCircles():void { for (var i:uint = 0; i < N; i++) { var tContent:TextField = new TextField(); tContent.mouseEnabled = false; var circle:Shape = new Shape(); tContent.text = ""+(i+1); tContent.setTextFormat(tfStyle); circle.name = "circle" + (i + 1); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(0, 0, 4); circle.graphics.endFill(); var p:Point = dotsArray.pop();

11

circle.x = p.x + stage.stageWidth.valueOf()/2 - imgWidth/2; circle.y = p.y + stage.stageHeight.valueOf()/2imgHeight/2; imgWidth/2 - 6; imgHeight/2+1; tContent.x tContent.y = = p.x p.y + + stage.stageWidth.valueOf()/2 -

stage.stageHeight.valueOf()/2-

tContent.autoSize = TextFieldAutoSize.LEFT; addChild(tContent); stage.addChild(circle);

} }

aidimo langas interneto naryklje:

Pav. 3: aidimas naryklje

12

1. Tyrimo rezultat apraymas Duomen fail generavimo programa ImagePointsGenerator programa yra skirta generuoti XML duomen fail, kur naudoja aidimas Sujunk takus. Takai yra sudedami rankiniu bdu pagal pasirinkt paveiksliuk. Paveiksliukas yra kraunamas i disko. Tas pats paveiksliukas vliau turi bti nukopijuotas aidimo aplank. Duomen faile saugomas paveiksliuko failo pavadinimas ir vis tak koordinats bei pavadinimai.

<?xml version="1.0" encoding="utf-8"?> <data> <IMAGE VALUE="cat.jpg">image</IMAGE> <DOT VALUE_X="59" VALUE_Y="11">DOT0</DOT> <DOT VALUE_X="67" VALUE_Y="31">DOT1</DOT> <DOT VALUE_X="106" VALUE_Y="35">DOT2</DOT> <DOT VALUE_X="126" VALUE_Y="10">DOT3</DOT>

Duomen failo pavyzdys

Takai dedami programos lange pels pagalba. Yra galimyb pasirinkti dedam tak spalv i trij variant: Raudona Geltona Mlyna

13

7. Tyrimo rezultat analizs kokyb Programos veikimo demonstracija

14

Pirmiausia, prie paleidiant aidim, jam reikia suformuoti duomen fail. Tai gali bti padaryta naudojant special duomen failo iam aidimui formavimo rank ImagePointsGenerator. Duomen faile apraomi takai suformuoti pagal paveiksliuk, todl pirmiausia parenkamas paveiksliukas:

Parinkus paveiksliuk, jis parodomas lange. I deins rodomas jau sukurt tak sraas:

15

Toliau, pele pagalba, galima nustatyti jungiamus takus ir isaugoti duomen fail:

16

Kai duomen failas ir paveiksliukas jau yra aidimo aplanke, galima paleisti ir pat aidim. aidimas paleidiamas per interneto narykl, Windows operacinje sistemoje pakanka du kartus su pele spragtelti ant failo Dots.swf. Kai aidimas paleistas- takus galima jungti paspaudiant su pele ant tak j jungimo tvarka, tik tada takai bus jungiami linija (pvz. paspaudus ant tako 1 o po to ant tako 2 jie bus sujungti linija, bet 2 ir 4, paspaudus ant j linija sujungti nebus, nes nesutampa tvarka):

Pav. 4: Tak jungimas

17

5. PROBLEM SPRENDIMAI

I darbo kyla problema, kad paprastai yra maai inaudojamos JAVA programos ir FLASH aidim integravimo galimybs. Problemos sprendimas: atitinka tiksl sukurti aidim, rodant, kad tai yra manoma ir verta daryti.

18

6. IVADOS
Ssajos su darbo tikslais ir udaviniais

1.

ios programos esm - parodyti kaip galima sukurti tak jungimo aidim Adobe Flash technologijos pagrindu. Tokia programin ranga programini poiriu nra sudtinga, taiau, yra universali ir leidia patenkinti daugel vartotoj poreiki.

2.

Kita mano sukurta programa leidia patogiai kurti aidimo duomen failus ir panaudoti bet kok paveiksliuk aidimui.

19

7. BENDRAS DARBO IBAIGTUMAS IR ATITIKIMAS FORMALIEMS KURSINIO DARBO REIKALAVIMAMS

Darbo rezultatus sudaro programinis, informacinis ar kitokio pobdio produktas bei analizei panaudota informacin ar eksperimentais paremta mediaga (toliau praktin darbo dalis), darbo apraymas ir atskiros detalizuotos jo dalys (toliau darbo apraymas ir priedai), bei papildomi dokumentai, patvirtinantys studento darbo rezultat praktin panaudojim ar jo dalyvavim renginiuose, takojaniuose darbo vertinim (toliau papildomi dokumentai). Visi darbo rezultatai pateikiami 2 (dviem) egzemplioriais (po vien katedrai ir darbo vadovui) darb elektronine (CD ar DVD laikmenose) ir popierine (spausdinta) formomis. Darbo apraymas, priedai ir papildomi dokumentai spausdinami ir riami, taikant bendrus universiteto reikalavimus apiforminimui. Darbo apraymo turinio apiforminimui (tekstui, citavimui, iliustracijoms, lentelms ir kt.) keliami tokie pat reikalavimai, kaip ir mokslini informatikos bei matematikos urnal straipsniams. Darbo apraymas be pried ir papildom dokument neturt viryti 2 (dviej) spaudos lank apimties (32 p.). Vis citat ribos turi bti aikiai paymtos ir j bendra apimtis neturi viryti 10% darbo apraymo apimties. CD ar DVD laikmenos turinio rengimas ir pateikimas: Ant laikmenos specialiu ymekliu turi bti urayti: kursinis darbas, autoriaus vardas ir pavard, darbo tema, metai. Darbo apraas turi bti sumaketuotas ir pateiktas kaip vienas failas (virelis, turinys, visas apraas, priedai ir kt.). Visas apraas turi bti pateiktas dviem formatais - .DOC ir .PDF (portatable document format). PDF failo ruoimui galima pasinaudoti nemokamomis virtualaus spausdintuvo tvarkyklmis (pav. www.pdf995.com). Jei darbui sukurti buvo naudojama vairi papildoma programin ranga (o, galbt, ji yra btina darbui perirti), tai ji turi bti rayta atskirame kataloge (pvz. pavadinimu Programine ranga). Atskirais katalogais galima pateikti ir kit papildom mediag (el. knygas, pagalbinius failus, testavimo pradinius duomenis ar duomenis, skirtus analizei). 20

Turi bti paruotas atskiras dokumentas ar tekstinis failas pavadinimu CD turinys, kuriame bt hierarchikai pavaizduota laikmen rayta informacija bei pateikti komentarai apie kiekvien svarb fail (k jame galima rasti) arba katalog (pakanka apibdinti tik j, jei jame rayta nemaai to paties pobdio fail). CD ar DVD turi bti dtas vokelyje, kuris turi bti segtas darbo gale. Laikmena turi bti lengvai iimama ir ddama , bei neturi ikristi vartant darbo apra.

Darbas yra pilnai ubaigtas ir atitinka visus formalius kursinio darbo reikalavimus, remiantis emiau pateikta lentele. Nr . Darbo dalis ir jos Vertinimo kriterijai svoris (%) kiekvienoje dalyje Kriterijaus vertinimas balais Vertinimo kriterij svoriai atskiroje 1 vadas 10 % 1. Temos aktualumas ir svarba 2. Darbo tikslo ir darbo temos ssaja 3. Darbo tiksl ir udavini ssaja 4. Paaikinimai dl naudot tyrimo metod 5. Praktins reikms 2 Problemos apibrtis 5 % pateiktis 1. Problemos formuluots aikumas 2. Problemos 3 Teorinis pagrindimas (teorin dalis) 20 % adekvatumas tikslui 1. Problemos ityrimo bkls atskleidimas (darbo temos ir srities analiz) 2. Naudojimosi 21 0,4 0,3 0,7 0,3 0,2 0,3 0,05 0,2 0,2 0,2 dalyje 0,2 0,2 0,1 Darbo dalies svoris

altiniais lygis 4 Projektin dalis. ranki ir priemoni pasirinkimo pagrindimas bei tyrimo eigos ir rezultat apraymas 30% 3. altini kokyb 1. Tyrimo metodo parinkimo adekvatumas 2. Tyrimo ssaja su darbo tikslu 3. Tyrimo instrumento (ranki ir priemoni) parinkimas 4. Tyrimo apibendrinimo galimybs 5. Tyrimo eigos apraymas 6. Tyrimo rezult apraymas 7. Tyrimo rezultat analizs kokyb 5 Problem sprendimai 20% 1. Problemos sprendimas ir jo pagrindimas 2. Ssajos su darbo 6 7 Ivados 5% Bendras darbo ibaigtumas ir atitikimas formaliems kursinio darbo reikalavimams 8 10 % Literatros ir tikslu ir udaviniais. 1. Ssajos su darbo tikslais ir udaviniais 1. Darbo nuoseklumas ir aikumas ir logikumas 2. Darbo dali santykio logika 3. Bendras darbo forminimas 0,2 0,4 1,0 0,4 0,05 0,1 0,5 0,5 0,2 0,1 0,1 0,2 0,1 0,2 0,1 0,2 0,3

22

informacini altini sraai. 9 Anotacija (summary kalbomis). lietuvi ir angl

23

8. LITERATROS IR INFORMACINI ALTINI SRAAI


1. A.aplinskas. Program sistem ininerijos pagrindai, MII, Vilnius, I dalis 1996, II dalis 1998. 2. E.Gamma, R.Helms, R.Johnson, J.Vlissides. Design Patterns:Elements of Reusable ObjectOriented Software. Addison-Wesley 1994. 3. James Rumbaugh et al. Object-Oriented Modeling and Design. Prentice-Hall, Inc. 1991.

24

9. ANOTACIJA (SUMMARY LIETUVI IR ANGL KALBOMIS)

25

10.PRIEDAI
10.1.Duomen failo formavimo programos kodas ImagePintsGenerator.java:
package imagepointsgenerator; public class ImagePointsGenerator { public static void main(String[] args) { Frame frame = new Frame(); frame.show(); } }

Frame.java:

package imagepointsgenerator; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Shape; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage;

26

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JLabel; public class Frame extends javax.swing.JFrame {

private BufferedImage image; private BufferedImage point; private int width; private int height; private Graphics g; private Graphics2D g2D; private Point[] points = new Point[100]; private int sk = 0; private Color color = new Color(255,255,0);

27

private Icon icon = null; private int w; private int h; private File img = public Frame() { initComponents(); } private void initComponents() { null;

myPanel = new javax.swing.JPanel(); imageLabel = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); logArea = new javax.swing.JTextArea(); jMenuBar1 = new javax.swing.JMenuBar(); loadImage = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); makeXML_Item = new javax.swing.JMenuItem(); resetItem = new javax.swing.JMenuItem(); jMenu1 = new javax.swing.JMenu(); redItem = new javax.swing.JMenuItem(); jMenuItem5 = new javax.swing.JMenuItem(); blackItem = new javax.swing.JMenuItem();

28

whiteItem = new javax.swing.JMenuItem();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false);

imageLabel.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseReleased(java.awt.event.MouseEvent evt) { imageLabelMouseReleased(evt); } });

javax.swing.GroupLayout myPanelLayout = new javax.swing.GroupLayout(myPanel); myPanel.setLayout(myPanelLayout); myPanelLayout.setHorizontalGroup( myPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(myPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(imageLabel) .addContainerGap(510, Short.MAX_VALUE)) ); myPanelLayout.setVerticalGroup( myPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING)

29

.addGroup(myPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(imageLabel) .addContainerGap(491, Short.MAX_VALUE)) );

jLabel1.setText("Takai:");

logArea.setColumns(20); logArea.setEditable(false); logArea.setLineWrap(true); logArea.setRows(5); jScrollPane1.setViewportView(logArea);

loadImage.setText("Failas");

jMenuItem1.setText("Atidaryti paveikslel"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); loadImage.add(jMenuItem1);

30

makeXML_Item.setText("Isaugoti XML"); makeXML_Item.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { makeXML_ItemActionPerformed(evt); } }); loadImage.add(makeXML_Item);

resetItem.setText("Daryti i naujo"); resetItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { resetItemActionPerformed(evt); } }); loadImage.add(resetItem);

jMenuBar1.add(loadImage);

jMenu1.setText("Color");

redItem.setText("Red");

31

redItem.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/imagepointsgenerator/dot.jpg"))); // NOI18N redItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { redItemActionPerformed(evt); } }); jMenu1.add(redItem);

jMenuItem5.setText("Yellow"); jMenuItem5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem5ActionPerformed(evt); } }); jMenu1.add(jMenuItem5);

blackItem.setText("Black"); blackItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { blackItemActionPerformed(evt); } });

32

jMenu1.add(blackItem);

whiteItem.setText("White"); whiteItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { whiteItemActionPerformed(evt); } }); jMenu1.add(whiteItem);

jMenuBar1.add(jMenu1);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(myPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING)

33

.addComponent(jLabel1) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignm

ent.LEADING)

.addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement

.RELATED)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 471, Short.MAX_VALUE) .addContainerGap()) .addComponent(myPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) );

pack(); }// </editor-fold>

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {

34

JFileChooser chooser; chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Pasirinkite paveiksleli"); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { try { img = new File(chooser.getSelectedFile().toString()); System.out.println(img); image = ImageIO.read(img); } catch (IOException ex) { Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex); } icon = new ImageIcon(image);

width = image.getWidth(null); height = image.getHeight(null); w = width; h = height; Dimension dim = new Dimension(width, height); imageLabel.setSize(dim);

35

imageLabel.setIcon(icon); myPanel.setPreferredSize(dim); g = imageLabel.getGraphics(); g2D = (Graphics2D) g; } }

private void imageLabelMouseReleased(java.awt.event.MouseEvent evt) { if ((evt.getModifiers() & InputEvent.BUTTON1_MASK ) != 0) { g2D.setColor(color); g2D.fillRect(evt.getX(), evt.getY(), 4, 4); Point p = new Point(); p.x = evt.getX(); p.y = evt.getY(); points[sk] = p; logArea.append(sk+" takas: " +"["+evt.getX()+":"+evt.getY()+"]\n"); sk++; } }

private void redItemActionPerformed(java.awt.event.ActionEvent evt) { color = new Color(255,0,0); }

36

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) { color = new Color(255,255,0); }

private void blackItemActionPerformed(java.awt.event.ActionEvent evt) { color = new Color(0,0,0); }

private void whiteItemActionPerformed(java.awt.event.ActionEvent evt) { color = new Color(255,255,255); }

private void resetItemActionPerformed(java.awt.event.ActionEvent evt) { points = new Point[50]; sk = 0; imageLabel.setIcon(null); imageLabel.setIcon(icon); g = imageLabel.getGraphics(); g2D = (Graphics2D) g; logArea.setText(""); }

37

private void makeXML_ItemActionPerformed(java.awt.event.ActionEvent evt) { String ENCODING = "utf-8"; JFileChooser chooser; chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Pasirinkite kur issaugoti data.xml"); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setAcceptAllFileFilterUsed(false); PrintWriter out = null; if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { try { out = new PrintWriter(new FileOutputStream(chooser. getSelectedFile().toString()+"\\data.xml")); } catch (FileNotFoundException ex) { Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null,

ex); } }

out.println("<?xml version=\"1.0\" encoding=\""+ENCODING+"\"?>"); out.println("<data>"); out.println("<IMAGE VALUE=\""+img+"\">"+"image"+"</IMAGE>"); for (int i=0; i< sk; i++) { out.println("<DOT VALUE_X=\""+points[i].x+"\" VALUE_Y=\""+points[i].y+"\">"+"DOT"+i+"</DOT>");

38

} out.println("<DOTS>" + sk + "</DOTS>"); out.println("<SIZE WIDTH=\"" + w + "\"" +" HEIGHT=\""+h+"\">" + "SIZE" + "</SIZE>"); out.println("</data>"); out.close(); } private javax.swing.JMenuItem blackItem; private javax.swing.JLabel imageLabel; private javax.swing.JLabel jLabel1; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JMenu loadImage; private javax.swing.JTextArea logArea; private javax.swing.JMenuItem makeXML_Item; private javax.swing.JPanel myPanel; private javax.swing.JMenuItem redItem; private javax.swing.JMenuItem resetItem; private javax.swing.JMenuItem whiteItem; }

39

10.2.aidimo kodas Main.as


package { import flash.display.*; import flash.media.Sound; import flash.text.*; import flash.events.*; import flash.geom.Matrix; import flash.geom.Point; import flash.ui.Mouse; import flash.net.URLLoader; import flash.net.URLRequest;

public class Main extends Sprite { /* Pozymys kad visi taskai sujungti(zaidimas baigtas) * ir visu tiesiu masyvas */ private var connected:Boolean = false; private var connectors:Array = new Array();

40

private var snd:Sound = new Sound();

private var connector : Shape = new Shape(); private var tfStyle:TextFormat = new TextFormat(); private var circlesArray:Array = new Array();

/* Paveiksliuko duomenys ir pagalbiniai objektai*/ private var imgName:String; private var imageLoader:Loader = new Loader(); private var imgWidth:int; private var imgHeight:int; private var imgRequest:URLRequest;

/* XML duomenys ir pagalbiniai objektai */ private var myXML:XML; private var xmlLoader:URLLoader = new URLLoader(); private var request:URLRequest = new URLRequest("data.xml");

41

/* Tasku skaicius(inicializuojama is XML) */ private var N:int;

/* Tasku masyvas ir informacinis, kuris pasizymi * ar taskai jau sujungti [1-sujungti;0-ne] */ private var tMultiArray:Array = new Array(); private var dotsArray:Array = new Array();

private var button:Sprite = new Sprite(); private var buttonStyle:TextFormat = new TextFormat(); private var buttonText:TextField = new TextField();

/* Pakraunam ir apdorojam XML, * apdorojam peles paspaudimus, jei baigta - rodom paveiksliuka */ public function Main() { xmlLoader.load(request); xmlLoader.addEventListener(Event.COMPLETE, processXML);

42

resize);

imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,

stage.addEventListener(MouseEvent.CLICK, clickListener); }

private function clickListener (e:MouseEvent):void { for (var i:int = 0; i < N; i++) { var circle:Shape = new Shape(); circle = circlesArray[i]; //tikriname, ar paspaustas vienas i taku if ((e.stageX <= circle.x + 4) && (e.stageY <= circle.y + 4) && (e.stageX >= circle.x + -4) && (e.stageY >=

circle.y - 4)) {

//tikrinama, ar prie tai einantys takai sujungti if ((i != 1) && (i != 0)) { if (tMultiArray[i - 2][i - 1] == "1") { connector = getConnectorShape(circlesArray[i - 1], circlesArray[i]); connectors.push(connector); addChild(connector);

43

snd.play(); tMultiArray[i - 1][i] = "1"; //jeigu sujuntas paskutinis takas -

rodom paveiksliuka ir mygtuka

if ((i == N - 1) && !connected) { loadImage(); addChild(button); connected = true; } }

} //pirma taka apdorojame atskirai, kad toliau tikrinti ar prie tai sujungti else if (i == 1){ connector = getConnectorShape(circlesArray[i - 1], circlesArray[i]); connectors.push(connector); addChild(connector); snd.play(); tMultiArray[i - 1][i] = "1"; }

44

} else { } } }

/** * Inicializuojami kintamieji(mygtukas, takai, garsas..) */ private function init(e : Event = null) : void { snd.load(new URLRequest("snd.mp3")); if(hasEventListener(Event.ADDED_TO_STAGE)) { removeEventListener(Event.ADDED_TO_STAGE, init); } button.graphics.beginFill(0xFFCC00); button.graphics.drawEllipse(0, 0, 150, 60); button.buttonMode = true; button.useHandCursor = true; button.mouseChildren = false; buttonStyle.font = "Verdana"; buttonStyle.size = 12;

45

buttonStyle.bold = true; buttonStyle.color = "000080"; button.addEventListener(MouseEvent.CLICK, restart); buttonText.autoSize = TextFieldAutoSize.CENTER; buttonText.text = "aisti dar karta"; buttonText.setTextFormat(buttonStyle); button.addChild(buttonText); button.graphics.endFill(); tfStyle.font = "Verdana"; tfStyle.bold = true; tfStyle.size = 8; // Paiome takus drawCircles(); //Inicializuojame 2mati masyva kad patalpinti takus for (var j:uint = 0; j < N; j++) { tMultiArray[j] = new Array(); } circlesArray = getCircles(stage); }

46

/** * Paio takus ir ymes */ private function drawCircles():void { for (var i:uint = 0; i < N; i++) { var tContent:TextField = new TextField(); tContent.mouseEnabled = false; var circle:Shape = new Shape(); tContent.text = ""+(i+1); tContent.setTextFormat(tfStyle); circle.name = "circle" + (i + 1); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(0, 0, 4); circle.graphics.endFill(); var p:Point = dotsArray.pop(); circle.x = p.x + stage.stageWidth.valueOf()/2 - imgWidth/2; circle.y = p.y + stage.stageHeight.valueOf()/2imgHeight/2; tContent.x = p.x + stage.stageWidth.valueOf()/2 -

imgWidth/2 - 6;

47

imgHeight/2+1;

tContent.y = p.y + stage.stageHeight.valueOf()/2-

tContent.autoSize = TextFieldAutoSize.LEFT; addChild(tContent); stage.addChild(circle); } }

/** * Apdorojami XML duomenys(pav. failas, taku kootdinates ir t.t.) */ private function processXML(e:Event):void { myXML = new XML(e.target.data); imgName = myXML.IMAGE[0].@VALUE; var w:String = myXML.SIZE[0].@WIDTH; var h:String = myXML.SIZE[0].@HEIGHT; imgWidth = Number(w); imgHeight = Number(h); N = Number(myXML.DOTS[0]); for (var i:int; i < N; i++ ) {

48

var xx:int = myXML.DOT[i].@VALUE_X; var yy:int = myXML.DOT[i].@VALUE_Y; var point:Point=new Point(xx,yy); dotsArray.push(point); } init(); }

private function loadImage():void { imgRequest = new URLRequest(imgName); imageLoader.load(imgRequest); }

/** * Paveiksliukas i lango centr */ private function resize(e:Event):void { button.x = 20; button.y = 25; buttonText.x = button.x;

49

buttonText.y = button.y-4; imageLoader.x = stage.stageWidth.valueOf()/2 - imgWidth/2; imageLoader.y = stage.stageHeight.valueOf() / 2 - imgHeight/2; addChild(imageLoader); }

/** * Visus nupaiytus takus i masyva(kad veliau perrinkti restartuojant) */ private function getCircles(container:DisplayObjectContainer):Array { var array:Array = new Array(); for (var i:uint = 0; i < container.numChildren; i++) if (container.getChildAt(i) is Shape) array.push(container.getChildAt(i)); return array; }

/** * Tiesiog sujungia 2 takus ir graina tiese sujungianti jas

50

*/ private function getConnectorShape(connectFrom : Shape, connectTo : Shape) : Shape { var line : Shape = new Shape(); with(line.graphics) { lineStyle(0.5); moveTo(connectFrom.x, connectFrom.y); lineTo(connectTo.x, connectTo.y); } return line; }

/* * Pradedam zaidima is naujo - saliname paveiksleli */ private function restart(e:Event):void { removeChild(imageLoader); for (var i:int = 0; i < N; i++ ) tMultiArray[i][i + 1] = "0"; while (connectors.length.toString() != "0")

51

removeChild(connectors.pop()); connected = false; removeChild(button); }

} }

Picture.as:
package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.geom.Matrix; import flash.geom.Point; import flash.ui.Mouse; /** * ... * @author arov */ public class Picture extends Sprite { [Embed(source='../resources/cat.jpg')]

public function Picture()

52

53

You might also like