Tesina Maturità Java, Biomorfi

Discussione in 'Java' iniziata da DonUriello, 3 Aprile 2016.

  1. DonUriello

    DonUriello Nuovo Utente

    Registrato:
    3 Aprile 2016
    Messaggi:
    2
    Mi Piace Ricevuti:
    1
    Punteggio:
    0
    Occupazione:
    Studente
    Località:
    Padova
    Salve a tutti. Sto scrivendo la mia tesina per la maturità di quest'anno. Sono giunto ad una situazione critica.

    Vi spiego brevemente cosa dovrei fare.
    Ho preso spunto da un libro di biologia, dove venivano spiegati i biomorfi. Lo scrittore aveva scritto un programma per ricreare artificialmente quelle creature, o meglio figure. Io scrivo questo programma in java. Ora mi sono trovato a non riuscire più ad andare avanti.

    Fatto questa breve premessa, vi posto il codice delle mie classi per capire un po meglio (dopo il codice spiego meglio cosa voglio fare):

    Classe Finestra

    Codice:
    package tesinaesame2016;
    import javax.swing.*;
    import java.awt.*;
    
    //applet
    import java.applet.*;
    import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    
    public class Finestra extends JFrame{
        
        public Finestra(){
            setTitle("FinestraTesinaEsame");
            //      lar,alt larg=larghezza, alt=altezza
            setSize(600,600);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            Pannello pannello=new Pannello();
            Container sfondo=getContentPane();
            sfondo.add(pannello,"Center");
            //ascolta i click del mouse
            //addMouseListener(new Finestra.AscoltatoreMouse());
        }//Finestra costruttore
        
    }//Finestra
    Classe Pannello

    Codice:
    package tesinaesame2016;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Pannello extends JPanel{
        private int x,y; // il loro valore viene preso dal click del mouse
        private Catene lista=new Catene();
        
        public Pannello(){
            addMouseListener(new AscoltatoreMouse());
        }
        
        /**
         * La funzione disegna le linee che andranno a creare il biomorfo
         * @param g oggetto Graphics
        
        public void paint (Graphics g){
            super.paintComponent(g);
            //int x=100,y=100;
            
            int secX=x1+0, secY=y1-50;//seconde coordinare per il ramo dritto
            
            int secXsx, secYsx;//calcolo delle coordinata a sinistra
            
            int secXdx, secYdx;//calcolo della coordinata a destra
                    
            g.drawLine(x1,y1,secX,secY);
            for(int i=0; i<5; i++){
                for(int k=0; k<5; k++){
                    secXdx=secX+50; secYdx=secY-15; //calcolo destra
                    secXsx=secX-50; secYsx=secY-15; //calcolo sinistra
                    g.drawLine(secX, secY, secXsx, secYsx); //diramazione sinistra
                    g.drawLine(secX, secY, secXdx, secYdx); //diramazione sinistra
                    secX=secXsx;
                    secY=secYsx;
                }//for
                for(int j=0; j<5; j++){
                    secX=x1; secY=y1-50;
                    secXdx=secX+50; secYdx=secY-15; //calcolo destra
                    secXsx=secX-50; secYsx=secY-15; //calcolo sinistra
                    secX=secXdx;
                    secY=secYdx;
                    g.drawLine(secX, secY, secXsx, secYsx); //diramazione sinistra
                    g.drawLine(secX, secY, secXdx, secYdx); //diramazione sinistra
                    
                }//for
                //secX+=
            }//for
        }//paint
        */
        
        public void primoTratto(Graphics g, Catene lista){
            super.paintComponent(g);
            //lista.inserisciInTesta(x1, y1);
            g.drawString("ciao",x,y);
            //g.drawLine(lista.getTesta().getX(), lista.getTesta().getY(), lista.getTesta().getX()+50, lista.getTesta().getY());
            System.out.println("Primo nodo: "+lista.getTesta());
        }//primoTratto
        
        
        public void rami(Graphics g,Catene listaC){
            //g.drawLine();
        }
        
        /**
         * La funzione disegna le due diramazioni della linea, a destra e a sinistra
         * @param g oggetto Graphics
         * @param x1 prima coordinata da cui parte la linea (valore x)
         * @param y1 prima coordinata da cui parte la linea (valore y)
        public void diramazioni(Graphics g,int x1, int y1){
            g.drawLine(x1, y1, x1-50, y1-50);
            g.drawLine(x1, y1, y1+50, y1-50);
        }//diramaziaoni*/
        
        //--------------------ASCOLTATORE MOUSE------------------------------------
        class AscoltatoreMouse extends MouseAdapter{
            //ascolta i click del mouse
            
            /**
             * La funzione "Ascolta" i click del mouse, e fa partire il disegna dal 
             * punto in cui abbiamo cliccato
             * @param e evento mouse
             */
            public void mousePressed(MouseEvent e){
                x=e.getX();
                y=e.getY();
                repaint();
                //JOptionPane.showMessageDialog(null, x1+" "+y1);
            }//mousePressed
        }//AscoltatoreMouse
        
        //------------------------------LISTA--------------------------------------
        public interface Lista{
            void inserisciInTesta(int x, int y);
            void inserisciInCoda(int x, int y);
            /*Nodo cerca(int valore);
            void inserisciDopo(int x, int y, int valore);
            void stampa();*/
        }//Lista
    }//Pannello
    Classe Catene
    Codice:
    package tesinaesame2016;
    
    public class Catene{
    
        public class Nodo{
            private int x,y;
            private Nodo successivo;
            
            public Nodo(){
                x=0;
                y=0;
                successivo=null;
            }
            
            public Nodo(int x, int y){
                this.x=x;
                this.y=y;
                successivo=null;
            }
            
            public Nodo(int x, int y, Nodo successivo){
                this.x=x;
                this.y=y;
                this.successivo=successivo;
            }
            
            public int getX(){
                return x;
            }
            
            public int getY(){
                return y;
            }
            
            public void setX(int x){
                this.x=x;
            }
            
            public void setY(int y){
                this.y=y;
            }
            
            public Nodo getSuccessivo(){
                return successivo;
            }
            
            public void setSuccessivo(Nodo successivo){
                this.successivo=successivo;
            }
        }//Nodo
        
        //-----------------------LISTA CONCATENATA---------------------------------
        public class ListaConcatenata implements Pannello.Lista{
            private Nodo testa;
            
            public ListaConcatenata(){
                testa=null;
            }//ListaConcatenata
            
            public void inserisciInTesta(int x, int y){
                Nodo nuovo=new Nodo(x,y);
                if(testa==null)
                    testa=nuovo;
                else{
                    Nodo succ=testa;
                    nuovo.setSuccessivo(succ);
                    testa=nuovo;
                }//if
            }//inserisciInTesta
            
            public void inserisciInCoda(int x, int y){
                Nodo nuovo=new Nodo(x,y);
                if(testa==null)
                    testa=nuovo;
                else{
                    Nodo succ=testa;
                    while(succ.getSuccessivo()!=null){
                        succ=succ.getSuccessivo();
                    }//while--controllo in testa
                    succ.setSuccessivo(nuovo);
                }//if
            }//inserisciInCoda
            
            public Nodo getTesta(){
                return testa;
            }//getTesta
        }//ListaConcatenata
        
    }
    Classe TesinaEsame2016

    Codice:
    package tesinaesame2016;
    
    
    public class TesinaEsame2016 {
        
        
        public static void main(String[] args) {
            //instaziazione dell'oggetto finestra
            Finestra f1=new Finestra();
            
            f1.setLocationRelativeTo(null); //centra la finestra all'interno del desktop
            
        }//main
        
    }//TesinaEsame2016
    
    Mi spiace dovervi tartassare con tutto questo codice, ma davvero, nemmeno i professori mi sono stati di aiuto.

    Allora, vi spiego, io voglio disegnare un albero, detto in parole molto povere, e per questo intendo usare delle linee. Queste linee le disegno con la funzione drawLine(x1,y1,x2,y2), e per gestire queste linee ho intenzione di utilizzare una lista concatenata. Allora, io so l'albero si "allarga" (fa sempre più rami) seguendo una semplice potenza, la potenza di due: lo disegno con le slash e back slash.
    HTML:
           \/\/
            \/
            |
    Vi mostro cosa sono i biomorfi --> quì.

    Non ha importanza se si dovranno sovrapporre nel programma, perché dovranno sovrapporsi. Tralasciando la parte più importante che sarà proprio quella della sovrapposizione. Io non so come gestire la creazione di questo albero.

    Spero di essere stato abbastanza chiaro e comprensibile, ma per qualunque domanda (ed insulto per il codice) sono a vostra disposizione. Mi scuso per la poca documentazione del codice, ma ho studiato java un po da autodidatta, e mi piace.

    Grazie in anticipo a qualunque aiuto vogliate offrirmi.:love::crying:
     
    Ultima modifica: 3 Aprile 2016
    A ottofonsuppost piace questo elemento.
  2. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    La soluzione al tuo problema è più semplice di quanto possa sembrare: dividi lo schermo in 2 parti contando i caratteri che compongono una riga, poi fai partire il DISEGNO dal centro di questa riga, il carattere BARRA CHE SCENDE DUE VOLTE A SINISTRA(/), E UN ALTRA BARRA CHE PARTENDO DAL CENTRO VA DUE VOLTE A DESTRA(\), ed ogni volta sottrai gli spostamenti fatti a sinistra, e sommi gli spostamenti fatti a destra. E ripeti il tutto nel ramo successivo. Saluti e baci. OTTOFONSUPPOST

    Eccoti un piccolo esempio di ramo sinistro:

    public class AlberoFamiglia {

    public static void main(String[] args) {

    System.out.println(" BISNONNO");
    System.out.println(" /");
    System.out.println(" /");
    System.out.println(" NONNO");
    System.out.println(" /");
    System.out.println(" /");
    System.out.println(" PAPA'");
    }
    }
     
    Ultima modifica: 11 Maggio 2016
  3. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    Codice:
    public class AlberoFamiglia {
    
    		    public static void main(String[] args) {
    	      
    	    	System.out.println("           BISNONNO");
    System.out.println("                /"); 
    System.out.println("               /");
    System.out.println("            NONNO");
    System.out.println("              /");
    System.out.println("             /");
    System.out.println("           PAPA'");
    	    	    }     
    }
    
    

    Se sul motore di ricerca GOOGLE cerchi la frase DISEGNARE ALBERO GENEALOGICO USANDO LINGUAGGIO JAVA trovi un libro che ti spiega come utilizzare gli "alberi". Aribacioni. OTTOFONSUPPOST
     
    Ultima modifica: 11 Maggio 2016
Sto caricando...

Condividi questa Pagina