PROBLEMA Aiuto con progetto università

hisnamesANTONIO

Nuovo Utente
31
0
Ciao a tutti, cerco disperatamente qualcuno che possa aiutarmi con un progetto in linguaggio Processing (basato su Java) per l'università. Non so come procedere...

Devo creare una versione semplificata di Paint che permetta di disegnare linee, rettangoli ed ellissi. La finestra deve essere composta da un'area di selezione degli strumenti e da un'area di disegno. L'area di selezione degli strumenti deve contenere i seguenti strumenti: linea, rettangolo, ellisse. Lo strumento selezionato deve essere evidenziato. Per selezionare uno strumento, l'utente deve fare clic su di esso. Non è consentito l'uso di classi o librerie.

Ecco quello che ho fatto finora e l'interfaccia deve rimanere così... ma non so come proseguire, implementare le funzioni e soprattutto come rendere cliccabili i quadrati e quindi trasformarli in pulsanti. Preciso che sono un principiante e non frequento una facoltà di informatica. Potreste aiutarmi per favore?

Java:
// variables
float spacing = 20; // constant spacing between buttons
float squareSize = 60; // Button size

boolean drawLineMode = false; // Variable to enable/disable line drawing mode
 
// initialisation sequence
void setup() {
  size(1280, 980); // canvas
  background(255); // white background
 
  // section 1: tool selection area
  strokeWeight(3); // tool selection area outline
  stroke(color(210, 210, 210)); /// colour outline tool selection area
  rect(0, 0, width, 100); // tool selection area
 
  // section 2: draw three buttons (squares) in the tool selection zone
 
    // Line button
    fill(200); // Background colour of the square
    rect(spacing, 20, squareSize, squareSize);
    textAlign(CENTER, CENTER); // Centre the text in the square
    fill(0);
    text("Line", spacing + squareSize / 2, 20 + squareSize / 2); // Add the "Line" text
   
    // Rect button
    fill(200); // Background colour of the square
    rect(spacing * 2 + squareSize, 20, squareSize, squareSize);
    textAlign(CENTER, CENTER); // Centre the text in the square
    fill(0);
    text("Rect", spacing * 2 + squareSize + squareSize / 2, 20 + squareSize / 2); // Add the "Rect" text
 
   // Ellipse button
    fill(200); // Background colour of the square
    rect(spacing * 3 + squareSize * 2, 20, squareSize, squareSize);
    textAlign(CENTER, CENTER); // Centre the text in the square;
    fill(0);
    text("Ellipse", spacing * 3 + squareSize * 2 + squareSize / 2, 20 + squareSize / 2); // Add the text "Ellipse".

}
 

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Piuttosto che iniziare con un progetto così complicato, io studierei prima le basi di Java e inizierei con esercizi semplici. Poi passerei alla libreria swing.

Se hai già le basi di Java, studiati la libreria swing.
 

hisnamesANTONIO

Nuovo Utente
31
0
Piuttosto che iniziare con un progetto così complicato, io studierei prima le basi di Java e inizierei con esercizi semplici. Poi passerei alla libreria swing.

Se hai già le basi di Java, studiati la libreria swing.
Ciao e grazie per avermi risposto! Purtroppo queste sono le consegne del progetto... E l'uso di librerie non è neppure consentito
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
E l'uso di librerie non è neppure consentito
e come pensi di farlo?
per disegnare in Java ci sono librerie grafiche incorporate nel linguaggio, dalle obsolete AWT, alle più moderne Swing (alle Java FX che sono state portate fuori); altra cosa impossibile è il divieto di usare le classi... Java è un linguaggio basato su classi, in Java sta tutto dentro le classi, anche il più stupido metodo void main DEVE essere in una classe;
secondo me hai frainteso il testo: non puoi usare classi e/o librerie esterne al linguaggio, ma di quelle dentro devi poter usare tutto altrimenti in Java non ci programmi

EDIT: ho dato una rapida occhiata, è un linguaggio "sopra" Java, le istruzioni vengono tradotte, in pratica si disegna con script, devi guardare bene la reference del linguaggio, non mi pare difficile, devi gestire l'evento di pressione sul mouse simili a questo https://processing.org/reference/mouseClicked_.html

vedi esempio qui
 
  • Mi piace
