我當時引以自豪的收集非常多的MSN表情圖示,讓我被當神一樣的崇拜
好了廢話不多說,以下是我跟PM的對話...
PM: 小奇,可以幫我弄一個營收活動嗎?
我: 當然可以
PM: 我想做一個轉蛋的活動
我: 是喔
PM: 就做成小瑪莉那樣好了,總共有12格
就類似以下圖示12格每一個會放一個虛寶
我: 好的沒問題喔
PM: 但我想要有一個條件,就是轉一次50元
PM: 我想讓玩家轉了1000元以上才有機會獲得高級實體虛寶,可以嗎?
我: 這.....雖然黑心了一點,當然沒問題XD
於是乎我就建立了一個
Gashapon.cs
using System; namespace DesignPattern.SimpleFactoryPattern { /*建立一個轉蛋的類別*/ public class Gashapon { /*玩家被騙的金額*/ private double _Amount = 0; public double Amount { get { return _Amount; } set { _Amount = value; } } /*玩家獲得的虛寶*/ public virtual string GetItem() { string result = ""; return result; } } }
接著再建立一個高級虛寶的class繼承Gashapon
class AdvancedItem : Gashapon { /*高級實體商品*/ public override string GetItem() { /*高級實體商品邏輯運算,這邊簡略不實作*/ return "高級實體商品"; } }
在建立一個只能獲得普通虛寶的class繼承Gashapon
這一個類別裡面就只會計算普通虛寶的編號
class GeneralItem : Gashapon { /*一般虛寶*/ public override string GetItem() { /*一般爛虛寶邏輯運算,這邊簡略不實作*/ return "一般爛虛寶"; } }
所以這三個類別的用意就是,當如果玩家被騙了超過1000元我就要呼叫高級虛寶的類別來計算獲得高級虛寶的編號
如果未滿1000元就呼叫普通虛寶的類別計算,這樣玩家就會不知不覺狂抽,來增加營收
所以此時就可以利用簡單工廠模式來達成這樣的需求
所以在建立一個簡單工廠的class
class SimpleFactory { public static Gashapon getItem(int amount) { Gashapon gash = null; /*當玩家消費超過1000元*/ if (amount >= 1000) gash = new AdvancedItem(); /*呼叫高級實體商品*/ else gash = new GeneralItem(); /*呼叫一般爛虛寶*/ return gash; } }
所以整個完整的類別如以下
using System; namespace DesignPattern.SimpleFactoryPattern { /*建立一個轉蛋的類別*/ public class Gashapon { /*玩家被騙的金額*/ private double _Amount = 0; public double Amount { get { return _Amount; } set { _Amount = value; } } /*玩家獲得的虛寶*/ public virtual string GetItem() { string result = ""; return result; } } class AdvancedItem : Gashapon { /*高級實體商品*/ public override string GetItem() { /*高級實體商品邏輯運算,這邊簡略不實作*/ return "高級實體商品"; } } class GeneralItem : Gashapon { /*一般虛寶*/ public override string GetItem() { /*一般爛虛寶邏輯運算,這邊簡略不實作*/ return "一般爛虛寶"; } } /*簡單工廠類別*/ class SimpleFactory { public static Gashapon getItem(int amount) { Gashapon gash = null; /*當玩家消費超過1000元*/ if (amount >= 1000) gash = new AdvancedItem(); /*呼叫高級實體商品*/ else gash = new GeneralItem(); /*呼叫一般爛虛寶*/ return gash; } } }再利用主控台跑一下這一個簡單工廠模式,沒有問題就開始痛宰玩家了~哈哈
using System; namespace DesignPattern.SimpleFactoryPattern { class RunGame { static void Main() { try { Console.WriteLine("轉蛋開始..."); Console.Write("請輸入玩家已消費金額"); string strAmount = Console.ReadLine(); Gashapon gash = null; gash = SimpleFactory.getItem(Convert.ToInt32(strAmount)); Console.WriteLine("恭喜您獲得:" + gash.GetItem()); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("您輸入有錯:" + ex.Message); Console.ReadLine(); } } } }
沒有留言:
張貼留言