兴国安邦

C# 3.0, Linq, Linq To Sql

博客园 首页 新随笔 联系 订阅 管理
  33 Posts :: 0 Stories :: 528 Comments :: 51 Trackbacks

本文以一个游戏为例,向大家演示了了linq to sql技术,wcf技术,wpf技术在程序开发中的应用。本游戏程序是5个人的团队,花了5天的时间完成的。其中,在此之前,我们对wcf和wpf从来都没有接触过。也和大家一样现学现做。程序做的很是仓促,自己后来看着都很烂。不足之处,还请大家指出并谅解。
本文不光向大家展示这些技术,同时还把整个项目过程,完整的展现给大家。在此,特别感谢Peter, Boler, Sean, Cloudy. 谢谢你们允许我把它拿到网上来,形成本文.本文将按实际项目中的时间,给大家展开。最后,一起提供所有code。

1,业务分析
首先team在一起讨论了杀人游戏。其中,好多人并不曾玩过。为了让大家有个明确的认识,我们还特意花了20分钟的时间,玩了一场。通过游戏,大家对游戏的规则有了一个初步的认识。对其中的角色的职责,比如平民,杀手,警察等,也有了初步的认识。Sean从网上当下来一段游戏规则,如下

玩家角色分为平民方和杀手方,好人方通过指认功能将所有的杀手指认出来,并通过投票投死杀手,平民则胜利,游戏结束。反之,杀手通过“杀人”功能和指认功能将全部平民杀死或者投票投死则杀手方胜利,游戏结束。具体流程: 

当注册用户进入游戏并点击按钮后,即表示其可以开始杀人游戏,待就绪用户数达到规定范围内时,游戏创建者点击,游戏开始,系统自动为游戏参与者随机分配角色,对于杀手角色,会自动在其窗口中提示其身份; 
游戏是从白天开始的,所有玩家可以在白天的时候发言和投票,当其中一个玩家的票数超过当前存活玩家总数的一半时,该玩家死亡,没有遗言;当没有玩家的票数过半,则当天不死人,系统设置的时间到后进入夜晚; 
进入夜晚,系统将在玩家列表中显示自己的杀手标志,白天标志消失,如不是杀手角色则不显示。杀手集团只能在夜晚系统规定的时间内使用“杀人”功能,并且必须共同杀死同一个人,该“杀人”功能才有效。当杀手集团完成杀人或者夜晚时间过去后,夜晚立即结束,被杀玩家死亡,被杀者可以留遗言。被杀者以及被投票投死的玩家将在玩家列表出显示各自角色的标志,该标志所有人可见。死者在亡灵区可自由发言,存活玩家看不见亡灵区对话; 
此时进入第二天白天,所有玩家可以发言并且投票,规则同上。以此类推,直到游戏结束

最终,为了简化游戏,我们制定了如下的游戏规则。 原文转贴

1). There are 2 roles, civilian and man.

2) All the civilians and bad men can vote to anyone, Host server determines the most- ballot person to die during daytime.

3) All the bad men can vote to anyone of the commonalties to be killed, also they get the result by voting, and the most- ballot person will be killed during night.

4) The scenario 2) and scenario 3) recurrent once one scenario is finished.

5).After any one of the 2 scenarios finished each time, Host server will judge if all the rest persons are civilians or bad men, if this comes to true, the side of the rest persons will this round, the game finished.

6).While voting in scenario 2) and scenario 3), if once there are more than 1 person get the most-ballot, the voting is invalid, it will let all the players vote again in this scenario till the only one most-ballot person is selected (killed), then go to another scenario.

2,建立领域模型
这些游戏的规则,是我们在实际玩游戏时制定出来的。此时还并没有牵扯到程序这个层面上。那通过游戏规则的制定,我们对这个模型也愈加清楚。综合上面游戏规则中出现的对象,来建立模型用图来表示,

3, 程序架构设计
随后,我们又讨论了程序的架构,决定使用什么样的技术。决定使用数据库,并使用linq to sql做为数据访问层。当然,说实话,这有点多余,但是可以拿分的点。先不管那么多了。又决定使用wpf做界面层,wcf来做通信层。既然是网络版的,依然还要把服务端和客户端各自细分一下。整个程序的架构如下



4,分工
最后,大家决定分工合作。Tom负责linq to sql 层面的,Peter主攻wcf方向,cloudy和sean主攻 wpf方向,boler主要是业务逻辑。这样,一天的工作就结束了,大家各自领着自己的任务去忙活了。
5, 结语
我们最先接触到是业务逻辑。并不是ui,更不是数据库。那么先有数据库呢还是先有对象?linq to sql 能做到先有对象吗?Tom能带给你不同的感受吗?请留意第二篇。

