fcamuso

Kotlin video 23

Aug 10th, 2025
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.82 KB | None | 0 0
  1. import java.io.File
  2. import java.io.FileWriter
  3. import javax.management.ImmutableDescriptor
  4. import kotlin.random.Random
  5.  
  6.  
  7. class Arma(var nome: String = "none", var elemento: String = "none", var dannoBase: Int = 1, donoDivino: Int = 0) {
  8.  
  9.     //inizializzatore per danno base
  10.     init {
  11.         require(dannoBase>=0)
  12.         dannoBase *= 1 + donoDivino/100  //con donoDivino = 10 -> *= (1+0.1) = 1.1
  13.     }
  14. }
  15.  
  16. class Personaggio(var nome: String, var classe: String, var salute: Int=0, var scudo: Int=0,
  17.                   lunghezzaMinima: Int = 4) {
  18.  
  19.     constructor (classe: String) : this(nome="undefined", classe=classe, salute=100, scudo=100) {
  20.  
  21.         println("Logica di inizializzazione secondaria")
  22.  
  23.     }
  24.  
  25.     constructor () : this("undefined") {
  26.         println("Logica di inizializzazione secondaria / costruttore secondario alternativo")
  27.     }
  28.  
  29.     //tutti parametri qui sopra del costruttore primario dichiarati con val/var
  30.     //diventano automaticamente membri interni permanenti negli oggetti di questa classe
  31.     //ci si riferisce a questi membri con il nome di 'proprietà' della classe
  32.  
  33.     //i parametri senza val/var servono ad iniettare al momento della costruzione di oggetti
  34.     //valori che servono ad inizializzare nei blocchi init le proprietà, a fare controlli ecc.
  35.     //ne è un esempio il parametro lunghezzaMinima usata nel bloco init qui sotto
  36.  
  37.     //nome e classe devono avere almeno 4 caratteri
  38.     init {
  39.         println("Logica di inizializzazione primaria")
  40.         require(nome.length>=lunghezzaMinima && classe.length>=lunghezzaMinima)
  41.     }
  42.     //nota: si possono mettere tutti i blocchi init che si vogliono
  43.  
  44.     //si possono aggiungere tutte le properties che si vogliono oltre
  45.     //a quelle create in automatico con i parametri val/var nel costruttore primario
  46.     private val zaino = mutableListOf<Arma>()
  47.     private var capacitaZaino = 10
  48.  
  49.     //tutte le properties sono di default pubbliche (public) cioè richiamabili
  50.     //da codice esterno che abbia un riferimento ad un oggetto della classe
  51.     //esempio (immaginando di essere nel main): personaggio1.salute = 200
  52.  
  53.     //la classe di solito contiene metodi che se pubblici potranno essere invocati
  54.     //sugli oggetti di questa classe
  55.     //esempio (immaginando di essere nel main): personaggio1.addArma( Arma(...) )
  56.     fun addArma(nuovaArma: Arma) {
  57.         if (zaino.size < capacitaZaino)
  58.             zaino.add(nuovaArma)
  59.     }
  60. }
  61.  
  62.  
  63.  
  64.  
  65. //TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
  66. // click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
  67. fun main() {
  68.     val pers1 = Personaggio("spiritXZZ", classe = "spaccaossa")
  69.  
  70.     for (i in 1..20)
  71.         pers1.addArma(Arma())
  72.  
  73.     //println(pers1.zaino.size)
  74.  
  75.     val pers2 = Personaggio()
  76.  
  77.     //pers2.zaino.clear(); //ora vietata!
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment