Tesina Maturità Java, Biomorfi

DonUriello

Nuovo Utente
3 Apr 2016
2
1
0
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:
  • Like
Reactions: ottofonsuppost
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:
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:

Discussioni simili