国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

你程序會做飯嘛?我能!

2019-11-17 02:22:43
字體:
來源:轉載
供稿:網友

你程序會做飯嘛?我能!

別嘲笑這個標題。我想了很久。有點“投機取巧”的功效吧!

程序當然不能做飯。

之前的我們的系列文章,介紹, 多線程執行,任務派發。定時器執行。腳本加載。程序狀態機。

這些都是零零散散,或者說都是模塊化介紹,以及模塊測試用例。

那么今天我們就來模擬正常程序流程。使用上述的功能性代碼完成流程。

當然今天的測試用例程序肯定和做飯有關。今天要做的是模擬一個餐廳的流程。

完成 客人入座 -> 點菜 -> 等待就餐 -> 就餐 -> 等待結賬 -> 結賬 -> 離開.

期間包括 等待就餐 添加茶水,就餐的添加茶水,添加米飯等隨機事件

新建控制臺項目:

Sz.Network.DiningRoom 用于存放主文件項目

類庫

Sz.Network.DiningRoom.Scripts 用于存放腳本文件項目

我們先來初始化餐廳。

/** *  * @author 失足程序員 * @Blog http://m.survivalescaperooms.com/ty408/ * @mail 492794628@QQ.com * @phone 13882122019 *  */namespace Sz.Network.DiningRoom{    /// <summary>    ///     /// </summary>    public class 餐廳    {        PRivate static 餐廳 instance = new 餐廳();        public static 餐廳 GetInstance { get { return instance; } }        public long 全局線程 = 0;        public long 廚師s = 0;        public long 傳菜員s = 0;        public long 服務員s = 0;        public long 配菜員s = 0;        public long 收銀員s = 0;        public long 洗菜員s = 0;        public 客人[] table = null;        public void Init(int tableSize)        {            Logger.Info("初始化餐廳");            //所有的工作人員都是一個線程            全局線程 = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("全局線程", 1));            //所有的工作人員都是一個線程            廚師s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("廚師", 3));            //所有的工作人員都是一個線程            傳菜員s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("傳菜員", 5));            //所有的工作人員都是一個線程            服務員s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("服務員", 5));            //所有的工作人員都是一個線程            配菜員s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("配菜員", 3));            //所有的工作人員都是一個線程            收銀員s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("收銀員", 1));            //所有的工作人員都是一個線程            洗菜員s = ThreadPool.ThreadManager.GetInstance.GetThreadModel(new ThreadPool.ThreadModel("洗菜員", 2));            table = new 客人[tableSize];            for (int i = 0; i < tableSize; i++)            {                Logger.Info("初始化餐桌 " + (i + 1) + " 號桌");            }        }    }}

每一個工作人員都是一個線程。模擬線程。

我們這里,餐廳配置:"廚師", 3"傳菜員", 5 "服務員", 5 "配菜員", 3 "收銀員", 1 "洗菜員", 2

各個環節的人員都不相同,且每一步操作都不進相同。

接下來我們初始化客人,

/** *  * @author 失足程序員 * @Blog http://m.survivalescaperooms.com/ty408/ * @mail 492794628@qq.com * @phone 13882122019 *  */namespace Sz.Network.DiningRoom{    public class 客人    {        public static EnumStatus Status入座 = new EnumStatus(1 << 0, 0x000000);        public static EnumStatus Status取消 = new EnumStatus(1 << 1, 0x000000);        public static EnumStatus Status點菜 = new EnumStatus(1 << 2, 0x000000);        public static EnumStatus Status就餐 = new EnumStatus(1 << 3, 0x000000);        public static EnumStatus Status結賬中 = new EnumStatus(1 << 4, 0x000000);        public static EnumStatus Status等待就餐 = new EnumStatus(1 << 5, 0x000000);        public static EnumStatus Status等待結賬 = new EnumStatus(1 << 6, 0x000000);        /// <summary>        /// 存儲臨時數據的        /// </summary>        public ObjectAttribute TempAttribute = new ObjectAttribute();        /// <summary>        /// 客人當前的狀態        /// </summary>        public EnumStatus Staus = new EnumStatus(0, 0x000000);        public List<菜肴> 菜肴s = new List<菜肴>();        public int TableID { get; set; }        /// <summary>        /// 每一個客人的隨機標識        /// </summary>        public string guidID { get; set; }        public 客人(int tableID)        {            guidID = Guid.NewGuid().ToString().Replace("-", "");            this.TableID = tableID;            Staus |= Status入座;            Show();        }        public void 點菜()        {            ThreadPool.ThreadManager.GetInstance.AddTask(餐廳.GetInstance.服務員s, new Task點菜(this));            Task隨機事件發生處理器 task = new Task隨機事件發生處理器(this.TableID + " 號桌客人 上碗筷");            ThreadPool.ThreadManager.GetInstance.AddTask(餐廳.GetInstance.服務員s, task);        }        public void Add點菜(菜肴 菜)        {            菜肴s.Add(菜);            ThreadPool.ThreadManager.GetInstance.AddTask(餐廳.GetInstance.洗菜員s, new Task菜(this, 菜));        }        public void Show()        {            string 狀態 = "";            if (Staus.HasFlag(Status入座))            {                狀態 = "入座";            }            else if (Staus.HasFlag(Status取消))            {                狀態 = "取消";            }            else if (Staus.HasFlag(Status點菜))            {                狀態 = "點菜";            }            else if (Staus.HasFlag(Status等待就餐))            {                狀態 = "等待就餐";            }            else if (Staus.HasFlag(Status就餐))            {                狀態 = "就餐";            }            else if (Staus.HasFlag(Status等待結賬))            {                狀態 = "等待結賬";            }            else if (Staus.HasFlag(Status結賬中))            {                狀態 = "結賬中";            }            Logger.Info(this.TableID + " 號桌子 客人 " + this.guidID + " 當前狀態:" + 狀態);        }    }}

初始化菜肴

/** *  * @author 失足程序員 * @Blog http://m.survivalescaperooms.com/ty408/ * @mail 492794628@qq.com * @phone 13882122019 *  */namespace Sz.Network.DiningRoom{    public class 菜肴    {        public static EnumStatus Status點菜 = new EnumStatus(1 << 0, 0x000000);        public static EnumStatus Status取消 = new EnumStatus(1 << 1, 0x000000);        public static EnumStatus Status洗菜 = new EnumStatus(1 << 2, 0x000000);        public static EnumStatus Status配菜 = new EnumStatus(1 << 3, 0x000000);        public static EnumStatus Status炒菜 = new EnumStatus(1 << 4, 0x000000);        public static EnumStatus Status傳菜 = new EnumStatus(1 << 5, 0x000000);        public static EnumStatus Status就餐 = new EnumStatus(1 << 6, 0x000000);        public static EnumStatus Status結束就餐 = new EnumStatus(1 << 7, 0x000000);        public string Name { get; private set; }        public EnumStatus Staus = new EnumStatus(0, 0x000000);        /// <summary>        /// 存儲臨時數據的        /// </summary>        public ObjectAttribute TempAttribute = new ObjectAttribute();        public 菜肴(string name)        {            this.Name = name;            Staus |= Status點菜;            Show();        }        public void Show()        {            string 狀態 = "";            if (Staus.HasFlag(Status點菜))            {                狀態 = "點菜";            }            else if (Staus.HasFlag(Status取消))            {                狀態 = "取消";            }            else if (Staus.HasFlag(Status洗菜))            {                狀態 = "洗菜";            }            else if (Staus.HasFlag(Status配菜))            {                狀態 = "配菜";            }            else if (Staus.HasFlag(Status炒菜))            {                狀態 = "炒菜";            }            else if (Staus.HasFlag(Status傳菜))            {                狀態 = "傳菜";            }            else if (Staus.HasFlag(Status就餐))            {                狀態 = "就餐";            }            Logger.Info(this.Name + " 當前狀態:" + 狀態);        }    }}

我們需要創建一個定時器任務,對餐桌和客人進行狀態監測和隨機事件發生器

/** *  * @author 失足程序員 * @Blog http://m.survivalescaperooms.com/ty408/ * @mail 492794628@qq.com * @phone 13882122019 *  */namespace Sz.Network.DiningRoom{    public class TimerTask : ThreadPool.TimerTask    {        /// <summary>        /// 間隔 5000 毫秒執行一次        /// </summary>        public TimerTask()            : base(餐廳.GetInstance.全局線程, 2000)        {        }        public override void Run()        {                       IEnumerable<IScript餐桌檢查器> checkScripts = LoadScriptPool.LoadScriptManager.GetInstance.GetInstances<IScript餐桌檢查器>();            foreach (var item in checkScripts)            {                item.Run();            }        }    }}

由于我們餐桌檢查器是一個不定數,所以需要放到腳本去。方便更新程序代碼。

在腳本項目里面創建腳本文件

/** *  * @author 失足程序員 * @Blog http://m.survivalescaperooms.com/ty408/ * @mail 492794628@qq.com * @phone 13882122019 *  */namespace Sz.Netwo
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 璧山县| 蓝山县| 芮城县| 罗江县| 信宜市| 泗阳县| 镇远县| 乐亭县| 漳平市| 攀枝花市| 宁津县| 博白县| 三穗县| 永顺县| 安仁县| 武城县| 湾仔区| 太湖县| 佛学| 淳安县| 合阳县| 望城县| 甘孜| 宣汉县| 扎赉特旗| 石屏县| 玛沁县| 集安市| 烟台市| 莱西市| 尉犁县| 永济市| 齐河县| 界首市| 宁阳县| 娄烦县| 黄陵县| 高密市| 大理市| 密云县| 胶州市|