using System; using System.Xml.Linq; /// /// Modela una torre defensiva en un juego tipo TD ("tower defense"). /// https://e...content-available-to-author-only...a.org/wiki/Tower_defense /// Posición: fila, columna /// Vida la vida restante /// Ataque la fuerza de cada ataque /// Impacto(): recibe un impacto /// public class Torre { public Torre() { this.Vida = 100; } public int Vida { get; private set; } // 0 - 100 public /*required*/ int Fila { get; init; } public /*required*/ int Columna { get; init; } public /*required*/ int Ataque { get; set; } public Tuple Posicion { get => new Tuple(Fila, Columna); /* set { this.Fila = value.Item1; this.Columna = value.Item2; }*/ } public void Impacto(int danno) { this.Vida -= danno; } public override string ToString() { return $"Torre: pos:{this.Posicion} atq:{this.Ataque}, vida:{this.Vida}"; } } //using System.Xml.Linq; public class TorreXML { public TorreXML(Torre t) { this.Torre = t; } public XElement ToXML() { /* */ /* 100 50 32 100 */ /* 100 100 */ return new XElement("Torre", new XAttribute("Vida", this.Torre.Vida), new XAttribute("Ataque", this.Torre.Ataque), new XAttribute("Fila", this.Torre.Fila), new XAttribute("Columna", this.Torre.Columna)); } public void Save(string nf) { this.ToXML().Save( nf ); } public static Torre Load(string nf) { return FromXML( XElement.Load( nf ) ); } public static Torre FromXML(XElement xet) { var fila = int.Parse(xet.Attribute("Fila")?.Value ?? "0"); var columna = int.Parse(xet.Attribute("Columna")?.Value ?? "0"); var ataque = int.Parse(xet.Attribute("Ataque")?.Value ?? "0"); return new Torre { Fila = fila, Columna = columna, Ataque = ataque }; } public Torre Torre { get; } } public class TestTorre { static void Main() { Action muestra = (object o) => Console.WriteLine(o.ToString()); Func suma = (x1, x2) => { return x1 + x2; }; Func DoblarPotenciaTorre = (t, f, c) => { int ataque = t.Ataque * 2; return new() { Ataque = ataque, Fila = f, Columna = c}; }; var t1 = new Torre() { Fila = 11, Columna = 12, Ataque = 87 }; Console.WriteLine( "Salida lambdas" ); muestra(5); muestra( t1 ); muestra( suma( 11, 22 ) ); muestra(DoblarPotenciaTorre(t1, 5, 6)); Console.WriteLine( "Salida prueba de torres" ); var t3 = new Torre { Fila = 11, Columna = 12, Ataque = 42 }; Console.WriteLine(t3); t3.Ataque *= 2; Console.WriteLine(t3); t3.Impacto( 30 ); Console.WriteLine(t3); var l1 = new List { new () {Ataque = 20, Columna = 22, Fila = 11 }, new () {Ataque = 30, Columna = 32, Fila = 12 }, new () {Ataque = 40, Columna = 42, Fila = 13 }, new () {Ataque = 56, Columna = 52, Fila = 14 }, }; Console.WriteLine("Recorrido de la lista"); /*foreach (var t in l1) { Console.WriteLine( t ); }*/ l1.ForEach( (t) => { Console.WriteLine(t); }); var l2 = l1.Select( t1 => new Torre() { Fila = t1.Columna, Columna = t1.Fila, Ataque = t1.Ataque } ); Console.WriteLine("Recorrido de la lista 2: intercambiados f,c"); new List(l2).ForEach( t => Console.WriteLine(t) ); Console.WriteLine("Recorrido de la lista 3: ataque > 30"); var l3 = l1.FindAll( t => t.Ataque > 30 ); new List(l3).ForEach( t => Console.WriteLine(t) ); } }