Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File
- import java.io.FileWriter
- import javax.management.ImmutableDescriptor
- import kotlin.random.Random
- class Arma(var nome: String = "none", var elemento: String = "none", var dannoBase: Int = 1, donoDivino: Int = 0) {
- //inizializzatore per danno base
- init {
- require(dannoBase>=0)
- dannoBase *= 1 + donoDivino/100 //con donoDivino = 10 -> *= (1+0.1) = 1.1
- }
- }
- class Personaggio(var nome: String, var classe: String, var salute: Int=0, var scudo: Int=0,
- lunghezzaMinima: Int = 4) {
- constructor (classe: String) : this(nome="undefined", classe=classe, salute=100, scudo=100) {
- println("Logica di inizializzazione secondaria")
- }
- constructor () : this("undefined") {
- println("Logica di inizializzazione secondaria / costruttore secondario alternativo")
- }
- //tutti parametri qui sopra del costruttore primario dichiarati con val/var
- //diventano automaticamente membri interni permanenti negli oggetti di questa classe
- //ci si riferisce a questi membri con il nome di 'proprietà' della classe
- //i parametri senza val/var servono ad iniettare al momento della costruzione di oggetti
- //valori che servono ad inizializzare nei blocchi init le proprietà, a fare controlli ecc.
- //ne è un esempio il parametro lunghezzaMinima usata nel bloco init qui sotto
- //nome e classe devono avere almeno 4 caratteri
- init {
- println("Logica di inizializzazione primaria")
- require(nome.length>=lunghezzaMinima && classe.length>=lunghezzaMinima)
- }
- //nota: si possono mettere tutti i blocchi init che si vogliono
- //si possono aggiungere tutte le properties che si vogliono oltre
- //a quelle create in automatico con i parametri val/var nel costruttore primario
- private val zaino = mutableListOf<Arma>()
- private var capacitaZaino = 10
- //tutte le properties sono di default pubbliche (public) cioè richiamabili
- //da codice esterno che abbia un riferimento ad un oggetto della classe
- //esempio (immaginando di essere nel main): personaggio1.salute = 200
- //la classe di solito contiene metodi che se pubblici potranno essere invocati
- //sugli oggetti di questa classe
- //esempio (immaginando di essere nel main): personaggio1.addArma( Arma(...) )
- fun addArma(nuovaArma: Arma) {
- if (zaino.size < capacitaZaino)
- zaino.add(nuovaArma)
- }
- }
- //TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
- // click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
- fun main() {
- val pers1 = Personaggio("spiritXZZ", classe = "spaccaossa")
- for (i in 1..20)
- pers1.addArma(Arma())
- //println(pers1.zaino.size)
- val pers2 = Personaggio()
- //pers2.zaino.clear(); //ora vietata!
- }
Advertisement
Add Comment
Please, Sign In to add comment