public Pentomino Variant(string operation, Pentomino p) { switch (operation) { case "r": return(Rotate(p)); case "rr": return(Rotate(Rotate(p))); case "rrr": return(Rotate(Rotate(Rotate(p)))); case "m": return(Mirror(p)); case "mr": return(Mirror(Rotate(p))); case "mrr": return(Mirror(Rotate(Rotate(p)))); case "mrrr": return(Mirror(Rotate(Rotate(Rotate(p))))); } throw new Exception("Invalid operation"); }
private static void pentomino_matrix_test() //****************************************************************************80 // // Purpose: // // PENTOMINO_MATRIX_TEST tests PENTOMINO_MATRIX. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 22 April 2018 // // Author: // // John Burkardt // { int k; int[] p = null; int p_m = 0; int p_n = 0; string[] pentominoes = { "F", "I", "L", "N", "P", "T", "U", "V", "W", "X", "Y", "Z" }; Console.WriteLine(""); Console.WriteLine("PENTOMINO_MATRIX_TEST"); Console.WriteLine(" PENTOMINO_MATRIX returns a 0/1 matrix representing a pentomino."); for (k = 0; k < 12; k++) { Pentomino.pentomino_matrix(pentominoes[k], ref p_m, ref p_n, ref p); Console.WriteLine(""); Console.WriteLine(" " + pentominoes[k] + " pentomino (" + p_m + "," + p_n + "):"); Console.WriteLine(""); int i; for (i = 0; i < p_m; i++) { string cout = " "; int j; for (j = 0; j < p_n; j++) { cout += p[i * p_n + j]; } Console.WriteLine(cout); } } }
Pentomino Mirror(Pentomino p) { Pentomino n = new Pentomino(p.name, p.variant + 4, p.operations); n.content = new List <Point>(); Rectangle enclosure = p.Enclosure(); foreach (Point element in p.content) { Point newElement = new Point(enclosure.Width - 1 - element.X, element.Y); n.content.Add(newElement); } return(n); }
Pentomino Rotate(Pentomino p) { Pentomino n = new Pentomino(p.name, p.variant + 1, p.operations); n.content = new List <Point>(); Rectangle enclosure = p.Enclosure(); foreach (Point element in p.content) { Point newElement = new Point(enclosure.Height - 1 - element.Y, element.X); n.content.Add(newElement); } return(n); }
private static void pentomino_plot_test() //****************************************************************************80 // // Purpose: // // PENTOMINO_PLOT_TEST tests PENTOMINO_PLOT. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 22 April 2018 // // Author: // // John Burkardt // { int k; int[] p = null; int p_m = 0; int p_n = 0; string[] pentominoes = { "F", "I", "L", "N", "P", "T", "U", "V", "W", "X", "Y", "Z" }; Console.WriteLine(""); Console.WriteLine("PENTOMINO_PLOT_TEST"); Console.WriteLine(" PENTOMINO_PLOT plots a pentomino."); for (k = 0; k < 12; k++) { Pentomino.pentomino_matrix(pentominoes[k], ref p_m, ref p_n, ref p); string label = pentominoes[k]; Pentomino.pentomino_plot(p_m, p_n, p, label); } }
public void SpawnPentomino() { SpawnTemplate template = new Pentomino(new GameCell(0, 0)); Assert.AreEqual(5, template.LivingCells.Count); }
void BasicPentominoes() { List <string> operations; List <Point> content; Pentomino p; //********************* // xxxxx //********************* operations = new List <string>(); operations.Add("r"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(1, 0)); content.Add(new Point(2, 0)); content.Add(new Point(3, 0)); content.Add(new Point(4, 0)); p = new Pentomino(0, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxxx //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); operations.Add("m"); operations.Add("mr"); operations.Add("mrr"); operations.Add("mrrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(0, 1)); content.Add(new Point(1, 0)); content.Add(new Point(2, 0)); content.Add(new Point(3, 0)); p = new Pentomino(1, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxxx //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); operations.Add("m"); operations.Add("mr"); operations.Add("mrr"); operations.Add("mrrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(1, 0)); content.Add(new Point(1, 1)); content.Add(new Point(2, 0)); content.Add(new Point(3, 0)); p = new Pentomino(2, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // xx // xxx //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); operations.Add("m"); operations.Add("mr"); operations.Add("mrr"); operations.Add("mrrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(1, 0)); content.Add(new Point(2, 0)); content.Add(new Point(2, 1)); content.Add(new Point(3, 1)); p = new Pentomino(3, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxx // x //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(0, 1)); content.Add(new Point(0, 2)); content.Add(new Point(1, 1)); content.Add(new Point(2, 1)); p = new Pentomino(4, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxx // x //********************* operations = new List <string>(); content = new List <Point>(); content.Add(new Point(0, 1)); content.Add(new Point(1, 0)); content.Add(new Point(1, 1)); content.Add(new Point(1, 2)); content.Add(new Point(2, 1)); p = new Pentomino(5, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // xxxx // x // x //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(0, 1)); content.Add(new Point(0, 2)); content.Add(new Point(1, 2)); content.Add(new Point(2, 2)); p = new Pentomino(6, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // xx // xx // x //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); content = new List <Point>(); content.Add(new Point(0, 2)); content.Add(new Point(1, 1)); content.Add(new Point(1, 2)); content.Add(new Point(2, 0)); content.Add(new Point(2, 1)); p = new Pentomino(7, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxx // x //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); operations.Add("m"); operations.Add("mr"); operations.Add("mrr"); operations.Add("mrrr"); content = new List <Point>(); content.Add(new Point(0, 1)); content.Add(new Point(0, 2)); content.Add(new Point(1, 0)); content.Add(new Point(1, 1)); content.Add(new Point(2, 1)); p = new Pentomino(8, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x // xxx // x //********************* operations = new List <string>(); operations.Add("r"); operations.Add("m"); operations.Add("mr"); content = new List <Point>(); content.Add(new Point(0, 1)); content.Add(new Point(0, 2)); content.Add(new Point(1, 1)); content.Add(new Point(2, 0)); content.Add(new Point(2, 1)); p = new Pentomino(9, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // x x // xxx //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(0, 1)); content.Add(new Point(1, 0)); content.Add(new Point(2, 0)); content.Add(new Point(2, 1)); p = new Pentomino(10, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } //********************* // xx // xxx //********************* operations = new List <string>(); operations.Add("r"); operations.Add("rr"); operations.Add("rrr"); operations.Add("m"); operations.Add("mr"); operations.Add("mrr"); operations.Add("mrrr"); content = new List <Point>(); content.Add(new Point(0, 0)); content.Add(new Point(0, 1)); content.Add(new Point(1, 0)); content.Add(new Point(1, 1)); content.Add(new Point(2, 0)); p = new Pentomino(11, 0, operations, content); pentominoes.Add(p); foreach (string operation in operations) { pentominoes.Add(p.Variant(operation, p)); } }
public int Index(Pentomino p) { return(12 * p.variant + p.name); }
public Position(Point position, Pentomino p) { this.p = p; this.position = position; }