108 lines
2.7 KiB
C#
108 lines
2.7 KiB
C#
|
|
namespace Lesson18_多线程练习
|
||
|
|
{
|
||
|
|
enum E_Direction
|
||
|
|
{
|
||
|
|
Up,
|
||
|
|
Down,
|
||
|
|
Left,
|
||
|
|
Right
|
||
|
|
}
|
||
|
|
struct Position
|
||
|
|
{
|
||
|
|
public int X;
|
||
|
|
public int Y;
|
||
|
|
}
|
||
|
|
interface IDraw
|
||
|
|
{
|
||
|
|
public void Draw();
|
||
|
|
}
|
||
|
|
class Snake : IDraw
|
||
|
|
{
|
||
|
|
public E_Direction Direction;
|
||
|
|
Position Position;
|
||
|
|
public Snake()
|
||
|
|
{
|
||
|
|
Position.X = 15;
|
||
|
|
Position.Y = 5;
|
||
|
|
Direction = E_Direction.Right;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Move()
|
||
|
|
{
|
||
|
|
switch (this.Direction)
|
||
|
|
{
|
||
|
|
case E_Direction.Up:
|
||
|
|
Position.Y -= 1;
|
||
|
|
break;
|
||
|
|
case E_Direction.Down:
|
||
|
|
Position.Y += 1;
|
||
|
|
break;
|
||
|
|
case E_Direction.Left:
|
||
|
|
Position.X -= 2;
|
||
|
|
break;
|
||
|
|
case E_Direction.Right:
|
||
|
|
Position.X += 2;
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
public void Draw()
|
||
|
|
{
|
||
|
|
Console.SetCursorPosition(Position.X, Position.Y);
|
||
|
|
Console.Write("■");
|
||
|
|
}
|
||
|
|
public void Clean()
|
||
|
|
{
|
||
|
|
Console.SetCursorPosition(Position.X, Position.Y);
|
||
|
|
Console.Write(" ");
|
||
|
|
}
|
||
|
|
public void ChangeDirection(E_Direction direction)
|
||
|
|
{
|
||
|
|
this.Direction = direction;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
class Program
|
||
|
|
{
|
||
|
|
static Snake snake;
|
||
|
|
static void Main(string[] args)
|
||
|
|
{
|
||
|
|
snake = new Snake();
|
||
|
|
Console.CursorVisible = false;
|
||
|
|
Thread inputThread = new Thread(input);
|
||
|
|
inputThread.Start();
|
||
|
|
while (true)
|
||
|
|
{
|
||
|
|
Thread.Sleep(500);
|
||
|
|
snake.Clean();
|
||
|
|
snake.Move();
|
||
|
|
snake.Draw();
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
static void input()
|
||
|
|
{
|
||
|
|
while (true)
|
||
|
|
{
|
||
|
|
switch(Console.ReadKey(true).Key)
|
||
|
|
{
|
||
|
|
case ConsoleKey.UpArrow:
|
||
|
|
snake.ChangeDirection(E_Direction.Up);
|
||
|
|
break;
|
||
|
|
case ConsoleKey.DownArrow:
|
||
|
|
snake.ChangeDirection(E_Direction.Down);
|
||
|
|
break;
|
||
|
|
case ConsoleKey.LeftArrow:
|
||
|
|
snake.ChangeDirection(E_Direction.Left);
|
||
|
|
break;
|
||
|
|
case ConsoleKey.RightArrow:
|
||
|
|
snake.ChangeDirection(E_Direction.Right);
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|