当前位置:文档之家› 毕业论文--斗地主游戏设计

毕业论文--斗地主游戏设计

东华理工大学长江学院

毕业设计

题目:斗地主游戏设计

英文题目:Landlord game design

学生姓名:

学号:

专业:信息工程

系别:信工系

指导教师:职称:讲师

二零一一年六月

摘要

随着科技的进步,计算机已经普及每个家庭,而计算机游戏也随之越来越多,越来越丰富。网络游戏、单机游戏等休闲游戏让众多人喜欢,而斗地主也受广大群众的追捧。

“斗地主”是流行于全国的一种扑克游戏,玩法简单,娱乐性强,老少皆宜。据传在万恶的旧社会,地主横行乡里,无恶不做,人们为了发泄对地主的痛恨,常常在一天的劳作之后,一家人关起门来"斗地主"。该游戏由三个人玩,用一副或两副牌,地主为一方,其余两家为另一方,双方对战,先出完牌的一方获胜。

本设计以一副牌规则为准.本论文讲述了单机版斗地主的游戏算法的设计,以Visual C++语言编译的一个应用程序。使用者可以简单方便的实现斗地主游戏。本程序界面友好,操作简单,比较实用。

本程序在详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的可行系统。

关键字:斗地主;纸牌;V isual C++

ABSTRACT

With the progress of science and technology,Computers have universal every family,and with more and more computer games,increasingly rich。The network game, LAN game and other casual games for many people like it,but Landlord also affected by the broad masses in both hands。

“Landlord”is a popular poker game national,play simple, entertaining is strong,enjoyed by young and old。Reportedly, the landlord of the old society in the root of evil, no hooliganism village don't do, people to vent the hate for landlords in the day, often after work, family behind closed doors " Landlord "。The game consists of three people playing, use a pair or two pairs of CARDS, landlords and the rest for the party to the other party, the two sides, first out CARDS against the party after winning。

This design with a deck rules shall prevail. This paper tells the stand-alone Landlord game algorithm is designed to Visual c + + language compiled an application. Users can simple to realize Fight the Landlord game. This procedure friendly interface, the operation is simple, is more practical。

This procedure in the detailed design constantly correction and perfect when,after testing phase repeated commissioning and validation, and finally form the feasible system to meet the design requirements。

Key word:Landlord;Cards;Visual c + +

目录

绪论 (1)

1. 系统设计的目的及设计思路 (2)

1.1 设计目的 (2)

1.2 设计思路 (2)

1.3 系统预览 (3)

2. 系统开发工具及其介绍 (4)

2.1 开发工具的选择 (4)

2.2 Visual C++编程特点 (5)

2.2.1 C++语言的发展 (5)

2.2.2 Visual C++ 6.0简介 (5)

2.2.3 Visual C++ 6.0的开发环境 (6)

3. 需求分析及可行性分析 (7)

3.1 需求分析 (7)

3.1.1 需求分析的作用 (7)

3.1.2 需求分析过程 (7)

3.1.3 需求分析的方法 (7)

3. 2 可行性分析 (8)

3.2.1 可行性分析的意义 (8)

3.2.2 可行性分析报告 (8)

3. 3 系统定义 (9)

3. 4 系统的组成和功能构想 (9)

4. 系统总体设计方案 (10)

4.1 C/S模式 (10)

4.1.1 C/S模式 (10)

4.1.2 设计原则 (10)

4.2 基于C/S的模块设计 (10)

4.2.1 服务器端模块设计 (10)

4.2.2 客户端模块设计 (11)

5. 纸牌设计 (13)

5.1 纸牌的设计 (13)

5.2 纸牌的出牌类型 (13)

6. 详细设计与系统实现 (15)

6.1 出牌记录和合法 (15)

6.1.1 出牌记录和合法性 (15)

6.2 显示信息功能 (17)

6.2.1 分牌 (17)

6.2.2 产生地主 (19)

6.2.3 牌面显示 (21)

6.2.4 出牌显示 (21)

6.2.5 非法出牌显示 (21)

6.2.6 胜负得分判定 (22)

结论 (25)

致谢 (26)

参考文献 (27)

绪论

