public Fragment Grow() { if (Tail == null) return (Head = Tail = new Fragment(true)); return Tail = Tail.Grow(); }
public Fragment Grow() { if (this.Next != null) return this.Next.Grow(); var f = new Fragment() { Direction = this.Direction }; return (this.Next = f); }
public void Show(Fragment previous, Fragment next) { var previousblock = registery[previous]; var bp = previousblock.GetTailPosition(next.Direction); var newblock = new Block(bp); DisplayPanel.Show(newblock); registery.Add(next, newblock); }
public void UpdatePositions() { head = head ?? registery.Keys.Single(x => x.IsHead); var headblock = registery[head]; var headblockpos = headblock.Move(head.Direction); if (headblockpos.Column < 0 || headblockpos.Column == DisplayPanel.Columns || headblockpos.Row < 0 || headblockpos.Row == DisplayPanel.Rows) { WillCollideWithWall(this, new EventArgs()); return; } if (registery.Values.Any(x => x != headblock && x.Position.Row == headblock.Position.Row && x.Position.Column == headblock.Position.Column)) { WillCollideWithItself(this, new EventArgs()); return; } headblock.UndoMove(); if (bait != null && headblock.Position.Row == bait.Position.Row && headblock.Position.Column == bait.Position.Column) { FoodTaken(this, new EventArgs()); } foreach (var pair in registery) { var f = pair.Key; var block = pair.Value; var bp = block.Move(f.Direction);//will not move. DisplayPanel.UpdatePosition(block); } }
public void Show(Fragment head) { var block = GetNewBlock(); DisplayPanel.Show(block); registery.Add(head, block); }
public void Clear() { DisplayPanel.Clear(); registery.Clear(); head = null; }