Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File
- import java.io.FileWriter
- import java.io.InvalidObjectException
- 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>()
- var capacitaZaino = 10
- // get() {return field}
- private set
- // set(value) {
- // if (value > capacitaZaino)
- // field = value
- // else
- // throw Exception("Valore non valido per capacita zaino (${value})")
- // }
- // println("Lo zaino puó contenere ${pers2.capacitaZaino} oggetti")
- // pers2.capacitaZaino = -999;
- //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)
- }
- //getter/setter 'tradizionali'
- // fun getCapacitaZaino() : Int {
- // return capacitaZaino
- // }
- // fun setCapacitaZaino(nuovoValore: Int)
- // {
- // if (nuovoValore > capacitaZaino)
- // capacitaZaino = nuovoValore
- // }
- }
- //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!
- // println("Lo zaino puó contenere ${pers2.getCapacitaZaino()} oggetti")
- //
- // //immagino che pers2 trovi un ampliamento di 5 slot per lo zaino
- // pers2.setCapacitaZaino(pers2.getCapacitaZaino() + 5)
- // println("Lo zaino ora puó contenere ${pers2.getCapacitaZaino()} oggetti")
- //
- // //immagino che pers2 trovi un ampliamento di 5 slot per lo zaino
- // pers2.setCapacitaZaino(pers2.getCapacitaZaino() + 5)
- // println("Lo zaino ora puó contenere ${pers2.getCapacitaZaino()} oggetti")
- println("Lo zaino puó contenere ${pers2.capacitaZaino} oggetti")
- //pers2.capacitaZaino = 20;
- println("Lo zaino ora può contenere ${pers2.capacitaZaino} oggetti")
- }
Advertisement
Add Comment
Please, Sign In to add comment