随着电脑软硬件技术和互联网的飞速发展,电脑游戏也突飞猛进,成功游戏不断涌现。比较成熟的大型游戏主要有:反恐精英(CS)、星际争霸、魔兽争霸2、FIFA2003、帝国时代、FIFA2004等等。这时也出现了越来越多的网络小游戏,休闲类项目包括网络围棋、中国象棋、四国军棋、桥牌、麻将、拱猪、拖拉机、斗地主等。

各式各样的游戏给我们的生活带来了无限的乐趣,但同时也出现了一些问题。虽然计算机电脑已经普及绝大多数家庭,但有些偏远的地方却无法正常的接受到网络信号,这就给一部分人带来了有电脑不能上网休闲的烦恼。因此,一些单机游戏更受到了人们的追捧。本设计的目的是用简单的C语言设计出一个斗地主的小游戏,使用者只要运行该程序,就可以轻松的玩游戏了。

1. 系统设计的目的及设计思路

1.1 设计目的

网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。

另外也通过本毕业设计将四年来所学的专业知识和其他方面的知识融入到实际应用中。

1.2 设计思路

斗地主有网络斗地主和单机版斗地主游戏,本设计最主要的目的是基于Visual C++语言设计一个单机版斗地主游戏。开始制作游戏时,主要要解决的问题有以下几个方面:

(1)如何设置游戏的出牌规则。

(2)如何设置整个游戏的界面。

(3)如何控制斗地主游戏中每个玩家牌的随机生成,以保证各个玩家有公平的机会拿到任何一张牌。

(4)如何控制地主的随机生成。

(5)如何发牌的问题,每个玩家该拿几张牌,发牌的顺序是怎样的,以及有一方当地主时,将底牌发送给地主。

(6)如何判断游戏是否结束以及游戏的输赢问题。

1.3 系统预览

根据本系统的设计,开发出来的系统运行界面如图1-1所示:

图1-1 开始界面

2. 系统开发工具及其介绍

2.1 开发工具的选择

古语云:工欲善其事,必先利其器。利用一系列高效的、具有良好可视化的编程工具去开发各种数据库软件,从而达到事半功倍的效果,所以开发工具的选择显得非常重要。

随着计算机技术不断发展,各种编程工具也随着发展,但是现在市面上的数据库编程工具门类众多,优良不齐,比如VB、PB、DELPHI、C++ Builder、VC、JAVA等。我们先来了解一下各类开发工具。

VB,全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。VB开发效率高,代码执行效率一般,但是入门和学习速度快,有较好的学习氛围和帮助书籍和帮助文档。但是随着微软的.NET技术的推广,VB将会逐渐退出历史舞台。

PB,全称PowerBuilder,是开发MIS系统和各类数据库跨平台的首选,使用简单,容易学习,容易掌握,在代码执行效率上也有相当出色的表现。但是PB的高级编程书籍的缺乏和基础语言PowerScript的普及程度对PB的明天有一定的限制。

DELPHI/ C++Builder它们都是基于VCL库的可视化开发工具,它们在组件技术的支持、数据库支持、系统底层开发支持、网络开发支持、面向对象特性等各方面都有相当不错的表现,并且学习使用较为容易,充分提现了所见即所得的可视化开发方法,开发效率高。,它们所作的最大不足之处就是他们的帮助系统在众多的编程工具中是属于比较差的。

JAVA工具,目前比较出名的是Borland出的JBuilder和IBM出的Visual Age for Java,两种工具。适用于开发除了系统软件、驱动程序、高性能实时系统、大规模图像处理以外所有的应用。在一般的管理信息系统中和一般的数据库开发中,很少有人会选择JAVA。但是JAVA的强大网络功能和真正的面向对象特性决定了JAVA的未来,JAVA将在一个较为长期的时段里可以与微软家族抗衡。

Visual C++,是基于MFC库的可视化的开发工具,从总体上说它是一个功能强大但是不便使用的一种工具。它在网络开发和多媒体开发都具有不俗的表现,帮助系统也做得非常不错(Microsoft 在细节方面的处理往往都让人觉得亲切),从功能上讲除了跨平台应用外什么都可开发;从开发效率角度讲只局限于开发windows系统应用、可重用组件及驱动程序。又因为有微软的支持,其自身的基础语言的普及程度高,以及其代码的执行效率高等特性、VC自带强大帮助文档和大量优质教材,VC在开发工具中始终可以稳住阵角。

