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

ottofonsuppost

Utente Attivo
10 Mag 2016
170
13
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:

ottofonsuppost

Utente Attivo
10 Mag 2016
170
13
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:
Discussioni simili
Autore Titolo Forum Risposte Data
C Tesina sito web my sql MySQL 6
M Sono nella cacca fino al collo! Aiutatemi per la tesina! Database 1
G Passaggio variabili tra pagine- Aiuto per maturità 2015 PHP 3
G Passaggio variabili tra pagine- Aiuto per maturità 2015 PHP 0
L java api_google Javascript 0
F NetBeans problema creazione progetto Java Windows e Software 0
Z [java] bufferizzare stream audio da mic Java 1
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
N [Java] jbutton con funzioni Java 2
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
filograndipad2 Esempi chiari e completi sul funzionamento degli eventi in Java Java 1
Raziel84 [Java] Combinazione elementi matrice Java 0
A [java] problema esercizio array Java 5
L da php a popup java PHP 2
W Piccolo sistema per gestire alcune periferiche, Java o altro linguaggio? Java 8
S Cerco programmatore java Offerte e Richieste di Lavoro e/o Collaborazione 0
Z [Java] Grassetto assente su font incorporato nel pacchetto jar Java 0
O [Java] Lettura da JSON File Java 0

Discussioni simili