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

news2024/11/25 14:53:05

在这里插入图片描述


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

👨‍💻 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#专题篇】—核心章题单实践练习


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


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试技能,JMeter压力测试教程(一)

目录 前言 一、安装Java环境 二、安装JMeter环境 三、启动JMeter脚本测试 四、查看报告文件 前言 使用jmeter做压测的时候,在windows上不太稳定,所有一直在 Linux 服务器上使用 jmeter 做压力测试 本篇记录下 Linux上搭建 jmeter 环境&#xff0c…

分布式学习第二天 redis学习

目录 1. 数据库类型 1.1 基本概念 1.2 关系/非关系型数据库搭配使用 2. Redis 2.1 基本知识点 2.2 redis常用命令 2.4 redis数据持久化 3 hiredis的使用 4. 复习 1. 数据库类型 1.1 基本概念 关系型数据库 - sql 操作数据必须要使用sql语句 数据存储在磁盘 存储的…

如何使用CDN给OSS做加速详解

意义 用户直接访问OSS资源,速度会受到OSS下行带宽以及Bucket地域的限制,若通过CDNOSS的方式进行访问,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行分发,可以缩短网络传输距离&am…

Linux学习之CentOS(八)--Linux系统的分区概念

不知不觉已经记录了8篇Linux学习随笔了,虽然还是漂浮在Linux系统的表面,还有很多很多没有学,但是坚持学下去、坚持写下去就是成功的!!!! 在讲Linux系统分区之前,首先得介绍一下硬盘…

【SpringCloud】2.微服务的熔断和降级

目 录 1. 熔 断1.1 发生场景1.2 熔断实现1.3 熔断测试 2. 降 级2.1 发生场景2.2 降级处理2.3 降级测试 在 上篇博客,我们完成了项目的基本搭建工作,那这篇博客就来实现一下微服务的熔断和降级。 1. 熔 断 1.1 发生场景 在前面,我们用 spri…

【Java高级语法】(八)反射机制:有朋友问反射到底是怎样玩的?看完这篇文章你就清楚了~

Java高级语法详解之反射机制 :one: 概念:two: 优势和缺点:three: 使用3.1 Class类3.2 获取类的结构信息- 构造函数3.3 获取类的结构信息- 方法3.4 获取类的结构信息- 字段3.5 动态创建对象、调用方法和设置属性3.6 动态代理 :four: 底层原理:five: 应用场景:ear_of_rice: 总结:…

SedonaSQL 聚合函数使用说明

ST_Envelope_Aggr 函数说明: 返回几何的外边界 语法: ST_Envelope_Aggr (A:geometryColumn) 支持版本: v1.0.0 Spark SQL 举例说明: SELECT ST_Envelope_Aggr(pointdf.arealandmark) FROM pointdf运行示例(AggregateFunctionTest.java): ST_Intersection_Aggr 函数说明: …

大文件如何传输到电脑?亲测又快又简单!

我们平时可以因为各种原因,如更换新电脑、高清视频分享等,需要将大文件传输到另一台电脑上。大文件如何传输到电脑?相信这是很多朋友都想知道如何实现吧。我们为您提供了2种轻松将大文件从PC传输到PC的方法。话不多说,上技巧! 方…

腾讯云服务器地域有什么区别?怎么选比较好

腾讯云服务器地域有什么区别?云服务器地域怎么选择?地域是指云服务器所在机房的地理位置,用户距离地域越近网络延迟越低,速度越快,所以地域就近选择即可。广州上海北京等地域网站域名需要备案,中国香港或其…

SpringBoot使用MockMVC单元测试Controller

前言: 在SpringBoot应用程序中,Controller是接受客户端请求并返回响应数据的核心组件。为了保证Controller的正确性和稳定性,我们可以使用MockMVC框架进行单元测试。MockMVC是Spring框架提供的一个HTTP客户端,用于模拟HTTP请求和响…

2023年智能优化算法之——增长优化器Growth Optimizer(GO),附MATLAB代码

增长优化器的主要设计灵感来源于个人在社会成长过程中的学习和反思机制。学习是个体通过从外部世界获得知识而成长的过程。反思是检查个人自身不足并调整个人学习策略以帮助个人成长的过程。参考文献如下: Zhang, Qingke, et al. “Growth Optimizer: A Powerful M…

二维码在固定资产实物盘点中的应用

很多企业为了掌握固定资产的后续使用情况和状态,会定期对投入使用的固定资产进行盘点,然而固定资产常会出现分散情况,在这种情况下让财务人员到达每个固定资产的所在处进行实地盘点显得极为不现实。 也有不少企业会在盘点过程中使用到固定资…

聊天室(一)___常见的基本功能实现

最近搞聊天室的人还挺多,正好自己也弄就总结自己遇到必不可少的一些功能,本篇文章主要为自己和看到我文章的人一种思路,希望大家不要把聊天室想的太复杂。 上图是我自己做的一个聊天室,类似微信的单聊群聊收藏等功能,根…

python+requests接口自动化框架详解,没有比这个更详细的了

目录 为什么要做接口自动化框架 正常接口测试的流程是什么? 一、接口框架如下: 二、接口的数据规范设计---Case设计 2.1注册接口用例 2.2登录接口用例 三、创建utils包:用来存放公共的类 3.1 ParseExcel.py 操作封装excel的类&#xf…

【AI工具】-Stable Diffusion本地化部署教程

前言 今天我们要介绍的是时下最流行的AI绘图软件Stable Diffusion,虽然Diffusion.ai已经开放api,但是长时间的商业化调用我们需要购买很多的金币。所以我们需要找一个平替的AI绘图平台,现在主流市场中AI绘图软件主要就是OpenAI的DALLE、midj…

SSM会议管理系统

SSM会议管理系统 后端基于SSM、前端基于Freemarker写的会议管理系统、使用JDK8、mysql使用5.7版本 技术栈 Spring SpringMVC MyBatis Mysql Freemarker jqueryajax[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGo0luHu-1687163482019)(img.png)] …

【Python 随练】打印水仙花数

题目: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 简介: 在本篇博客中,我们将解决一个经典的数学问题:打印出所有的水仙花数。水仙花数是指一…

Unity核心5——Tilemap

Tilemap 一般称之为瓦片地图或者平铺地图,是 Unity2017 中新增的功能,主要用于快速编辑 2D 游戏中的场景,通过复用资源的形式提升地图多样性 ​ 工作原理就是用一张张的小图排列组合为一张大地图 ​ 它和 SpriteShape 的异同 共同点&#x…

浅析GPT2中的autoregressive和BERT的autoencoding源码实现

经常使用BERT来做研究,因此对Encoder的架构较为熟悉,但是从来没有了解过GPT这样的Decoder架构,尤其对自回归的形式不知道源码是如何实现的。 为了方便对比和讨论,接来下所探讨的源码都是基于HuggingFace这个框架的。 Bert注意力…

基于亚马逊云科技Serverless,朝夕光年和Second Dinner携手打造年度手游

经典的漫威IP,酷炫的卡牌对战,丰富的故事情节,这款移动游戏《MARVEL SNAP》一经上线就深得全球玩家喜爱。在The Game Awards 2022的年度颁奖典礼上,它更是以出色的表现,一举斩获最佳移动游戏奖项。 其研发公司Second …