下一篇
杀人游戏系列 之三 提供游戏代码下载
杀人游戏系列 之二
杀人游戏系列 之一


本blog相关linq to sql文章
C# 3.0 入门系列(一)
C# 3.0入门系列(二)
C# 3.0入门系列(三)
C# 3.0入门系列(四)-之Select操作
C#3.0入门系列(五)-之Where操作
C#3.0入门系列(六)-之OrderBy操作
C#3.0入门系列(七)--之OR工具介绍
C#3.0入门系列(八)-之GroupBy操作
C#3.0入门系列(九)-之GroupBy操作
C#3.0入门系列(十)-之Join操作
C#3.0入门系列(十一)-之In, Like操作
C#3.0入门系列(十二)-Lambda表达式中Lifting
C# 3.0与Linq To Sql的学习方法--浅谈

Linq To Sql进阶系列(一)-从映射讲起
Linq To Sql进阶系列(二)M:M关系
Linq To Sql进阶系列(三)CUD和Log
Linq To Sql进阶系列(四)User Define Function篇
Linq To Sql进阶系列(五)Store Procedure篇
Linq To Sql进阶系列(六)用object的动态查询与保存log篇
Linq To Sql进阶系列(七)动态查询续及CLR与SQL在某些细节上的差别
posted on 2007-10-12 15:32 Tom Song 阅读(3100) 评论(16)  编辑 收藏 所属分类: C# 3.0Linq To Sql

Feedback

#1楼  2007-10-12 16:07 简爱      
刚进入正题,作者的文章就结束了..............
  回复  引用  查看    

#2楼 [楼主] 2007-10-12 16:10 宋国安      
@简爱
呵呵,今天先分析下,给大家留个悬念。
  回复  引用  查看    

#3楼  2007-10-12 16:29 简爱      
不知道这个peter兄如何利用WCF实现通讯问题,关注
  回复  引用  查看    

#4楼  2007-10-12 17:19 xiao_p      
这样的文章好,从某个主题出发,带领大家学技术,比单纯的讲好多了。

支持下
  回复  引用  查看    

#5楼  2007-10-12 17:29 Zhuang miao      
一个小小游戏做的这么复杂?
  回复  引用  查看    

#6楼  2007-10-12 17:34 徐少侠      
关注

好东西是要顶的
  回复  引用  查看    

了不起。顶
  回复  引用    

#8楼  2007-10-12 22:49 bbqqw [未注册用户]
学习中,希望有更详尽的分析
  回复  引用    

#9楼  2007-10-13 09:21 some1 [未注册用户]
你的图用什么工具画的?
  回复  引用    

#10楼  2007-10-13 20:38 伍迷      
早就听你说到这个样例,非常期待下文,好好加油。
  回复  引用  查看    

#11楼  2007-10-15 12:28 Clark Zheng      
做好了弄个Live Demo,俺和朋友上去玩会儿,哈
  回复  引用  查看    

#12楼  2007-10-15 15:20 小菲 [未注册用户]
我们团队之前很习惯单打独斗(就是好像每个人都能,都想单独来完成一个项目),如果您能从如何分工,如何合作以,如何沟通,如果进行进度的衔接来描述,您的文章会更精彩,非常感谢
  回复  引用    

#13楼 [楼主] 2007-10-15 18:48 宋国安      
@小菲
en,其实,每个人都喜欢表现自己,是好事情。可以把大家分工,然后,每天定期讨论进度和自己的工作。设计方面的东西,要拿出来给大家批评。让每个人都知道,他们拿出来的东西,都是要糟别人批评的,这样,他们也就很小心翼翼。设计不好,不敢随便拿出来。
出了事情,多讨论,leader在这里,要注意协调team 的氛围。如果,别人能把自己说服的话,那就要尊重别人设计。对事不对人,完成工作才是最主要的。
  回复  引用  查看    

#14楼 [楼主] 2007-10-15 18:49 宋国安      
@Clark Zheng
@伍迷
@bbqqw
@越狱第三季
@徐少侠
@Zhuang miao
谢谢关注。
  回复  引用  查看    

#15楼 [楼主] 2007-10-15 18:50 宋国安      
@some1
那个图?一个是画图板画的,还有visio.
  回复  引用  查看    

#16楼  2007-10-15 20:14 yunhuasheng      
very good!!
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-11-02 18:33 编辑过


相关链接: