星空网 > 软件开发 > ASP.net

在线捉鬼游戏开发之二

终于到了分析+代码的时候了,我想这样,此篇第一部分先上我之前做了一半的版本(做到投票环节,后因学期末考试就搁置了),通过之前的版本来增强大家对游戏从上一篇那一大堆规则到实现代码的过渡。第二部分再讨论第一部分不足的地方,以及初步考虑的解决办法。

在线捉鬼游戏开发之二

 

在线捉鬼游戏开发之二

上图是整个项目的资源管理器截图,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="http://www.cnblogs.com//">首页</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

 




原标题:在线捉鬼游戏开发之二

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

VAT税号和EORI税号的申请与使用方法:https://www.kjdsnews.com/a/1341238.html
VAT税号和EORI税号的申请与使用指南:https://www.kjdsnews.com/a/1341239.html
VAT税号和EORI号码的正确填写方式:https://www.kjdsnews.com/a/1341240.html
VAT税号和EORI号码的正确写法:https://www.kjdsnews.com/a/1341241.html
VAT税号和EORI号码的正确书写方式:https://www.kjdsnews.com/a/1341242.html
VAT税号和EORI号的申请流程详解:https://www.kjdsnews.com/a/1341243.html
成都极地海洋公园攻略玩哪些项目最划算?:https://www.vstour.cn/a/365173.html
深圳玉龙公园簕杜鹃花海花期时间+门票+交通:https://www.vstour.cn/a/365174.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流