一个扑克游戏的诞生--前言
发表于:2007-06-30来源:作者:点击数:
标签:
最近一直在和 java 系统设计打交道,只有晚上有点儿时间可以写些自己喜欢的 .net 的东西,比如说象 标题说的:一个扑克 游戏 ,呵呵。其实也不是为了写而写,只是希望通过写这个程序熟悉一下.net而已。 程序虽然还没写完,但发现涉及面真的很广,几乎包括.net
最近一直在和
java系统设计打交道,只有晚上有点儿时间可以写些自己喜欢的
.net的东西,比如说象
标题说的:一个扑克
游戏,呵呵。其实也不是为了写而写,只是希望通过写这个程序熟悉一下.net而已。
程序虽然还没写完,但发现涉及面真的很广,几乎包括.net的所有方面。另外最近也想写一点儿东西,这
样就产生了要写这篇文章的念头,想结合目前正在做着玩的这个程序,完整的阐述一下这个程序从系统设
计到最后编码完成的过程,虽然程序不大,但牵涉面很广,并且完全采用
面向对象的设计思想和多层结构
开发的思路,并且在winform部分借鉴了vc的一些做法,可以作为一个典型的教学程序来看。有朋友建议
我根据这个写一本书,并且准备替我联系这件事,不过我这个人最大的特点就是怕麻烦,呵呵,出书太麻
烦,朋友们去买书也麻烦,还不如放到网上来的简单。我希望读这篇文章的朋友能从中了解一下我的一些
编程思想及编程习惯,如果对这些朋友能有些帮助,那就是我最高兴的事情了。需要提醒大家注意的是由
于程序并没有完成,并且我也是在学习当中,所以很多文章中的很多东西可能在文章的后面被推翻,不过
这样也好,可以让大家了解一下我的编程思想是如何改变的,另外由于这毕竟不是在写书,所以有些东西
并没有仔细推敲,有些随意,如果存在这样、那样的错误,请大家多包涵,也希望能给我指出这些错误。
好了,废话少说,让我们开始把。要完成一个项目,少不了下面几个阶段:
需求分析、系统设计、编
码和
测试,其中每个阶段又可以细分,由于目前这个程序比较少,所以没有必要每个阶段都涵括。先说说
需求把。现在我们要做的是一个带点儿赌博性质的扑克游戏,比较喜欢玩街机的朋友一般能玩过。各地的
叫法不同,我们这儿管这种赌博机叫FullHouse,很简单,你押上分后,系统会出5张牌,然后根据这5张
牌的组合来判断你的得分,然后你可以选择得分或比倍,选择得分则系统给你长分,游戏重新开始,选择
比倍就是猜大小,猜对了得分加倍,猜错了吗,你就倒霉了,呵呵。然后继续选择得分或比倍,直到你选
择了得分或比倍失败。下面是简单的
use case图和顺序图,(由于只是要简单的描述一下需求,所以胡乱
一画,呵呵)
<br>
现在需求差不多清楚了,我们就要来做系统设计了,由于程序比较简单,所以我就不采用从顶至下的
分析方式,直接就做类的详细设计了。让我们从最基本的类开始。既然是一个扑克游戏,那自然要有扑克
牌,那么这个扑克牌类如何设计呢?让我们想想一张扑克牌都具有哪些特性。其实很简单,要标识一张扑
克牌很简单,只有两个属性,一个是牌的花色,另一个就是牌的牌点,仅此两点就可以确定一张唯一的牌
,这样的话一个Card类就出来了,它有两个属性,一个是Colors(花色),另一个是Number(牌点),由于牌
的花色和牌点很难用.net中现有的数据类型描述出来,所以我们要定义两个枚举变量,一个是花色枚举,
它包括黑桃、红心、方片和草花;一个是牌点枚举,包括2-10及jack、queen和ace。Card类基本完成,让
我们回过头来看一下是否能够满足实际需求。仔细想一下,现在的类设计无法表示出两张特殊的牌:大王
和小王。这两张牌之所以特殊是因为我们无法简单通过花色和牌点这两个属性来确定它们,而只能明确地
说是大王或小王,针对这种特殊性,我们可以从Card类中继承出两个子类:Joker和ViceJoker,分别表示
大王和小王。然后在花色枚举中增加一个Node成员,在牌点枚举中增加Joker和ViceJoker两个成员。这样
的话可以说我们的扑克牌类的设计基本就完善了。
仅仅有扑克牌类还不够,因为没有什么扑克游戏是一张牌就可以玩得,所以我们需要一个牌集合类,
我们可以继承.net的Collection类来生成我们自己的CardCollection类。另外我们想一下扑克游戏中一个
必不可少的步骤就是发牌了,发牌其实就是把一幅牌按照随机的顺序排列起来,所以我们在
CardCollection类中增加一个静态方法,就是返回一个随机顺序的CardCollection对象,已备游戏使用。
好了,下面就是刚才我们设计的几个类的类图
可能你注意到上图中有几个我刚才没提到的类,并且你可能对如何构造自己的集合类感兴趣,所以我会在下章里说一下这几个类的作用并给出上述类的代码。
原文转自:http://www.ltesting.net