Guest User

Untitled

a guest
Nov 18th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace ConsoleApplication23
  8. {
  9. internal class Program
  10. {
  11. private static void Main()
  12. {
  13. var point = new Point(x: 1, y: 1, size: 1);
  14. Print(point);
  15. while (true)
  16. {
  17. var key = Console.ReadKey().Key;
  18. switch (key)
  19. {
  20. case ConsoleKey.UpArrow:
  21. point.Direction = Direction.Up;
  22. break;
  23. case ConsoleKey.DownArrow:
  24. point.Direction = Direction.Down;
  25. break;
  26. case ConsoleKey.LeftArrow:
  27. point.Direction = Direction.Left;
  28. break;
  29. case ConsoleKey.RightArrow:
  30. point.Direction = Direction.Right;
  31. break;
  32. }
  33. point.Move(1);
  34. Print(point);
  35. }
  36. }
  37.  
  38. private static void Print(Point point)
  39. {
  40. Console.Clear();
  41. for (var i = 0; i < point.Size; i++)
  42. {
  43. Console.SetCursorPosition(point[i].X, point[i].Y);
  44. Console.WriteLine (i == 0 ? "*+*":"");
  45. }
  46. }
  47. }
  48.  
  49. internal class Point
  50. {
  51. private readonly List<Segment> seg;
  52.  
  53. public Point(int x, int y, uint size)
  54. {
  55. if (size == 0)
  56. throw new ArgumentException();
  57. seg = new List<Segment>();
  58. for (var i = 0; i < size; i++)
  59. seg.Add(new Segment(x, y + i));
  60. Direction = Direction.Up;
  61. }
  62.  
  63. public Direction Direction { get; set; }
  64.  
  65. public int Size
  66. {
  67. get { return seg.Count; }
  68. }
  69.  
  70. public Segment this[int ind]
  71. {
  72. get { return seg[ind]; }
  73. }
  74.  
  75. public void Move(int flash)
  76. {
  77. int x = 0, y = 0;
  78. switch (Direction)
  79. {
  80. case Direction.Up:
  81. y = -flash;
  82. break;
  83. case Direction.Down:
  84. y = flash;
  85. break;
  86. case Direction.Left:
  87. x = -flash;
  88. break;
  89. case Direction.Right:
  90. x = flash;
  91. break;
  92. }
  93. for (var i = Size - 1; i >= 1; i--)
  94. {
  95. seg[i].X = seg[i - 1].X;
  96. seg[i].Y = seg[i - 1].Y;
  97. }
  98. seg[0].X += x;
  99. seg[0].Y += y;
  100. }
  101. }
  102.  
  103. internal class Segment
  104. {
  105. public Segment(int x = 0, int y = 0)
  106. {
  107. X = x;
  108. Y = y;
  109. }
  110.  
  111. public int X { get; set; }
  112. public int Y { get; set; }
  113. }
  114.  
  115. internal enum Direction
  116. {
  117. Up,Down,Left,Right
  118. }
  119. }
Add Comment
Please, Sign In to add comment