由于除了有些语言不是很熟悉外,而且是第一次开发网络游戏,对语言的驾驭能力还很有限,我选择了帮助功能非常强大的Microsoft (微软)的Visual C++作为我

的开发工具。

2.2 Visual C++编程特点

2.2.1 C++语言的发展

C++语言发展大概可以分为三个阶段:

第一阶段从80年代到1995年,C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;

第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;

第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。

C++是由C语言发展而来,是面向对象程序设计语言之一。C++语言是一种应用较广的面向对象的程序设计语言,使用它可以实现面向对象的程序设计。面向对象的设计与面向过程的设计是有很大区别的,面向对象的程序设计是在面向过程的程序设计的基础上一个质的飞跃。

2.2.2 Visual C++ 6.0简介

Visual C++是Microsoft公司的Visual Studio开发工具箱中的一个C++程序开发包。VisualStudio提供了一整套开发Internet和Windows应用程序的工具,包括VisualC++, Visual Basic,Visual Foxpro, Visual InterDev, Visual J++以及其他辅助工具,如代码管理工具Visual SourceSafe和联机帮助系统MSDN。Visual C++包中除包括C++编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。

Visual C++作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说Visual C++不是门语言,虽然它和Visual C++之间有密切的关系,如果形象点比喻的话,可以Visual C++看作为一种“工业标准”,而V Visual C++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循”工业标准”的前提下扩展而来的。

从最早期的1.0版本,发展到最新的6.0版本,Visual C++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的6.0版本在编译器、MFC类库、

编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。

Visual C++的优点是界面简洁,占用资源少,操作方便。

2.2.3 Visual C++ 6.0的开发环境

Visual C++ 6.0是一个Windows应用程序,启动后显示一个标准窗口,包括窗口框架、标题栏、菜单栏、工具栏、项目工作区、状态栏等,在这个窗口中可完成程序创建工程、编辑编译文件、资源编辑、程序调试、链接生成可执行文件等工作,是一个集成化开发环境。

应用程序的大部分命令是通过菜单发出的,在使用一个开发工具之前,了解其菜单功能是非常重要的。Visual C++ 6.0的主菜单包含File、Edit、View、Insert、Projec、Build、Tools、Windows、Help等项。

图2-1 Visual C++ 6.0的标准窗口

File菜单:New选项的新建文件中可以选择创建新的 C++源文件,头文件等

图2-2 创建新的头文件和源文件界面

Edit菜单:包含对源文件进行编辑的命令,有许多与Word编辑命令相同,另外还包含一些针对方便源文件录入的辅助工具。

Build菜单:对程序代码进行调试和生成可执行程序。

3. 需求分析及可行性分析

3.1 需求分析

3.1.1 需求分析的作用

需求分析就是分析软件用户的需求是什么。如果投入大量的人力,物力,财力,时间,开发出的软件却没人要,那所有的投入都是徒劳。如果费了很大的精力,开发一个软件,最后却不满足用户的要求,从而要重新开发过,这种返工是让人痛心疾首的。比如,用户需要一个linux环境下的软件,而你在软件开发前期忽略了软件的运行环境,忘了向用户询问这个问题,而想当然的认为是开发windows环境下的软件,当你千辛万苦地开发完成向用户提交时才发现出了问题,那这个时候的损失就是巨大的。

3.1.2 需求分析过程

需求分析阶段的工作,可以分为四个方面:问题识别,分析与综合,制订规格说明,评审。

(1)问题识别:就是从系统角度来理解软件,确定对所开发系统的综合要求,并提出这些需求的实现条件,以及需求应该达到的标准。这些需求包括:功能需求(做什么),性能需求(要达到什么指标),环境需求(如机型,操作系统等),可靠性需求(不发生故障的概率),安全保密需求,用户界面需求,资源使用需求(软件运行是所需的内存,CPU等),软件成本消耗与开发进度需求,预先估计以后系统可能达到的目标。

