DOMANDA Java Grafica Semplice

Stato
Discussione chiusa ad ulteriori risposte.

EasyMan QV

Azienda Verificata
7,864
5,299
Ciao ragazzi,
sto facendo un semplice gioco per scuola, e mi piacerebbe fare qualcosina di carino a livello grafico (un interfaccia tipo prato fiorito, grigino anche brutto... Basta che si veda!)
Linguaggio Java, ambiente di sviluppo NetBeans.
Non ho fatto nulla di grafica per ora, avete consigli su qualcosa di molto semplice ed efficace?
Avevo trovato Swing... Non so, che mi dite?
Grazie in anticipo alle risposte
 
  • Mi piace
Reazioni: Alispezzate

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
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
In teoria, e non per esercitazioni, Swing non dovrebbe più essere utilizzato nei nuovi programmi. La scelta futura dovrebbe *sempre* ricadere su JavaFx.

Comunque noto che nelle scuole e nelle Uni va ancora molto Swing, di conseguenza si, è l'unica scelta possibile (sempre se non ci si vuole perdere in altro, ma non avrebbe senso se per esercizio).
Eviterei anche l'utilizzo dell'IDE, finiresti per sporcare il codice (e molto probabilmente non imparareresti Swing :) ).
 

EasyMan QV

Azienda Verificata
7,864
5,299
In teoria, e non per esercitazioni, Swing non dovrebbe più essere utilizzato nei nuovi programmi. La scelta futura dovrebbe *sempre* ricadere su JavaFx.

Comunque noto che nelle scuole e nelle Uni va ancora molto Swing, di conseguenza si, è l'unica scelta possibile (sempre se non ci si vuole perdere in altro, ma non avrebbe senso se per esercizio).
Eviterei anche l'utilizzo dell'IDE, finiresti per sporcare il codice (e molto probabilmente non imparareresti Swing :) ).
Grazie della risposta!
Programmazione grafica non l'abbiamo ancora vista... Volevo portarmi avanti io e magari prendere qualche voto in più.
Purtroppo NetBeans sono costretto ad utilizzarlo per scuola e per ciò mi ci devo abituare.

Visto che ci sono, vi faccio un'altra domandina...

Ho generato dei numeri casuali con il classico Math.random() moltiplicando per 10, in modo che avessi una certa fascia di numero (devo riempire una matrice)
La mia domanda ora è: c'è un metodo per avere, diciamo, delle "percentuali" di "apparizione" (che brutti termini :D).
Praticamente, vorrei che ad esempio, il 7 comparisse più difficilmente rispetto al 2... ??
Spero di essere stato più o meno chiaro... grazie in anticipo:ok:
 
  • Mi piace
Reazioni: Alispezzate

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
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
E' fattibile, e forse esiste qualcosa di interno in Java.

Per funzionalità tue, devi affidarti alla matematica. Ciò che devi fare in pratica è dare una probabilità agli elementi da 1 a 10 (se ho capito bene è il tuo range). Tu non hai specificato esattamente le probabilità di ottenere ciascuno dei singoli numeri, quindi cerco di assegnare io valori accettabili.

Codice:
elements      = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
probabilities = {0.1, 0.15, 0.1, 0.1, 0.1, 0.1, 0.05, 0.1, 0.1, 0.1};

Se noti la somma dei valori di probabiilties da 1. Quanto ho riportato equivale a dare intervalli utilizzando numeri nel range [0..100].
Ad esempio (chiedo venia per non usare proprio il matematichese :P ), avrai questi intervalli:

Codice:
P(1) = [0..10];    // Probabilità numero 1
P(2) = [11..25];  // Probabilità numero 2
P(3) = [26..35];  // ....
P(4) = [36..45];
P(5) = [46..55];
P(6) = [56..65];
P(7) = [66..70];
P(8) = [71..80];
P(9) = [81..90];
P(10) = [91..100];

Che in codice (pseudo-codifica), i range potrebbero essere espressi così:
C:
n = numero nel range [0..100];

if(n >= 0 && n <= 10) return 1;
else if(n >= 11 && n<= 25) return 2;
else if(n >= 26 && n<= 35) return 3;
else if(n >= 36 && n<= 45) return 4;
// .....

Proseguendo con i precedenti insiemi, ciò che andremo a fare sarà la costruzione di un nuovo insieme con elementi gli elementi dell'array iniziale, ma in quantità rapportate alla loro probabilità. Avremo quindi più 2 che 7, e meno 7 rispetto a qualsiasi altro numero.
Codice:
elements      = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
probabilities = {0.1, 0.15, 0.1, 0.1, 0.1, 0.1, 0.05, 0.1, 0.1, 0.1};

// Moltiplico per 20 tutte le probabilità: ho scelto 20 perchè è il numero intero più piccolo 
// (se provi con altri valori inferiori otterrai tutti numeri con la virgola, es.: 10*0,05 = 0,5; 15*0,05 = 0,75; 19*0,05 = 0,95; 20*0,05 = 1)
2, 3, 2, 2, 2, 2, 1, 2, 2, 2

// i numeri ottenuti indicano la quantità degli elementi presenti nell'insieme finale. La distribuzione sarà la seguente:

1 1
2 2 2
3 3
4 4
5 5
6 6
7
8 8
9 9
10 10

// L'insieme finale, il tuo array, sarà:
{1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 8, 9, 9, 10, 10}

L'insieme finale sarà quindi il tuo array, costituito da 20 elementi. Se noti, hai 3 probabilità su 20 (3/20 = 0,15) di estrarre il numero 2, e ne hai solo 1/20 (0,05) di estrarre il numero 7; di estrarre gli altri ne hai 2/20 = 1/10 = 0,1.
In pratica dovrai generare un numero nell'intervallo [0..20] da usare come indice in quell'array.

Così mi sembra possa funzionare. :)
 

Eduadie

Utente Attivo
204
24
Oppure più semplicemente se tu hai tre valori 0 (20%), 1 (20%), e 2 (60%) potresti riempire un array di 100 elementi con 20 0, 20 1 e 60 2 :D
 
  • Mi piace
Reazioni: EasyMan QV

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
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
Concettualmente si. :D Ma sarebbe meglio {0,1, 2, 2, 2}, ovviamente.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili