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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

在線捉鬼游戲開發(fā)之二-設(shè)計(jì)業(yè)務(wù)對象與對象職責(zé)劃分(1)

2019-11-14 15:53:11
字體:
供稿:網(wǎng)友

終于到了分析+代碼的時(shí)候了,我想這樣,此篇第一部分先上我之前做了一半的版本(做到投票環(huán)節(jié),后因?qū)W期末考試就擱置了),通過之前的版本來增強(qiáng)大家對游戲從上一篇那一大堆規(guī)則到實(shí)現(xiàn)代碼的過渡。第二部分再討論第一部分不足的地方,以及初步考慮的解決辦法。

 

上圖是整個(gè)項(xiàng)目的資源管理器截圖,MVC,共三個(gè)頁面:Home/Index,Home/Login,Play/Index。以及兩個(gè)Controller,七個(gè)Model。

0. Views

先來看個(gè)界面吧

Home/Index

無論是旁觀還是玩家,都要寫個(gè)昵稱才能進(jìn)入,當(dāng)時(shí)考慮到在微信界面打開會(huì)可能退出頁面去朋友圈刷一下在回到頁面來繼續(xù)游戲的情況(也就是關(guān)掉瀏覽器再回來),就用了session來處理這個(gè)問題,但偶爾會(huì)出現(xiàn)的Session失效問題我還是沒徹底搞定,計(jì)劃在新版本中KO掉這個(gè)問題。

Home/Login

相當(dāng)于已經(jīng)進(jìn)入了QQ房間的某個(gè)桌子,大家也許已經(jīng)注意到了四點(diǎn):

(1)項(xiàng)目叫CatGhost(哈哈~)Catch+ghost=Catghost

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

    <a href="/">首頁</a>    <a href="@Url.Action("Restart", "Home")" onclick="return confirm('確定要結(jié)束本局,并重新開始?')">重開一局</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)輸入昵稱進(jìn)入后,直接進(jìn)入了桌子,而不是房間。沒錯(cuò),為了不作死,偷懶作了只有一個(gè)桌子的房間,故只能有一桌人玩這個(gè)游戲~

(4)為了便于測試,報(bào)名上限是3人。測試時(shí),因Session關(guān)系,再啟動(dòng)一個(gè)新實(shí)例也是同一個(gè)張三,所以我用了其他瀏覽器(當(dāng)時(shí)湊齊6個(gè)瀏覽器測試的感覺也是心好累,故可先設(shè)3個(gè)人玩的,以測試好人、白癡、鬼所看到的界面)。

人數(shù)設(shè)定在Web.config,并在Models/Setting中調(diào)用

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

 

當(dāng)有人(六爺)進(jìn)入房間并作出要報(bào)名參加還是旁觀的選擇后,張三的頁面會(huì)變化(定時(shí)刷新)

PS:因考慮到流量問題,移動(dòng)端要搞jq刷新,那絕壁弄死人了,所以我用了HTML5的服務(wù)器發(fā)送事件(W3SCHOOL的地址),每秒按1k算(1分鐘就得60k),一局游戲一小時(shí),就得60k*60=3600k=3.5M(感覺5M之內(nèi)都還可以,但肯定還有極大的優(yōu)化空間)

計(jì)算流量

等待游戲開始

此處兩點(diǎn):

(1)要發(fā)言會(huì)提示“請等待游戲開始”

(2)可以看到玩家的之間的箭頭,表示了發(fā)言順序,也就是座位(因?yàn)樵诰W(wǎng)絡(luò)中你坐哪都一樣,反正是隨機(jī)分配角色的)。是不是想起來德州撲克的圓桌?可以坐在想做的人旁邊的那種。好吧~我承認(rèn)我又偷懶沒想做得那么專業(yè)[委屈]

唐五進(jìn)入

當(dāng)唐五點(diǎn)下“報(bào)名”鍵以后,出現(xiàn)下面界面:

游戲開始

其中做的操作有:從題庫取詞(先寫死在程序里)、隨機(jī)分配角色(這是真隨機(jī),后續(xù)分析各Model就知道了),并開始過了不是鬼的人,因?yàn)橐呀?jīng)到了鬼可以討論并制定誰開始發(fā)言的環(huán)節(jié)(看到鬼的界面中有三個(gè)人名的按鈕沒?),此時(shí)非鬼想發(fā)言,會(huì)被系統(tǒng)阻止。

鬼討論環(huán)節(jié)

當(dāng)所有的鬼都指定了同一個(gè)發(fā)言人時(shí),出現(xiàn)了下面界面:

開始發(fā)言

此時(shí),非六爺發(fā)言,會(huì)被系統(tǒng)阻止(阻止的截圖比較沒意義就不上了)。

第一輪結(jié)束,第二輪開始

是不是發(fā)現(xiàn)張三(鬼)根據(jù)六爺和唐五的話開始渾水摸魚了?好的,第二輪像第一輪一樣發(fā)言(因?yàn)槲沂致貓D晚了點(diǎn)):

開始投票

大家有注意到了兩點(diǎn)吧:

(1)沒錯(cuò),之前的聊天記錄消失了(因?yàn)槲沂致龥]截圖到第二輪的,第二輪是六爺開始懷疑張三,唐五不確定,張三繼續(xù)狡辯),為什么記錄消失了,這也是為了考記憶力,不讓你去回翻誰說過了什么、誰懷疑過誰、誰投過誰。

(2)投票怎么沒有棄權(quán)?是的,的確應(yīng)該有棄權(quán)票,都說了我只做到投票嘛~~還沒做完就要復(fù)習(xí)考試了嘛~~~

所以到此為止,截圖完畢,大體意思就是這個(gè)feel,要考慮的細(xì)節(jié)還有好多。下面是看業(yè)務(wù)邏輯部分的考慮:

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

1. Models

 

2. Common:

WebCommon負(fù)責(zé)獲取各種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負(fù)責(zé)在過濾聽眾,即區(qū)分玩家與旁觀者的操作和界面

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中調(diào)用

[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

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁晋县| 湄潭县| 玉龙| 荥阳市| 巴林左旗| 平江县| 乌兰察布市| 防城港市| 黔西县| 青川县| 且末县| 平和县| 漯河市| 榆社县| 沙湾县| 峨眉山市| 攀枝花市| 莱西市| 东丽区| 凤庆县| 寿阳县| 南通市| 札达县| 金山区| 卢氏县| 潜江市| 晋宁县| 六枝特区| 博乐市| 平顶山市| 富民县| 马龙县| 钟祥市| 花垣县| 通辽市| 都兰县| 清原| 天台县| 洪江市| 来凤县| 浪卡子县|