(2)分析与综合:逐步细化所有的软件功能,找出系统各元素间的联系,接口特性和设计上的限制,分析他们是否满足需求,剔除不合理部分,增加需要部分。最后,综合成系统的解决方案,给出要开发的系统的详细逻辑模型(做什么的模型)。

(3)制订规格说明书:即编制文档,描述需求的文档称为软件需求规格说明书。注意需求分析阶段的成果是需求规格说明书(好象软考曾经考过这个问题),向下一阶段提交。

(4)评审:对功能的正确性,完整性和清晰性,以及其它需求给予评价。评审通过才可进行下一阶段的工作,否则重新进行需求分析。

3.1.3 需求分析的方法

需求分析的方法有很多。这里只强调原型化方法,其它的方法如:结构化方法,动态分析法等(个人认为,对初学者不必深究这些方法,实际上我也从来没用过这些方法)在此不讨论。

原型化方法是十分重要的(是软考等常考的知识点)。原型就是软件的一个早期可运行的版本,它实现了目标系统的某些或全部功能。

原型化方法就是尽可能快地建造一个粗糙的系统,这系统实现了目标系统的某些

或全部功能,但是这个系统可能在可靠性,界面的友好性或其他方面上存在缺陷。建造这样一个系统的目的是为了考察某一方面的可行性,如算法的可行性,技术的可行性,或考察是否满足用户的需求等。如,为了考察是否满足用户的要求,可以用某些软件工具快速的建造一个原型系统,这个系统只是一个界面,然后听取用户的意见,改进这个原型。以后的目标系统就在原型系统的基础上开发。

原型主要有三种类型(软考考过):探索型,实验型,进化型。探索型:目的是要弄清楚对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性。实验型:用于大规模开发和实现前,考核方案是否合适,规格说明是否可靠。进化型:目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。

使用原型化方法有两种不同的策略:废弃策略,追加策略。废弃策略:先建造一个功能简单而且质量要求不高的模型系统,针对这个系统反复进行修改,形成比较好的思想,据此设计出较完整、准确、一致、可靠的最终系统,系统构造完成后,原来的模型系统就被废弃不用。探索型和实验型属于这种策略。

追加策略:先构造一个功能简单而且质量要求不高的模型系统,作为最终系统的核心,然后通过不断地扩充修改,逐步追加新要求,发展成为最终系统。进化型属于这种策略。

3. 2 可行性分析

3.2.1 可行性分析的意义

可行性研究能使新系统达到以最小的开发成本取得最佳的经济效益。可行性研究的目的,是根据所开发系统的请求,通过初步调查和系统目标分析,对要开发的民航票务管理系统从技术上、经济上、资源上和管理上进行是否可行的研究。这是一项保证资源合理使用、避免失误和浪费的重要工作。

经济上的可行性:主要分析成本与收益、投资效果等。

技术上的可行性:要分析技术力量、计算机性能、通讯网络和系统条件等。

资源上的可行性:主要指管理、经费能否得到保证。

管理上的可行性:如帐户管理水平、数据收集可能性、规章制度健全程度和领导对发展系统的态度。

3.2.2 可行性分析报告

以下为将可行性分析转化为的可行性报告

(1)经济上的可行性

(2)技术上的可行性:本系统技术实现简单可靠,因为不需要大规模的计算和读取数据,所以对计算机的性能要求并不高,对环境的搭建没有特殊的要求。

(3)资源上的可行性:开发本系统无需很特殊设备与环境,所以资源上具有可

行性。

(4)管理上的可行性:对于每个玩家都可以自己建立账号直接进入,方便简单。

3. 3 系统定义

本游戏是斗地主游戏,是根据民间的盛行的扑克牌游戏斗地主,融合现代电子游戏的特点和管理需要,推出的体现当前行业最具有代表意义的解决方案。作为面向广大用户电子游戏,主要用于提供斗地主的游戏平台,提供登陆、发牌、出牌、胜负判定、积分以及退出等主要功能。

3. 4 系统的组成和功能构想

(1)用户动作信息录入功能--输入

(2)系统信息显示功能--输出

(3)登陆功能

(4)退出功能

4. 系统总体设计方案

4.1 C/S模式

4.1.1 C/S模式

C/S (Client/Server,客户机/服务器)模式又称C/S结构,是软件系统体系结构的一种。C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据进行交互的部件。服务器程序负责有效地管理系统资源,如管理一个信息数据库,其主要工作是当多个客户并发地请求服务器上的相同资源时,对这些资源进行最优化管理。中间件负责联结客户应用程序与服务器管理程序,协同完成一个作业,以满足用户查询管理数据的要求。

4.1.2 设计原则

(1)客户端与服务器端必须连接在一起。

(2)登录的控制问题。当登录人数达到3时,拒绝其他客户端登录请示;当已登录玩家中,有人中途退出,其他已准备玩家须保持其状态(除非自行请示改变),而下面请示的玩家将直接填补退出者的位置。对于中途退出者,若是发牌之前或经过其他玩家一致同意其退出,则不对其进行处罚,否则,为逃跑性质,进行处罚。

(3)当满足开始游戏条件时,服务器发牌至每个连接客户端。并开始随机产生地主,最终为地主的玩家必须首先出牌。

(4)所有的客户端的任何动作必须询问服务器。当请示动作合法时,服务器发送许可消息,客户端方能做出请示动作(实际上只是显示动作的结果,因为服务器已经处理了该动作,在发送许可的同时发送了处理结果)。否则,服务器发送拒绝消息,客户端则显示有关错误信息。

(5)服务器处理所有的玩家的动作,然后广播数据给每个玩家;客户端通过判断机制决定是否接受广播,并执行相应的显示与相关的游戏设置。

4.2 基于C/S的模块设计

4.2.1 服务器端模块设计

(1) 数据传输的实现

使用WINSOCK编程实现C/S之间的通信。主要使用了以下几个类来实现数

据的传输。

类CListenSocket: 监视连接socket,监视来自客户端的连接请求。

类CClientSocket: 数据传送socket,传送C/S之间的数据、消息。

类Cs : C/S模式之间的数据传送。成员:消息 message,数据相关者InfoAbout,

Serialize(CArchive& ar),专用于收发数据,并存储于内存。

当客户端请示登录时,CListenSocket自动捕获请示,当请示合法且系统还有空位时,接受请示。并创建一个CClientSocket对象,CClientSocket处于活跃状态。然后,当对应客户端发来动作请示时,CClientSocket自动捕获之,通过playingcards调用规则机制(请看(2)游戏规则的实现),进行合法性判断以后,把所得的处理结果填入Cs数据传送单元,再广播出去。

(2)游戏规则的实现

通过封装相应的类来实现规则

类card :卡片类(牌),数据成员为花色(color),牌面(value),数目(num),存在标志(exist)。

枚举colors :包括方块,梅花,红心,黑桃,小鬼,大鬼总共六种花色。

结构体comb :内含头头是单,双,三顺,炸弹,火箭等所有牌型的标记位。

类playing_Cards :游戏规则类,数据成员:玩家数目(num_Players),有牌数目(num_Cards),每个玩家有牌数目(cards_Each)等。成员函数:游戏初始化initgame(),洗牌suffle(),发牌sendCards(),出牌outcards(player &ThisPlayer)等等。

Card是游戏的对象,一般而言,特定的游戏都有特定的游戏对象。Colors,comb 都是根据需要,对card 的补充。Colors 是各个牌的花色共有6种,后两种是小鬼(Bjoke)大鬼(Rjoke),不用于其他牌。Comb是combo的意思,指牌的类型。在斗地主中,牌型有单牌,顺子,对子, 3带1, 4带2,炸弹,火箭等。

4.2.2 客户端模块设计

(1) 登录功能的实现

类CClientUseSocket :客户端登陆Socket,专用于收发连接登陆请求,登陆成功之后,即刻关闭。

类CUseSocketDlg :客户端登陆对话框。

类CUseSocketApp :客户端登陆实现应用函数。

启动客户端程序,弹出登录对话框,要求用户输入用户名和服务器端的IP地址。点击“开始游戏”就可以向服务器发送登录请示。当登录请示得到许可时,提示登录成功,关闭CClientUseSocket,启动CClientUseSocket2并进入游戏准备开始游戏。