Reazioni: Ibernato

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Lui però sta facendo riferimento a Processing (https://processing.org/) non direttamente a Java, non so se cambia qualcosa li.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Lui però sta facendo riferimento a Processing (https://processing.org/) non direttamente a Java, non so se cambia qualcosa li.
ah ho capito, ci ho dato un'occhiata
in pratica è una specie di "sovralinguaggio" di scripting (più o meno) dove le istruzioni date vengono poi tradotte (in modo invisibile all'utente) in Java; penso faccia parte di quella famiglia di linguaggi simili a Scratch, con Java sotto, dove gli utenti danno istruzioni senza sapere cosa avviene in realtà sotto il cofano;

vedi esempio prossimo post
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
@hisnamesANTONIO
allego un esempio-giocattolo con 2 forme, giusto per chiarire il senso del mio post precedente (nello spoiler ho selezionato Java come linguaggio, ma non è Java, è Processing):
Java:
PShape rettangolo;
int rettBase = 100; // base rettangolo
int rettAlt = 50; // altezza rettangolo
boolean rettSelez = false; // true = rettangolo selezionato

PShape ellisse;
int ellisseBase = 100; // asse maggiore
int ellisseAlt = 50; // asse minore
boolean ellisseSelez = false; // true = ellisse selezionata

// colori per selezionato/deselezionato
color selezionato = color(204,255,153); // verde
color deselezionato = color(204,204,204); // grigio

// crea bottone rettangolo non selezionato
void creaRettangolo(){
  rettangolo = createShape(RECT, 0, 0, rettBase, rettAlt);
  rettangolo.setFill(deselezionato);
  rettangolo.setStroke(color(0)); // colore di contorno della forma
}

// crea bottone ellisse non selezionata
void creaEllisse(){
  ellipseMode(CORNER);
  ellisse = createShape(ELLIPSE, 0, 0, ellisseBase, ellisseAlt);
  ellisse.setFill(deselezionato);
  ellisse.setStroke(color(0)); // colore di contorno della forma
}

// chiamato alla prima esecuzione
void setup() {
  size(600, 400); // dimensione finestra
  creaRettangolo(); // crea oggetto rettangolo (senza disegnarlo)
  creaEllisse(); // crea oggetto ellisse (senza disegnarla)
  // il disegno lo fa la chiamata automaticaa draw()
}

// chiamato automaticamente dopo setup()
void draw(){
  background(255); // sfondo bianco
  shape(rettangolo, 10, 10); // (10,10)=coordinate iniziali rettangolo
  shape(ellisse, 20+rettBase, 10); // 20= 10 pixel di spazio iniziale + 10 pixel dopo la fine del rettangolo
}

// intercetta il click del mouse, seleziona o deseleziona (se già selezionata) la figura cliccata
// se era selezionata un'altra figura la deseleziona
void mouseClicked() {
  // selezione/deselezione rettangolo
  if (mouseX >=10 && mouseX<=(10+rettBase) && mouseY >= 10 && mouseY<=(10+rettAlt)) {
    if(rettSelez) // se è già selezionato lo deseleziona
      rettangolo.setFill(deselezionato);
    else { // era selezionata l'ellisse (in realtà non necessariamente) --> deseleziona l'ellisse e cambia colore al rettangolo
      ellisseSelez = false; // deseleziona l'ellisse
      ellisse.setFill(deselezionato); // cambia colore all'ellisse
      rettangolo.setFill(selezionato); // cambia colore al rettangolo
    }
    rettSelez = !rettSelez; // cambia lo stato: se era deselezionato lo passa a selezionato e viceversa
  }
  // selezione/delesezione ellisse
  else if (mouseX >= (20+rettBase) && mouseX <= (20+rettBase+ellisseBase) && mouseY >= 10 && mouseY <= ellisseAlt){
    if(ellisseSelez) // se è già selezionata lo deseleziona
      ellisse.setFill(deselezionato);
    else {  // era selezionato il rettangolo -(in realtà non necessariamente) -> deseleziona il rettangolo e cambia colore all'ellisse
      rettSelez = false; // deseleziona il rettangolo
      rettangolo.setFill(deselezionato); // cambia colore al rettangolo
      ellisse.setFill(selezionato); // cambia colore all'ellisse
    }
    ellisseSelez = !ellisseSelez; // cambia lo stato: se era deselezionato lo passa a selezionato e viceversa
  }
}

inizio.png
c01.png
c02.png
c03.png
devi gestire il mouseClick per le selezioni, mentre per il disegno ci sono eventi mouse corrispondenti come il trascinamento, si tratta solo di provare e lavorarci

[EDIT]
in realtà quando una forma non è selezionata e viene clickata non è vero che è necessariamente già selezionata l'altra, quindi le istruzioni di deselezione si possono omettere perfezionando il test nell'if, comunque il codice funziona ugualmente, anche se fa una una deselezione di forme che non sono già selezionate
 

hisnamesANTONIO

Nuovo Utente
31
0
Si, esatto, in pratica non posso usare quelle esterne! Purtroppo non ho stabilito io le consegne né scelto io questo linguaggio e ragazzi sono abbastanza disperato perché non avendo mai fatto programmazione e non avendoci mai fatto esercitare su cose del genere questo progetto lo trovo una bella rogna!
e come pensi di farlo?
per disegnare in Java ci sono librerie grafiche incorporate nel linguaggio, dalle obsolete AWT, alle più moderne Swing (alle Java FX che sono state portate fuori); altra cosa impossibile è il divieto di usare le classi... Java è un linguaggio basato su classi, in Java sta tutto dentro le classi, anche il più stupido metodo void main DEVE essere in una classe;
secondo me hai frainteso il testo: non puoi usare classi e/o librerie esterne al linguaggio, ma di quelle dentro devi poter usare tutto altrimenti in Java non ci programmi

EDIT: ho dato una rapida occhiata, è un linguaggio "sopra" Java, le istruzioni vengono tradotte, in pratica si disegna con script, devi guardare bene la reference del linguaggio, non mi pare difficile, devi gestire l'evento di pressione sul mouse simili a questo https://processing.org/reference/mouseClicked_.html

vedi esempio qui
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Purtroppo non ho stabilito io le consegne né scelto io questo linguaggio e ragazzi sono abbastanza disperato perché non avendo mai fatto programmazione e non avendoci mai fatto esercitare su cose del genere questo progetto lo trovo una bella rogna!
sì ho capito, ti ho fatto un esempio di codice in Processing, lo hai guardato?
puoi prendere spunto da quello, se lo copi-incolli in un documento del tuo editor e lo fai pertire ti ritrovi le immagini che ho postato, ti devi concentrare (per quanto riguarda la selezione della forma) su come ho fatto il metodo mouseClicked (forse tu lo chiami funzione o procedurra), devi fare lo stesso e quando dovrai disegnare ne dovrai impostare uno per l'evento di input mouseDragged (https://processing.org/reference/mouseDragged_.html) che è l'evento collegato a quando premi un bottone del mouse, lo lasci premuto e trascini; cosa devi fare? quando una forma (ellisse, rettangolo, linea) è selezionata ed il mouse viene trascinato nell'area disegno, dovrai invocare le istruzioni di disegno della forma
devi solo provare e riprovare, è un compitino semplice semplice
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!