斗地主游戏论文初稿
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要 ...................................................................................................... I II ABSTRACT ........................................................................................... I II 第1章引言 .. (1)
1.1课题背景及意义 (1)
1.2课题设计目标 (1)
1.3论文框架结构 (2)
第2章系统分析 (3)
2.1系统功能要求 (3)
2.2系统体系结构 (4)
2.2.1 MTK总体软件方案架构 (4)
2.2.2 MMI架构 (4)
2.2.2.1 框架层(Framework Layer) (5)
2.2.2.2 应用层(Application Layer) (6)
2.2.2.3 UI层 (6)
2.3游戏流程图 (6)
2.4本章小结 (6)
3.1概要设计 (7)
3.1.1斗地主游戏的规则简介 (7)
3.1.2各功能模块的详述 (7)
3.1.3算法的详述 (8)
3.1.4主要功能模块的结构 (8)
3.2游戏的规范化 (9)
3.2.1确定目录结构 (9)
3.2.2将相关文件路径加入Plutommi编译配置文件 (10)
3.3资源 (10)
3.3.1字符串资源 (11)
3.3.2菜单资源 (12)
3.3.3图片资源 (12)
第4章手机游戏的实现 (12)
4.1开发环境 (12)
4.1.1 编译环境的搭建 (12)
4.1.2 VC6.0相关介绍 (12)
4.1.3 Source Insight介绍 (13)
4.1.4 其他重要工具介绍 (13)
4.2游戏开发中语言的选择 (14)
4.3代码实现 (15)
4.3.1菜单模块的实现代码 (21)
4.3.2.1游戏开始函数 (22)
第5章手机游戏的运行和调试 (24)
5.1游戏中各模块的运行界面 (24)
5.1.1菜单界面 (24)
5.1.2游戏界面 (25)
5.1.3游戏结束界面 (25)
5.1.4游戏设置界面 (26)
5.1.5帮助界面 (26)
5.2游戏的调试 (27)
5.3游戏的运行 (28)
总结 (28)
参考文献 (28)
致谢 (29)
基于MTK平台开发的斗地主游戏
摘要
随着通信技术的发展和手机的普及,手机现在已经成为人们日常生活中必不可少的工具,人们在使用时也不仅仅把它当成是通讯工具,更愿意用它来娱乐。
所以手机游戏的开发技术越来越为人们所关注。
越来越多的手机软件商投身到手机游戏的制作中。
可以说手机游戏开发具有非常开阔的前景。
MTK是台湾联发科技多媒体芯片提供商的简称,全称叫MediaTek。
基于MTK平台的应用软件,是在电脑中完成手机应用程序的相应代码,当各功能完成后,将最终代码烧录到实际手机中进行真机测试、调试。
关键词:手机;游戏;斗地主;MTK
Based on MTK platform development Snake Game
Abstract
With the development of communication technology and the popularity of mobile phones, mobile phones have now become an indispensable tool in daily life, not just when people use it as a communication tool, more willing to use it for entertainment. Therefore, the development of mobile game technology is more and more people are concerned about. More and more software vendors to join the mobile phone to mobile phone games production. Can be said that mobile game development has a very broad prospects.
Taiwan's MediaTek MTK is a provider of short multimedia chip, the full name called MediaTek. MTK platform based applications, mobile phones in the computer to complete the appropriate application code, when the function is completed, burn it to the final code for the actual phone real machine testing, debugging.
Keywords: mobile phone ; game ; Landlords; MTK
第1章引言
斗地主,是个简单的小游戏,但却能给人以放松,让我们从繁重的日常生活中解脱出来.而只有我们的身心得到了娱乐才能更好的投入到新的工作.现在的人,不管是已经工作的,还是还未进入社会的学生,都面临着很大的压力,而这样一款能让我们随时随地都能享受的游戏,其魅力还是不可估量的.
1.1课题背景及意义
斗地主,之所以取这样的名字,其用意还是很明显的.斗地主其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的.而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功.虽然现在市面上存在着各种各样的游戏版本,可是斗地主其市场还是相当大的.因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏的关卡,其刺激性也更强.可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行.对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的,这样的小游戏刚好迎合了他们的需求.
目前市场上MTK平台占有率在20%左右,使用MTK手机的人数如此众多,所以在MTK平台上开发游戏是比较有意义的。
手机游戏的盈利空间非常大,无论是下载时收取一定费用,还是通过广告盈利都是非常可行的。
手机游戏的开发与传统PC机的游戏开发有一定差距,因为手机平台资源有限,所以开发时要处处考虑资源分配问题。
而且,手机已经和现代生活方式紧紧结合在一起,可以说是随身必带品。
所以手机游戏的盈利面因为手机的覆盖率而变得非常广。
1.2课题设计目标
易于学习: 既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。
消费者不会花几个小时去研究一个3元的手动操作的游戏。
手机游戏操作的简单性是开发过程中必须要遵循的基本特征。
可中断性: 多任务处理是手机生活方式的基本特征。
手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。
而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。
所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。
所以在玩游戏的过程中,如果遇到来电或接受到短信这样的优先级最高的进程,要能够保存游戏进程,保证接完来电或查看短信之后还可以继续游戏。
良好的用户界面: 良好的用户界面用户界面更是吸引用户的硬指标。
相关的美术构图、
游戏实时性和人性化提示也是必须要考虑的。
所以,在设计过程中,要注意这几个方面的功能,使该游戏更加完善。
1.3论文框架结构
第1章引言:介绍了课题研究的目的和意义,国内外背景以及课题的设计目标。
第2章系统开发技术简介:简述了MTK以及MTK体系结构,还阐述了手机游戏的特征、类型、价值链及发展。
第3章手机游戏开发过程:概述了斗地主游戏的规则简介以及开发环境及其开发环境。
第4章程序调试与运行:分析了程序调试的步骤与运行的环境。
第2章系统分析
本章简述了MTK以及MTK体系结构,还阐述了手机游戏的特征、类型、价值链及发展。
2.1 系统功能要求
基于MTK平台的应用软件,是通过将手机中的应用程序在电脑中完成相应代码后,运用模拟器测试各项功能,当各功能完善后,将最终代码烧录到实际手机中。
MTK使用了Nucleus实时操作系统,MTK在内核做了个内核抽象层的封装,以适应多种实时操作系统,如oscar、ThreadX、Nucleus。
整个软件系统包括Nucleus操作系统、平台设备驱动、协议栈、文件系统、WGUI、MMI、J2ME等。
MMI部分包括了操作系统内核、协议栈、文件系统上层的所有部分。
本游戏是基于MTK平台设计的一款手机游戏——斗地主。
经过详细地分析调查,该游戏具体功能有一下几项:
a)在MTK手机09A系统中,在“多媒体”菜单中的“游戏”菜单中添加一个菜单“斗地主”。
b)进入“游戏”菜单后,有“新游戏”菜单、“继续游戏”菜单、“设置”菜单、“帮助”菜单、“推出”菜单可以进行选择。
c)点击进入“新游戏”菜单,进入斗地主游戏。
游戏界面会出现欢迎界面,等待键盘事件进入游戏。
游戏界面是由一张带有三张A的图片构成,上面布置了一些操作按钮。
通过手机的上下,左右键可以选择要出的牌,左软件和出牌按钮都可把选择的牌出出去。
由于右软件注册了还回事件,所以把“过牌”注册在按钮上。
d) 进入“继续游戏”菜单:如果中途推出游戏,在会把数据全部保存下来,带以后进入游戏时可以通过选择“继续游戏”菜单继续游戏。
因为数据时保存在NVRAM中的,所以即便关机后,也能继续游戏。
d)游戏的结束有两种情况:失败和成功。
游戏失败的话,会进入游戏失败界面。
游戏胜指手动出牌方最先把牌出完,游戏会弹出一个字符串,提示胜利信息。
e)游戏设置的选择:点击进入“设置”菜单,可以通过此页面进行游戏声音开与关进行设置。
f)游戏帮助菜单的选择:进入帮助菜单,可以看到操作游戏的简单说明,以便玩家很快掌握操作技巧。
g)游戏推出菜单的选择:直接推出游戏,还回到上一个界面。
2.2 系统体系结构
MTK成功的秘诀在于其销售的不仅仅是芯片,而是包括软件平台、第三方应用软件在内的完成解决方案。
MTK提交给客户的定制版本中,已经集成了人机界面MMI、GSM/GPRS 协议层,实现了E—mail客户端、短信、SIM卡应用。
2.2.1 MTK总体软件方案架构
MTK整个软件架构实际上分为五个核心部分,分别是MMI、L2/L3协议栈、Drivers设备驱动、WAP应用和L1层协议栈,其中操作系统(Nucleus)、物理层协议栈(L1 Protocol Stack)、驱动程序(Drivers)、GSM协议栈(L2/L3 Protocol Stack)和MMI运行于MS(Mobile Station)。
Catcher为真机的抓包工具,META为手机参数的调试工具。
图2.1:MTK软件架构
其中L2/L3/L4层协议栈包含了大量的GSM/GPRS需求以及提供一个优秀的GSM/GPRS 平台给应用程序。
而下一节,将详细介绍MTK最重要的部分MMI。
2.2.2 MMI架构
MMI(Man Machine Interface) 人机界面。
MTK系统的重要属性即为Task。
Task是一个具有一定封装性的软件模块,是操作系统层面的概念,当该模块被执行的时候,可以把它理解为一个独立的进程。
在整个系统运行的过程中,有许多Task,其中MMI也是一个特
殊的Task。
MMI部分可以分一下4个主要部分:Framework(框架层)、Application(应用层)、UI Layer(UI层)、MMI与L4层的通信。
MMI整体的架构图如下:
图2.2 MTK MMI架构图
2.2.2.1 框架层(Framework Layer)
顾名思义,框架层就是MTK软件方案中已经设计好的部分,以后客户逻辑将直接使用其已经设计好的特性。
框架层提供如下的核心功能。
消息队列、提供操作系统的抽象、事件句柄、历史机制、NVRAM访问、文件系统管理。
2.2.2.2 应用层(Application Layer)
包含用户定义的代码,用来执行业务逻辑,可以提供一下功能:应用程序基本框架,包括各种先策划能够的应用程序模板、屏幕历史的保护,用于屏幕切换时的数据保存和状态维护、进入一个新屏幕的入口函数,退出当前屏幕的处理函数、按键事件的注册和执行。
2.2.2.3 UI层
UI层的重要功能有:为应用程序提供UI接口功能、提供界面组件。
2.3游戏流程图
经过对游戏的开发进行分析,该游戏的逻辑模型基本如下:在手机中完成对游戏的设计。
具体流程图如下:
图2.3 游戏流程图
2.4本章小结
本章首先对于本游戏的功能需求进行了详细地阐述,了解了游戏中需要完成的各项功能。
其次,对游戏开发基于的系统进行了详细地分析,主要介绍了MTK的软件方案的架构,并主要介绍了MMI部分的架构。
最后,对于游戏的流程进行了简要地概述。
第3章手机游戏设计
本章主要介绍了在该手机游戏的开发过程中游戏的规则简介,介绍了该游戏开发时的环境,并详细讲解了该游戏的设计过程。
3.1概要设计
3.1.1斗地主游戏的规则简介
1、点击“斗地主”游戏菜单进入游戏后,可点击“新游戏”,进入欢迎界面,输入任意键进入游戏!叫分结束后方可开始游戏。
在游戏中,不论是手动出牌,还是自动出牌都有严格的控制,根据斗地主游戏的规则,定义了不同的牌型:三带两,三带一,连顺,单顺等。
2、点击进入“继续”,可以读取以往的数据,继续游戏。
不会再有欢迎界面和叫分的过程。
3、在游戏过程中,当有一方剩余的牌为0时,游戏结束。
4、叫分规则,一共有四种叫分的可能,只要有一方选择了某一分值,下面就无法再被重复,手动出牌方的叫分是由玩家根据自己的牌,来选择叫多少分,自动出牌方的叫分时通过计算各自所有牌的总分值大于70且小于100的叫1分,大于100小于140的叫2分,大于140叫3分,小于70分的不叫分。
3.1.2各功能模块的详述
根据游戏的规则,可以将斗地主游戏系统分为一下几个模块:菜单模块、游戏模块、游戏等级模块、最佳成绩模块、帮助模块。
(1)菜单模块
在菜单模块中,通过MTK系统中的给游戏的模板接口,在模板的接口函数中添加自己的字符串和响应函数,使游戏各个菜单项显示在屏幕上,玩家可以通过上下键高亮自己想要选择的菜单,通过左键或中间键(CenterKey)进入选择的菜单项。
(2)游戏模块
进入新游戏时,可以通过上下,左右键选择要出的牌,左软键或点击屏幕上方的出牌按钮都可以实现出牌。
在游戏中,如果有一方剩余牌为0,游戏结束。
(3)继续游戏模块
当玩家由于某种原因结束了游戏,程序会自动把相关数据保存到NVRAM中,以便以后进入游戏可以继续游戏。
(4)游戏设置模块
游戏设置模块对游戏中是否有音效进行了设置,可以打开音效,也可以打开音效。
(5)帮助模块
在帮助模块中,主要记录了游戏的操作规则、以及游戏中的注意事项。
3.1.3算法的详述
(1)整体的游戏界面格局:
手机的屏为240*320,把手机分成底牌显示区,叫分操作区,出牌操作区和现实剩余牌这四个主要区域。
如下图:
(图3-1)游戏主界面
(2)牌的生成
每次进入新游戏,都会以时间为种子值生成54个不同的值,54个不同的值都代表了扑克牌中不拍花色和不同牌值。
所以每次进入游戏都会生成不同的牌。
(3)牌的选择
每张牌都对应一个flag标记,如果用户按下向上键,则把flag设置为1,并把牌向上突出一块,以显示此张牌已被选中。
(4)出牌
和选择牌的方式相似,出牌后都会设置其对应的标记为flag,手动出牌为1,右上方出牌flag为2,左上方出牌flag为3。
手动出牌没有压过对方的牌时,便会选择“过牌”,此时程序会通过判断flag的值来判断是那方最后出的牌,然后继续出牌。
3.1.4主要功能模块的结构
(1)游戏模块的结构
(图3-2)游戏模块结构图
3.2游戏的规范化
在进行游戏开发前,我们应该做好相应的准备工作,确保自己的代码在加入系统正确规范。
3.2.1确定目录结构
浏览MTK提供的软件代码,发现整个平台软件代码都是由许许多多独立的模块组合起来的,为了遵循其制定的规则,在本游戏中,游戏代码的组织结构如下:本游戏模块的目录结构:
plutommi\mmi\MyApp:游戏模块总目录
plutommi\mmi\MyApp\MyAppInc:模块头文件目录
plutommi\mmi\MyApp\MyAppSrc:模块源文件目录
(图3-3)文件目录
在MyAppInc中添加四个头文件,分别是:MyAppDefs.h、MyAppGprot.h、MyAppProt.h、MyAppTypes.h。
在FunAndGamesSrc中建立MyAppSrc.c、MyAppProgram3.c文件,将来程序的实现就完全在该文件中进行描述。
而各文件的主要功能如下:
MyAppSrc.c:自己定制的屏幕模板。
MyAppProgram3.c:实现游戏的主要函数
3.2.2将相关文件路径加入Plutommi编译配置文件
修改make\plutommi\mmi_app下的三个文件:
mmi_app.inc——MMI所有头文件所在路径
mmi_app.lis——指明MMI需要编译的所有源文件
mmi_app.pth——指明MMI所有源文件路径
3.3资源
在进行实际的游戏设计之前,需要将游戏中需要的各种资源添加完成。
而在MTK平台中常见的资源包括字符串、图像、菜单、字库、声音、主题等等。
而在开发过程中,最经常用的资源有以下这三种资源:字符串、图像、菜单。
在MTK平台中,在plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI下你会看到很多Res_前缀的文件,这些都是各个模块的资源文件定义,包括了其所使用的字符串、菜单和图片等。
添加资源的步骤如下:
第一步:添加文件,为我们游戏模块添加一个资源文件,将其命名为Res_MyApp.c。
在该文件中添加了字符串,图片等资源。
部分截图:
(图3-4)添加字串资源
(图3-5)添加图片资源
第二步:修改makefile文件,在其中添加我们新增的头文件目录,目录里面包括了与资源文件定义有关的头文件。
打开文件\plutommi\Customer\ResGenerator ,增加头文件路径:-I "../../MMI/MyApp/MyAppInc" 。
至此,已经为新增的程序模块做好了基本的资源框架,在添加资源之前,首先定义程序的基础ID.MMI软件系统中,所有程序的资源ID都是独一无二的,必须保证这些ID不能相互冲突。
第一步:打开文件:plutommi\mmi\Inc\ MMIDataType..h,添加如下语句:
(图3-6)添加ID
第二步:按照源代码的格式,添加如下宏定义:
(图3-7)添加ID
3.3.1字符串资源
字符串资源的添加分为三项:ID名称、值、字符串标题。
进入路径plutommi\Customer\CustResource\PLUTO_MMI,打开文件ref_list.txt,可以看到字符串描述文件的具体格式,第一列是字符串ID,第二列是字符串所属的程序模块名字,第三列是指本字符串的最大长度,第四列是字符串具体内容,第五列以后,就是字符串对应的各国语言版本。
具体添加过程为:
(1)打开上述字符串描述文件ref_list.txt,按照上面提到的格式添加自己的数据。
(2)确定字符串ID。
在文件MySnakeResDef.h中添加字符串ID。
(3)字符串装在。
在MyAppResDef.h中,PopulateMyAppRes函数中添加相应字符串代码。
3.3.2菜单资源
菜单是我们添加新的应用程序的一个典型入口,而菜单是按照如下步骤制作的:
(1)确定菜单的ID
整个MMI中用到的菜单ID都位于plutommi\mmi\Inc\GlobalMenuItems.h文件中。
在
枚举中添加自己的菜单,一定在MAX_MENU_ITEMS_VALUE之前。
(2)将新的ID整合在游戏菜单中
打开文件plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\Res_MainMenu.C 将菜单整合到ORGANIZER子菜单中。
而当我们上下选择菜单时,系统将会对当前高亮的菜单发出一个通知,这样用户就通
过单击当前高亮菜单,执行其注册功能,利用SetHiliteHandler函数,通过参数菜单项
的ID和接受通知的函数指针来实现此功能。
3.3.3图片资源
做UI不能没有图片资源,图片资源的加载方式类似字符串:定义图片ID、在plutommi\Customer\Images\PLUTO240X320\MainLCD目录下新建文件夹MyApp、在文件夹
中添加图片、在PopulateMyAppRes()函数中添加图片加载代码。
第4章手机游戏的实现
4.1开发环境
本游戏是以MTK系统作为开发平台,ADS、PERL等编译软件。
VC6.0作为模拟器编
译、SourceInsight作为代码编辑工具,Catcher等为调试工具,FlashTool为烧录版本工具。
4.1.1 编译环境的搭建
(1)按默认路径安装ARM编译器ads1.2
(2)按默认路径安装ActivePer
(3)MinGW
(4)MSYS
因为MTK整个软件模块异常的庞大复杂,所以采用GNU的make命令来进行编
译,使得工程编译更加灵活和便于控制。
4.1.2 VC6.0相关介绍
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发
的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,
只适用于Windows 2000,Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为平台。
Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。
这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。
.
4.1.3 Source Insight介绍
Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。
Source Insight能分析你的源代码并在你工作的同时动态维护它自己的符号数据库,并自动为你显示有用的上下文信息。
Source Insight不仅仅是一个强大的程序编辑器,它还能显示reference trees,class inheritance diagrams和call trees。
Source Insight提供了最快速的对源代码的导航和任何程序编辑器的源信息。
就将Source Insight应用到你的项目开发过程中并切实感受它为你项目开发的效率带来的变化。
Source Insight提供了快速和革新的访问源代码和源信息的能力。
与众多其它编辑器产品不同,Source Insight能在你编辑的同时分析你的源代码,为你提供实用的信息并立即进行分析。
4.1.4 其他重要工具介绍
(1)Catcher介绍:
Catcher是一个在PC端的工具,用于MTK GSM/GPRS产品。
它的主要功能是记录primitives和debug信息。
Catcher有两种运行模式:logging(记录)模式和off-line(离线)模式。
logging模式时,catcher需要取得在target-build过程中所生成的数据库。
设置正确的数据库以后,工程师可以连接至target并针对他们想分析的信息设置filters。
所有这些设置可以被保存在一个workspace文件内。
Primitives和debug信息可以被保存至一个log文件。
工程师可以打开Engineering Dialog(工程对话)以查看手机的数据。
可以使用SIM编辑器来检索和设置SIM卡内的数据。
在logging时,catcher也提供一种命令发送功能,即向协议栈的module发送“Proprietary 命令”和“A T命令”。
于是协议工程师就能即时控制协议栈module的状态和行为。
工程师还可以使用Catcher提供的菜单命令来检索手机的exception和统计数据信息。
在Off-line模式,工程师可以打开一个log文件、分析log信息。
可以设置Off-line filters 来显示最有用的信息。
Catcher还支持primitive log的MSC View。
(2)FlashTool介绍:
FlashTool是手机下载工具。
Flash_tool.exe 可烧写程序。
该工具的主要设置是 COM 口和目标文件位置。
Download argent 和 scatter file 用自带的就可以了,选中这两项后,会出现ROM的选择项,点击后可选择.bin文件。
设置好上面的参数后,连接上手机,将手机断电,然后按开机键就可以烧写程序了。
(3)串口工具:
如:windows自带的超级终端等,
(图4-1)串口工具
4.2游戏开发中语言的选择
本游戏选择C语言作为开发语言,下面对C语言进行一些介绍。
C语言的原型ALGOL 60语言。
(也称为A语言)
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的
名字“B语言”。
意思是将CPL语言煮干,提炼出它的精华。
并且他用B语言写了第一个UNIX 操作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
即是著名的ANSI C。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C语言程序》(The C Programming Language),从而使C语言成为当时世界上流行最广泛的高级程序设计语言。
1988年,随着微型计算机的日益普及, C语言出现了许多版本。
由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。
为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3.C语言的主要特点。
C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。
许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ都是由C 语言编写的。
用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
C语言的优点有:简洁紧凑、灵活方便,运算符丰富,数据结构丰富,C是结构式语言,C语法限制不太严格,程序设计自由度大,C语言允许直接访问物理地址,可以直接对硬件进行操作,C语言程序生成代码质量高,程序执行效率高,C语言适用范围大,可移植性好。
4.3代码实现
下面对游戏中主要模块代码的实现进行详细地描述:
1)数组card[55]的定义:该数组中保存了五十四张图片的ID,其中第一个元素是NULL,这样就可以从1~54对应起来。
使算法要简单的多。
把牌的ID按在斗地主中牌的大小来排,且相同大小的牌按黑桃,红桃,梅花,方块的顺序排列。
即:数据位1,2,3,4,5其对应的牌分别为黑桃3,红桃3,方块3,红桃3,黑桃4。
其他牌按照此规律以此类推。
下如图所示,数组的第一个元素被赋为“NULL”,这样就可以使数组的下标和产生的随即数相匹配,为后续的开发带来了很多便利。
具体的数组定义如下图所示:
(图4-2)放牌的图片ID数组
2)54个不同数字的产生。
以时间为种子值,每次产生一个随即数,再对54取余然后再加1,这样就得到了从1到54的随机数,再利用循环把当前产生的这个数与之前所有的数比较,如果相等则跳出该循环,继续产生数字,直到不等的情况才可以赋值到数组中保存,以确保这54数字没有重复出现。
从本质上讲,利用这个随机数最直接的目的就是想得到一个随机排序的五十四个数字。
具体的代码实现如下图:
card_second = (unsigned int)currTime.nSec + (unsigned int)currTime.nMin + (unsigned int)currTime.nHour;
srand(card_second);//srand(time(NULL));
for(;;)
{
a[i_dispart] = abs(rand())%54 + 1; //产生1~54的随即数
for(j = 0 ; j < i_dispart ; j++)
{
if(a[i_dispart] == a[j])
{
break;
}
}
if(i_dispart==j)
{
i_dispart++;
}
if(i_dispart==0)
{
i_dispart++;
}
if(i_dispart==54 )
{
break;
}
}
(图4-3)随机数的产生。