(2) 与服务器通信功能的实现

类CClientUseSocket2 :客户端游戏数据传送socket,专用于收发对服务器的数据。客户端退出时,才被关闭。

类Card: 卡片类(牌),数据成员花色(color),牌面(value)等等

类CS:数据传送单元,C/S模式之间的数据传送。数据成员:消息ID号message,数据相关者InfoAbout 等等。成员函数: Serialize(CArchive& ar),该成员函数专用于收发数据,并存储于内存。

这其实与4.2.1(1)数据传输的实现讲的是同一个原理,它们不同之处就在客户端不向服务器端发送反馈信息。

5. 纸牌设计

5.1 纸牌的设计

我们知道,一张普通的纸牌是由数字、花色和背面组成的,所以在设计纸牌游戏的时候,首先要设计出一副完整的纸牌,利用Visual C++语言来编译出纸牌的代码,然后再进行进一步的游戏出牌规则设计。下面是54张纸牌中15种类型牌的其中几张截图:

图5-1 牌型1

图5-2 牌型2

5.2 纸牌的出牌类型

每一种游戏都是有其定义的游戏规则的,斗地主也一样,其出牌牌型也有很多种,具体的有:单牌、一对、三张、三带一、四张、顺子、三带一对、四带二、四带二对、连对(至少3对)、飞机,其牌型及牌值定义如下:

牌型(Cards_Type) 牌值(Cards_Value) 牌数:

单牌: 1 CCard.Value(面值) 1

一对: 2 CCard.Value(面值) 2

三张: 3 CCard.Value(面值) 3

三带一: 31 三张的Card.Value(面值) 4

四张: 4 CCard.Value(面值) 4 单顺: 5 最小牌的Card.Value(面值) 5 三带一对: 32 三张的Card.Value(面值) 5 单顺: 6 最小牌的Card.Value(面值) 6 双顺: 222 最小牌的Card.Value(面值) 6 三顺: 33 最小牌的Card.Value(面值) 6 四带二单: 411 四张的Card.Value(面值) 6 单顺: 7 最小牌的Card.Value(面值) 7 单顺: 8 最小牌的Card.Value(面值) 8 双顺 2222 最小牌的Card.Value(面值) 8 三顺带二单: 3311 最小三张的Card.Value(面值) 8 四带二对: 422 四张的Card.Value(面值) 8 单顺: 9 最小牌的Card.Value(面值) 9 三顺: 333 最小三张的Card.Value(面值) 9 单顺: 10 最小牌的Card.Value(面值) 10 双顺: 22222 最小牌的Card.Value(面值) 10 三顺带二对: 3322 最小三张的Card.Value(面值) 10 单顺: 11 最小牌的Card.Value(面值) 11 单顺: 12 最小牌的Card.Value(面值) 12 双顺: 222222 最小对牌的Card.Value(面值) 12 三顺: 3333 最小三张的Card.Value(面值) 12 三顺带三: 333111 最小三张的Card.Value(面值) 12 双顺 2222222 最小对牌的Card.Value(面值) 14 三顺带三对: 333222 最小三张的Card.Value(面值) 15 三顺: 33333 最小三张的Card.Value(面值) 15 双顺 22222222 最小对牌的Card.Value(面值) 16 三顺带四单: 33331111 最小三张的Card.Value(面值) 16 双顺 222222222 最小对牌的Card.Value(面值) 18 三顺 333333 最小三张的Card.Value(面值) 18 双顺 2222222222 最小对牌的Card.Value(面值) 20 三顺带五单: 3333311111 最小三张的Card.Value(面值) 20 三顺带四对: 33332222 最小三张的Card.Value(面值) 20

6. 详细设计与系统实现

6.1 出牌记录和合法

6.1.1 出牌记录和合法性

在出牌的过程中,首先需要判断出牌是否合法,还需要记录未出牌的数量以及已经出的牌数量,其出牌流程图如下:

图6-1 出牌流程图

(1)显示出牌和未出牌的数量和牌的代码

class CCard

{

public:

int m_nColor; //花色;

int m_nValue; //面值;

public:

CCard();

};

class CPlayingCards

{

public:

相关主题
文本预览
相关文档 最新文档