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
Classe Pannello
Classe Catene
Classe 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.
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:
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: