软件工程纸牌游戏分析 - 图文

更新时间:2024-04-10 05:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

点击扑克会升起和回落问题的解决

问题说明:当扑克牌分发之后,玩家就可以通过鼠标来点击扑克牌,扑克牌被点击后,就会升起一定距离,表示已经选定了。当有其他扑克挡住的时候不能出现错误显示,必须是点击哪张哪张就升起。具体问题情况如下图所示(展示的是其中6种不同的情况):

通过分析,我们将纸牌区域分为上中下三个区域。上区只有被选上之后才会有扑克的上半部分;中区不论有没有选择,都会有扑克,并且,显示的区域只有一长条,该长条既不会被覆盖,又不会被覆盖其他牌;下区当选择和不选择每张扑克显示的大小是不一样的。 三个区域中,上区和下区是类似的出来,是问题的难点所在。区域划分如下:

问题的解决:

1、点击时有反应,必须响应鼠标点击事件,我们采用了重写虚函数OnLButtonDown(UINT nFlags, CPoint point) 。

2、在OnLButtonDown函数里面,首先必须是响应的是扑克区域的内,定义一个rect对象,圈定范围。

3、以上区为例,定义一个数组,记录每张牌的范围,从左端开始,做好记录之后,在判断的时候,以右端为开始,当在其范围内,就重绘,不再往下判断,这样就解决了问题。

常量用宏(比如位置等等) 类的设计:

1、要出的牌,或者是出的牌

struct OutPoker { int ordinaryPokerNumber; int kingPokerNumber; int specialKingPokerNumer; int valueOfOrdinaryPoker; int total; };

普通牌的数量 小王牌的数量 大王牌的数量 总共的数量

2、每张牌所占的位置的坐标(用于解决点击弹起和落下问题)

struct PokerRange { int min; int max; };

起始位置坐标 结束位置坐标 3、纸牌类

class CCard {

public: short value; CBitmap pokerBitmap; CCard(); virtual ~CCard(); };

权值(点数) 图片资源

二、加密前消息的设计

所有消息都至少有一位标记位,以第一位为主标记位。 1、发牌的消息

例:1987654321 说明:

标记位值:1

后面跟byte型的数字,以从大到小的顺序排列好

2、Client收到的准备消息

例:50111 说明:

标记位值:5

后面有且只有4位,0表示未就绪,1表示就绪

3、Client发出的准备消息

4、Client发出的明抢消息 5、Client收到的明抢消息 6、Client发出的皇帝消息

当皇帝或者不当皇帝(让位) 7、Client收到的皇帝消息

当皇帝或者不当皇帝(让位) 8、Client发出的保消息

明暗

9、Client收到的保消息

10、玩家出牌消息

例:221 标记位为:2

第二位为:玩家信息 第三位:出牌数量 第四位:普通牌的数量 第五位:普通牌的值 第六位:小王牌的数量

第七位:大王牌的数量 11、出牌计时器

12、Client发出胜利消息 13、Client接收胜利消息 14、文字聊天消息

发出者信息 信息内容

15、语音聊天消息(如果实现的话)

语音内容

本文来源:https://www.bwwdw.com/article/je3r.html

Top