【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道-LMLPHP


👨‍💻个人主页@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityc#专题

🅰️系统路线学习点击跳转


【Unityc#专题篇】之c#进阶篇】

【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


控制台中有一个■它会如贪食蛇一样自动移动请开启一个多线程来检测输入,控制它的转向⭐




🎶() 需求分析


【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道-LMLPHP


🎶() 知识涉及


  • 1.多线程
  • 2.枚举
  • 3.console常用的静态方法

🎶() 代码实现


【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道-LMLPHP

//逻辑实现:
    //位置
    //移动:(本质是控制光标位置进行绘图)
    //绘制
    //擦除
    //方向     
    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();                
            }
       
        
          
            
        }
    }
}


🎶() 经验总结



  • 实践经验

    1.多线程用来处理同步发生并且稍微复杂的逻辑事件
    2.当发生多个线程共用一个资源时加锁 lock(引用对象)
    3.前台线程的循环影响期望的主进程时设置为后台线程
    4.线程的开启和关闭(Start(),Abort()/bool控制)

    以下贪吃蛇的逻辑如下:
    ①靠光标位置打印
    ②靠光标位置的改变移动
    ③方向靠枚举成员和位置的关系
    ④靠输出空格清除
    ⑤靠多线程来控制

🅰️系统路线学习点击跳转


【Unityc#专题篇】之c#进阶篇】

【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道-LMLPHP


06-19 22:56