
👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unityc#专题
⭐🅰️系统路线学习点击跳转⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
⭐控制台中有一个■它会如贪食蛇一样自动移动请开启一个多线程来检测输入,控制它的转向⭐
文章目录
- ⭐🅰️系统路线学习点击跳转⭐
- ⭐控制台中有一个■它会如贪食蛇一样自动移动请开启一个多线程来检测输入,控制它的转向⭐
- 🎶(==A==) 需求分析
- 🎶(==B==) 知识涉及
- 🎶(==C==) 代码实现
- 🎶(==D==) 经验总结
- ⭐🅰️系统路线学习点击跳转⭐
 
🎶(A) 需求分析

🎶(B) 知识涉及
- 1.多线程
- 2.枚举
- 3.console常用的静态方法
🎶(C) 代码实现

//逻辑实现:
    //位置
    //移动:(本质是控制光标位置进行绘图)
    //绘制
    //擦除
    //方向     
    enum E_Dection
    {
        up,
        down,
        left,
        right
    }
    public struct Position
    {
        public int x;
        public int y;
    };
   class Boss
    {     
        Position position = new Position();
        static E_Dection derection ;
        static public E_Dection Derection
        {
            get
            {
                return derection;
            }
            set
            {
                derection = value;
            }
        }
        //---构造函数 初始化---
        public Boss(int x ,int y,E_Dection dection )
        {
            Console.CursorVisible = false;          
            position.x = x;
            position.y = y;
            derection = dection;
        }
        //---传入方向函数修改移动逻辑---
        public void Move()
        {
            switch (derection)
            {
                case E_Dection.up:
                    position.y +=- 1;
                    break;
                case E_Dection.down:
                    position.y += 1;
                    break;
                case E_Dection.left:
                    position.x += -1;
                    break;
                case E_Dection.right:
                    position.x += 1;
                    break;
                default:
                    break;
            }
        }
        //---绘制出来(打印)---
        public void Show()
        {
     
                Console.SetCursorPosition(position.x, position.y);
                Console.WriteLine("■");
        }
        //---擦除(打印空)---
        public void Clear()
        {
            Console.SetCursorPosition(position.x, position.y);
            Console.WriteLine("  ");
        }
    }
    class Program
    {     
        static public void Control()
        {
            while (true)
            {
                switch (Console.ReadKey(true).Key)
                {
                    case ConsoleKey.W:
                        Boss.Derection = E_Dection.up;
                        break;
                    case ConsoleKey.S:
                        Boss.Derection = E_Dection.down;
                        break;
                    case ConsoleKey.A:
                        Boss.Derection = E_Dection.left;
                        break;
                    case ConsoleKey.D:
                        Boss.Derection = E_Dection.right;
                        break;
                    default:
                        break;
                }
            }
        }
        static void Main(string[] args)
        {
            Boss boss = new Boss(10,20,E_Dection.right );
            Thread thread = new Thread(Control);
            thread.Start();
            while (true)
            {               
                Thread.Sleep(500);
                boss.Clear();
                boss.Move();
                boss.Show();                
            }
       
        
          
            
        }
    }
}
🎶(D) 经验总结
- 实践经验:
 
 1.多线程用来处理同步发生并且稍微复杂的逻辑事件
 2.当发生多个线程共用一个资源时加锁 lock(引用对象)
 3.前台线程的循环影响期望的主进程时设置为后台线程
 4.线程的开启和关闭(Start(),Abort()/bool控制)
 以下贪吃蛇的逻辑如下:
 ①靠光标位置打印
 ②靠光标位置的改变移动
 ③方向靠枚举成员和位置的关系
 ④靠输出空格清除
 ⑤靠多线程来控制
 
⭐🅰️系统路线学习点击跳转⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、




















