[内附完整源码和文档] 基于mfc实现的21点小游戏

1.系统的介绍
1.1 设计的目的与意义
21点游戏是一款经典的扑克牌游戏,由古至今衍生的各种各样的规则和玩法,游戏的设计旨在为平淡的生活带来乐趣,以及最重要的,通过对游戏的设计来实现练习,实际操作,学习他人程序优点,通过研究,了解需求并设计程序,掌握设计课题的基本步骤和方法。

1.2 本设计的主要内容
程序使用较为简单的游戏规则:玩家与电脑对战,使用一副没有大小王的扑克,游戏开始后,起始发两张手牌,玩家可根据所持牌的点数选择继续要牌或开牌,使得自己牌的点数尽可能接近但不超过21点,玩家最多可要5张牌,开牌后最接近且不超过21点的一方为赢家,双方点数相同或双方点数均超过21点为平局。

要求实现游戏规则中的功能

要求基于对话框界面操作

界面美观,具有用户友好性

2.需求分析及设计
2.1 类的设计
根据游戏规则和MFC程序设计要求,程序的主要类为CDialog的派生类CMFC_GameDlg:

该类中主要的数据成员有以下几种:

玩家持牌信息user_card

电脑持牌信息com_card[]

玩家持牌的点数user_dot[]

电脑持牌点数com_dot[]

玩家持牌张数count

判断是否开牌的变量flag

该类中的主要成员函数有以下几种:

初始化函数Init(),用于给变量赋初值

电脑抽牌函数com_getcard(),利用srand生成随机函数种子,rand()函数根据种子生成随机数并对52取余,若得到余数不为了0且该牌编号未曾出现,则将这张牌的编号赋值给com_card[],表明电脑抽到一张牌

胜负判断函数Judge(),若双方点数一致或均超过21点,为平局,电脑点数较大且不超过21点,或电脑超过21点玩家超过21点则电脑胜,若非平局或电脑胜,则玩家胜

显示牌面函数show_card(),通过创建位图兼容设备,将电脑持牌信息com_card[]和玩家持牌信息user_card[]中对应编号与资源中ID一致的位图显示到屏幕上

显示点数函数show_dot(),通过电脑持牌信息com_card[]和玩家持牌信息user_card[]可确定电脑和玩家的点数,将其输出到对话框对应的文本框中

显示以往对战记录函数Record(),将一个CString对象与显示记录的文本框关联,该对象值的变化可即时反映到文本框中,实现记录的显示

记录清除函数OnClear(),将保存记录的CString对象赋值为空字符串,并将保存轮数的变量T归零

记录保存函数OnSave(),通过CFileDialog类显示文件保存对话框,将保存记录的CString对象保存为文本文档。

2.2 系统的数据设计
为了方便用户查看以往的记录,程序添加了记录显示函数Record()和记录保存函数OnSave(),每轮游戏结束后,双方的牌面和游戏结果会显示在界面右边的文本框中,并且可以通过菜单将记录保存为文本文档。

为实现界面美观性和用户友好性,程序在中加入了头文件SkinH.h和库文件skinH.lib,以及动态链接库skinH.dll;用来实现载入外部皮肤的功能。

2.3 系统的实现及调试
程序完成的初期由于选择的不恰当的函数,无法载入图片,通过查看网上一些在MFC载入图片的实例后,了解到可以通过CBitmap这个类的中的LoadBitmap接口获取图片信息,并BitBlt实现位图的指定位置投影。

关于皮肤的设置需要手动添加头文件和代码,前期由于疏忽,漏掉的预编译中的的头文件,导致程序十分不稳定,修改后总是无法通过编译,后来通过不断调试才发现这个bug并修复。

由于开发环境为windows 8专业版 + Microsoft Visual C++ 6.0,在编译过程中出现很多由于软件本身不兼容出现的问题;例如无法加载资源文件,已经定义的语句编译出错,只好通过每次改动调试成功就备份一次文件方式规避,下次改动出错后重新从之前保存的文件修改。

3.使用说明
游戏主界面,还未点击“开始游戏”之前,“要牌”与“开牌”按钮为灰色(禁用)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整的源码和详细的文档,上传到了 WRITE-BUG技术共享平台 上,需要的请自取:

https://www.write-bug.com/article/3170.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343