線上捉鬼遊戲開發之二 - 設計業務對象與對象職責劃分(1)

來源:互聯網
上載者:User

標籤:

終於到了分析+代碼的時候了,我想這樣,此篇第一部分先上我之前做了一半的版本(做到投票環節,後因學期末考試就擱置了),通過之前的版本來增強大家對遊戲從上一篇那一大堆規則到實現代碼的過渡。第二部分再討論第一部分不足的地方,以及初步考慮的解決辦法。

 

是整個項目的資源管理員,MVC,共三個頁面:Home/Index,Home/Login,Play/Index。以及兩個Controller,七個Model。

0. Views

先來看個介面吧

Home/Index

無論是旁觀還是玩家,都要寫個暱稱才能進入,當時考慮到在介面開啟會可能退出頁面去朋友圈刷一下在回到頁面來繼續遊戲的情況(也就是關掉瀏覽器再回來),就用了Session來處理這個問題,但偶爾會出現的Session失效問題我還是沒徹底搞定,計劃在新版本中KO掉這個問題。

Home/Login

相當於已經進入了QQ房間的某個桌子,大家也許已經注意到了四點:

(1)項目叫Catghost(哈哈~)Catch+ghost=Catghost

(2)頁面有相同之處,就是Views/Shared的功勞

    <a href="/">首頁</a>    <a href="@Url.Action("Restart", "Home")" onclick="return confirm(‘確定要結束本局,並重新開始?‘)">重開一局</a>    <a href="@Url.Action("Signout", "Home")">完全退出</a>    <div>        @RenderBody()        <hr />        <footer>            <p>&copy; @DateTime.Now.Year - Zapup</p>        </footer>    </div>
Views/Shared/_Layout.cshtml

 (3)輸入暱稱進入後,直接進入了桌子,而不是房間。沒錯,為了不作死,偷懶作了只有一個桌子的房間,故只能有一桌人玩這個遊戲~

(4)為了便於測試,報名上限是3人。測試時,因Session關係,再啟動一個新執行個體也是同一個張三,所以我用了其他瀏覽器(當時湊齊6個瀏覽器測試的感覺也是心好累,故可先設3個人玩的,以測試好人、白癡、鬼所看到的介面)。

人數設定在Web.config,並在Models/Setting中調用

private Setting(){            this._civilianCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["CivilianCount"]);            this._ghostCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["GhostCount"]);            this._idioCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["IdioCount"]);}
Setting

 

當有人(六爺)進入房間並作出要報名參加還是旁觀的選擇後,張三的頁面會變化(定時重新整理)

PS:因考慮到流量問題,移動端要搞jq重新整理,那絕壁弄死人了,所以我用了HTML5的伺服器發送事件(W3SCHOOL的地址),每秒按1k算(1分鐘就得60k),一局遊戲一小時,就得60k*60=3600k=3.5M(感覺5M之內都還可以,但肯定還有極大的最佳化空間)

計算流量

等待遊戲開始

此處兩點:

(1)要發言會提示“請等待遊戲開始”

(2)可以看到玩家的之間的箭頭,表示了發言順序,也就是座位(因為在網路中你坐哪都一樣,反正是隨機分配角色的)。是不是想起來德州撲克的圓桌?可以坐在想做的人旁邊的那種。好吧~我承認我又偷懶沒想做得那麼專業[委屈]

唐五進入

當唐五點下“報名”鍵以後,出現下面介面:

遊戲開始

其中做的操作有:從題庫取詞(先寫死在程式裡)、隨機分配角色(這是真隨機,後續分析各Model就知道了),並開始過了不是鬼的人,因為已經到了鬼可以討論並制定誰開始發言的環節(看到鬼的介面中有三個人名的按鈕沒?),此時非鬼想發言,會被系統阻止。

鬼討論環節

當所有的鬼都指定了同一個發言人時,出現了下面介面:

開始發言

此時,非六爺發言,會被系統阻止(阻止的比較沒意義就不上了)。

第一輪結束,第二輪開始

是不是發現張三(鬼)根據六爺和唐五的話開始渾水摸魚了?好的,第二輪像第一輪一樣發言(因為我手慢,晚了點):

開始投票

大家有注意到了兩點吧:

(1)沒錯,之前的聊天記錄消失了(因為我手慢沒到第二輪的,第二輪是六爺開始懷疑張三,唐五不確定,張三繼續狡辯),為什麼記錄消失了,這也是為了考記憶力,不讓你去回翻誰說過了什麼、誰懷疑過誰、誰投過誰。

(2)投票怎麼沒有棄權?是的,的確應該有棄權票,都說了我只做到投票嘛~~還沒做完就要複習考試了嘛~~~

所以到此為止,完畢,大體意思就是這個feel,要考慮的細節還有好多。下面是看商務邏輯部分的考慮:

(下面的部分今天有些事兒就更新不完了,爭取近兩天搞定!先上個提綱)

1. Models

 

2. Common:

WebCommon負責擷取各種Session

public static class WebCommon    {        public static Audience GetAudienceFromSession()        {            return HttpContext.Current.Session["player"] as Audience;        }        public static Civilian GetCivilianFromSession()        {            return HttpContext.Current.Session["player"] as Civilian;        }        public static Ghost GetGhostFromSession()        {            return HttpContext.Current.Session["player"] as Ghost;        }        public static void RenewPlayerSession(Audience newAudience)        {            HttpContext.Current.Session["player"] = newAudience;        }        public static void AddPlayerSession(Audience audience)        {            HttpContext.Current.Session.Add("player", audience);        }        public static void RemovePlayerSession()        {            HttpContext.Current.Session.Remove("player");        }    }
WebCommon

 AudienceFilterAttribute負責在過濾聽眾,即區分玩家與旁觀者的操作和介面

public class AudienceFilterAttribute : ActionFilterAttribute    {        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            HttpContextBase context = filterContext.HttpContext;            if (context.Session["player"] == null)            {                context.Response.Redirect("/");                return;            }            base.OnActionExecuting(filterContext);        }    }
AudienceFilterAttribute

 過濾在Controller中調用

[AudienceFilter]public class PlayController : Controller{}public class HomeController : Controller{[HttpPost]        [AudienceFilter]        public ActionResult Logout(){//...} [AudienceFilter]        public ActionResult Signout(){//...} [AudienceFilter]        public ActionResult Restart(){//...}}
[AudienceFilter]

 3. Controller

 

線上捉鬼遊戲開發之二 - 設計業務對象與對象職責劃分(1)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.