public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { var differenzaColonne = colonnaPartenza - colonnaArrivo; var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo; var stessaColonna = colonnaPartenza == colonnaArrivo; var stessaTraversa = traversaPartenza == traversaArrivo; if (differenzaColonne == 0 && differenzaTraverse == 0) { return(false); } if ((Math.Abs(differenzaColonne) <= 1 && Math.Abs(differenzaTraverse) <= 1) || ((stessaTraversa && !stessaColonna) || (stessaColonna && !stessaTraversa)) || ((Math.Abs(differenzaColonne) - Math.Abs(differenzaTraverse)) == 0)) { return(true); } else { return(false); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera = null) { var stessaColonna = colonnaPartenza == colonnaArrivo; int distanzaTraLeTraverse; if (Colore == Colore.Bianco) { distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; } else { distanzaTraLeTraverse = (int)traversaPartenza - (int)traversaArrivo; } if (stessaColonna && distanzaTraLeTraverse == 1) { return(true); } else if (stessaColonna && ((distanzaTraLeTraverse == 2 && colore == Colore.Bianco && traversaPartenza == Traversa.Seconda) || (colore == Colore.Nero && traversaPartenza == Traversa.Settima && distanzaTraLeTraverse == -2))) { return(true); } else { return(false); } }
public bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { //se la differenza tra le traverse è 1, la differenza tra le colonne deve essere 0 //e viceversa, allora puo muovere. mentre se si muove in diagonale deve valere //la stessa condizione per l'alfiere var differenzaColonne = Math.Abs(colonnaArrivo - colonnaPartenza); var differenzaTraverse = Math.Abs(traversaArrivo - traversaPartenza); if (differenzaColonne == 0 && differenzaTraverse == 0) { return(false); } if (differenzaColonne == 0 && differenzaTraverse >= 1 || differenzaColonne >= 1 && differenzaTraverse == 0) { return(true); } else if (differenzaColonne == differenzaTraverse) { return(true); } else { return(false); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { var stessaColonna = colonnaPartenza == colonnaArrivo; var traversaIniziale = false; var distanzaTraLeTraverse = 0; if (this.colore == Colore.Bianco) { traversaIniziale = (traversaPartenza == Traversa.Seconda) ? true : false; distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; } else { traversaIniziale = (traversaPartenza == Traversa.Settima) ? true : false; distanzaTraLeTraverse = -((int)traversaArrivo - (int)traversaPartenza); } if (stessaColonna && (distanzaTraLeTraverse == 1 || (traversaIniziale == true && distanzaTraLeTraverse == 2))) { return(true); } else { return(false); } }
public ICasa this[Colonna colonna, Traversa traversa] { get { return(listaCase[(int)colonna - 1 + (((int)traversa - 1) * 8)]); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { var stessaColonna = colonnaPartenza == colonnaArrivo; var distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; var distanzaColonne = colonnaArrivo - colonnaPartenza; //siccome i pedoni hanno un verso per colore, in questo controllo serve vedere il segno perchè non possono tornare indietro if (distanzaColonne == 0 && distanzaTraLeTraverse == 0) { return(false); } if (traversaPartenza == Traversa.Seconda && Colore == Colore.Bianco && Math.Abs(distanzaTraLeTraverse) <= 2 && distanzaTraLeTraverse > 0) { return(true); } if (traversaPartenza == Traversa.Settima && Colore == Colore.Nero && Math.Abs(distanzaTraLeTraverse) <= 2 && distanzaTraLeTraverse < 0) { return(true); } if (stessaColonna && Math.Abs(distanzaTraLeTraverse) == 1) { return(true); } else { return(false); } }
public override bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { bool mossaPossibile = base.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, listaCase); if (!mossaPossibile) { return(false); } var differenzaColonne = colonnaPartenza - colonnaArrivo; var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo; if (differenzaColonne == 0 && differenzaTraverse == 0) { return(false); } if (Math.Abs(differenzaColonne) <= 1 && Math.Abs(differenzaTraverse) <= 1) { return(true); } else { return(false); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera = null) { var stessaColonna = colonnaPartenza == colonnaArrivo; int distanzaTraLeTraverse; if (Colore == Colore.Bianco) { distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; } else { distanzaTraLeTraverse = (int)traversaPartenza - (int)traversaArrivo; } if (stessaColonna && distanzaTraLeTraverse == 1) { return(true); } else { return(false); } }
public bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera) { var distanzaTraLeColonne = Math.Abs(colonnaPartenza - colonnaArrivo); var distanzaTraLeTraverse = Math.Abs(traversaPartenza - traversaArrivo); //controllo se lo spostamento è 2x1 if ((distanzaTraLeColonne == 2 && distanzaTraLeTraverse == 1) || (distanzaTraLeTraverse == 2 && distanzaTraLeColonne == 1)) { IPezzo pezzoPresente = scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente; //controllo pezzo non presente if (pezzoPresente == null) { return(true); } //pezzo del avversario if (pezzoPresente.Colore != colore) { return(true); } return(false); } return(false); }
internal Coordinata InterpretaCoordinataCasa(string casa) { Enum.TryParse <Colonna>(casa.Substring(0, 1), out Colonna colonna); int.TryParse(casa.Substring(1, 1), out int traversaInt); Traversa traversa = (Traversa)traversaInt; return(new Coordinata(traversa, colonna)); }
public bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { //se la differenza tra le traverse è uguale alla differenza tra le colonne //allora puo muovere var differenzaColonne = Math.Abs(colonnaArrivo - colonnaPartenza); var differenzaTraverse = Math.Abs(traversaArrivo - traversaPartenza); return((differenzaColonne != 0) == (differenzaTraverse != 0)); }
public virtual bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { if (colonnaPartenza == colonnaArrivo && traversaPartenza == traversaArrivo) { return(false); } return(true); }
public bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera) { var stessaColonna = colonnaPartenza == colonnaArrivo; var stessaTraversa = traversaPartenza == traversaArrivo; if (stessaColonna && stessaTraversa) { return(false); } if (stessaColonna) { int verso = Math.Sign(traversaArrivo - traversaPartenza); for (int i = (int)traversaPartenza + verso;; i += verso) { if (i == (int)traversaArrivo) { IPezzo pezzoSullaCasaDiArrivo = scacchiera[colonnaPartenza, (Traversa)i].PezzoPresente; if (pezzoSullaCasaDiArrivo == null) { return(true); } return(pezzoSullaCasaDiArrivo.Colore != colore? true : false); } if (scacchiera[colonnaPartenza, (Traversa)i].PezzoPresente != null) { return(false); } } } if (stessaTraversa) { int verso = Math.Sign(colonnaArrivo - colonnaPartenza); for (int i = (int)colonnaPartenza + verso;; i += verso) { if (i == (int)colonnaArrivo) { IPezzo pezzoSullaCasaDiArrivo = scacchiera[(Colonna)i, traversaPartenza].PezzoPresente; if (pezzoSullaCasaDiArrivo == null) { return(true); } return(pezzoSullaCasaDiArrivo.Colore != colore? true : false); } if (scacchiera[(Colonna)i, traversaPartenza].PezzoPresente != null) { return(false); } } } //per far contento il compilatore return(false); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { listaCase = listaCase ?? Enumerable.Empty <ICasa>(); ICasa casaPartenza = listaCase.SingleOrDefault(casa => casa.Colonna == colonnaPartenza && casa.Traversa == traversaPartenza && casa.PezzoPresente == this); if ((this.colore == Colore.Bianco && colonnaArrivo - colonnaPartenza == 1 && traversaArrivo - traversaPartenza == 1) || (this.colore == Colore.Nero && colonnaPartenza - colonnaArrivo == 1 && traversaPartenza - traversaArrivo == 1)) { ICasa casaArrivo = listaCase.SingleOrDefault(casa => casa.Colonna == colonnaArrivo && casa.Traversa == traversaArrivo); if (casaArrivo.PezzoPresente.Colore != this.colore) { return(true); } } var stessaColonna = colonnaPartenza == colonnaArrivo; int distanzaTraLeTraverse; if (Colore == Colore.Bianco) { distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; } else { distanzaTraLeTraverse = (int)traversaPartenza - (int)traversaArrivo; } if (stessaColonna && distanzaTraLeTraverse == 1) { if (listaCase.SingleOrDefault(casa => casa.Colonna == colonnaArrivo && casa.Traversa == traversaArrivo)?.PezzoPresente == null) { return(true); } else { return(false); } } else { return(false); } }
internal ICasa CreaCasa(int i) { Colonna colonna = (Colonna)(i % 8 + 1); Traversa traversa = (Traversa)(i / 8 + 1); ICasa casa = new Casa(colonna, traversa); if (traversa == Traversa.Seconda) { casa.PezzoPresente = new Pedone(Colore.Bianco); } else if (traversa == Traversa.Settima) { casa.PezzoPresente = new Pedone(Colore.Nero); } else if (traversa == Traversa.Prima || traversa == Traversa.Ottava) { Colore colore = traversa == Traversa.Prima ? Colore.Bianco : Colore.Nero; switch (colonna) { case Colonna.A: casa.PezzoPresente = new Torre(colore); break; case Colonna.B: casa.PezzoPresente = new Cavallo(colore); break; case Colonna.C: casa.PezzoPresente = new Alfiere(colore); break; case Colonna.D: casa.PezzoPresente = new Donna(colore); break; case Colonna.E: casa.PezzoPresente = new Re(colore); break; case Colonna.F: casa.PezzoPresente = new Alfiere(colore); break; case Colonna.G: casa.PezzoPresente = new Cavallo(colore); break; case Colonna.H: casa.PezzoPresente = new Torre(colore); break; } } return(casa); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { int distanzaTraLeTraverse = Math.Abs((int)traversaArrivo - (int)traversaPartenza); int distanzaTraLeColonne = Math.Abs((int)colonnaArrivo - (int)colonnaPartenza); return(distanzaTraLeTraverse == distanzaTraLeColonne); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera) { return(new Torre(colore).PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera) || new Alfiere(colore). PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera)); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { bool stessaColonna = colonnaPartenza == colonnaArrivo; bool stessaTraversa = traversaPartenza == traversaArrivo; // ^ XOR return(stessaColonna ^ stessaTraversa); }
public override bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { listaCase = listaCase ?? Enumerable.Empty <ICasa>(); if (!base.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, listaCase)) { return(false); } ICasa casaPartenza = listaCase.SingleOrDefault(casa => casa.Colonna == colonnaPartenza && casa.Traversa == traversaPartenza && casa.PezzoPresente == this); ICasa casaArrivo = listaCase.SingleOrDefault(casa => casa.Colonna == colonnaArrivo && casa.Traversa == traversaArrivo); if (casaArrivo?.PezzoPresente?.Colore == this.Colore) { return(false); } var differenzaColonne = colonnaPartenza - colonnaArrivo; var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo; if (differenzaTraverse == 2 || differenzaTraverse == -2) { if (differenzaColonne == 1 || differenzaColonne == -1) { return(true); } else { return(false); } } else if (differenzaColonne == 2 || differenzaColonne == -2) { if (differenzaTraverse == 1 || differenzaTraverse == -1) { return(true); } else { return(false); } } else { return(false); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { int distanzaTraLeTraverse = Math.Abs((int)traversaArrivo - (int)traversaPartenza); int distanzaTraLeColonne = Math.Abs((int)colonnaArrivo - (int)colonnaPartenza); // ^ XOR return((distanzaTraLeTraverse == 0 || distanzaTraLeTraverse == 1) && (distanzaTraLeColonne == 0 || distanzaTraLeColonne == 1)); }
public bool PuòMuovere(Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera) { if (Math.Abs((int)(colonnaArrivo - colonnaPartenza) * (int)(traversaArrivo - traversaPartenza)) <= 1) { return(new Donna(colore).PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera)); } return(false); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { bool stessaColonna = colonnaPartenza == colonnaArrivo; bool stessaTraversa = traversaPartenza == traversaArrivo; int distanzaTraLeTraverse = Math.Abs((int)traversaArrivo - (int)traversaPartenza); int distanzaTraLeColonne = Math.Abs((int)colonnaArrivo - (int)colonnaPartenza); // ^ XOR return((stessaColonna ^ stessaTraversa) ^ (distanzaTraLeTraverse == distanzaTraLeColonne)); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo) { var stessaColonna = colonnaPartenza == colonnaArrivo; var distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza; if (stessaColonna && distanzaTraLeTraverse == 1) { return(true); } else { return(false); } }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IEnumerable <ICasa> listaCase = null) { var stessaColonna = colonnaPartenza == colonnaArrivo; var stessaTraversa = traversaPartenza == traversaArrivo; if ((stessaTraversa && !stessaColonna) || (stessaColonna && !stessaTraversa)) { return(true); } else { return(false); } }
public void ilPedoneNonSiPuòMuovereSeHaUnPezzoDavanti( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, Colore colore, Colonna colonnaPezzoBloccante, Traversa traversaPezzoBloccante) { //Given Pedone pedone = new Pedone(colore); Scacchiera scacchiera = new Scacchiera(); scacchiera[colonnaPezzoBloccante, traversaPezzoBloccante].PezzoPresente = new Pedone(Colore.Bianco); //When bool esito = pedone.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera); //Then Assert.False(esito); }
public bool PuòMuovere( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, IScacchiera scacchiera = null) { var stessaColonna = colonnaPartenza == colonnaArrivo; var stessaTraversa = traversaPartenza == traversaArrivo; if ((stessaTraversa && !stessaColonna) || (stessaColonna && !stessaTraversa)) { return(true); } else { return(false); } }
public void laReginaNonSiPuòMuovereSeUnPezzoBloccaLoSpostamento( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, Colore colore, Colore colorePezzoBloccante, Colonna colonnaPezzoBloccante, Traversa traversaPezzoBloccante) { //Given Donna donna = new Donna(colore); Scacchiera scacchiera = new Scacchiera(); scacchiera[colonnaPezzoBloccante, traversaPezzoBloccante].PezzoPresente = new Pedone(colorePezzoBloccante); //When bool esito = donna.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera); //Then Assert.False(esito); }
public void ilRePuòMangiarePezzoAvversarioInOrizzontaleVerticaleDiagonale( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, Colore colore, Colore colorePezzoBloccante, Colonna colonnaPezzoBloccante, Traversa traversaPezzoBloccante) { //Given Re re = new Re(colore); Scacchiera scacchiera = new Scacchiera(); scacchiera[colonnaPezzoBloccante, traversaPezzoBloccante].PezzoPresente = new Pedone(colorePezzoBloccante); //When bool esito = re.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera); //Then Assert.True(esito); }
public void ilCavalloPuòMangiarePezzoAvversario( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, Colore colore, Colore colorePezzoBloccante, Colonna colonnaPezzoBloccante, Traversa traversaPezzoBloccante) { //Given Cavallo cavallo = new Cavallo(colore); Scacchiera scacchiera = new Scacchiera(); scacchiera[colonnaPezzoBloccante, traversaPezzoBloccante].PezzoPresente = new Pedone(colorePezzoBloccante); //When bool esito = cavallo.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera); //Then Assert.True(esito); }
public void IlReNonSiPuòMuovereSeUnPezzoDelloStessoColoreBloccaLoSpostamento( Colonna colonnaPartenza, Traversa traversaPartenza, Colonna colonnaArrivo, Traversa traversaArrivo, Colore colore, Colore colorePezzoBloccante, Colonna colonnaPezzoBloccante, Traversa traversaPezzoBloccante) { //Given Re re = new Re(colore); Scacchiera scacchiera = new Scacchiera(); scacchiera[colonnaPezzoBloccante, traversaPezzoBloccante].PezzoPresente = new Pedone(colorePezzoBloccante); //When bool esito = re.PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera); //Then Assert.False(esito); }