👨💻个人主页:@元宇宙-秩沅
👨💻 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#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、