扑克游戏架构及其实现(一)

前言

去年下半年做了一个项目,是扑克类的网络游戏。原计划包括:拱猪、斗地主、梭哈、红五三打一等。但是最重项目流产,只完成了拱猪和红五三打一。去年在动工的时候,网上的相关资料很少(一般都是很简单的比较大小游戏),尤其是win32下以MFC实现更加是凤毛麟角。我主要参考了一篇老外的文章,此文主要阐述了如何利用windows自带的cards.dll绘制各色扑克牌,以及示范程序,我会在收藏中贴出来。想找到联众或者中游的源代码作参考自然是不可能的。故而其设计还是我自己实现的。目前项目流产,不愿意让其躺在硬盘里睡大觉,愿意将一些所得贴出来与大家共享,也算作一种敝帚自珍吧。

概述

游戏分为 网络层应用程网络层由同学Kiang完成并且封装,应用层由笔者完成。在笔者开发 应用层的时候,只需要知道网络层有如下特性:
1、  诸个游戏者每人运行一个程序实例于各自的计算机上。此处将每个实例定义为一个“ ”。
2、  诸个端中有一个为“ 主机”,“主机”直接负责与游戏服务器联系,即:从运营商的服务器上下载各个游戏者的积分等信息;并且负责将消息分发至其他的玩家。诸个端中,与“主机”相对应的,定义为“ 从机”。
3、  网络层提供的服务:将本端应用层发来的消息分发到其他所有的端;将其他端发送来的消息正确发送到本端应用层。并且保证 正确性时序性
 
由上面网络层的特性,设计应用层原理应当如下:
1、  定义每个参加游戏的人为“ 玩家”。每个玩家在每个端上都有一个抽象的映射,即一个 Player。若一个游戏有N人(N个玩家)参与,则在每个端上,共有N个Player。某端N个玩家中有一个是 本地的( local ,其他N-1个是 远程的 (remote)。所谓本地(local)即,接受来自GUI的消息并且向其他端相对同一个玩家的Player(remote)发出消息。而remote Player则不接受来自GUI的消息,接受来自远端Player(local)的消息。故而,藉remote-local结构,应用层通过网络消息同步各个端某个玩家对应的所有Player,保持各段数据的一致性
2、  剥离游戏和界面,即剥离 GameView两个类。Game类负责以虚函数重载的方法根据各个不同的游戏,设置不同的规则。有如下几个基本功能分别需要由虚函数实现:
l         大小比较规则
但张牌或者组合牌的大小比较。
l         出牌合法判定规则
若出牌不是本规则允许的组合,则被退回。
l         出牌次序判定
每一局、每一轮、每一副牌谁先走牌,谁后走牌。

你可能感兴趣的:(VC/MFC)