张志勇课程设计说明书文档格式.docx
《张志勇课程设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《张志勇课程设计说明书文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
第一天:
熟悉课程设计题目及具体要求,确定选择的语言开发环境,查阅资料、学习、讨论。
第二天:
根据课题给出的基本需求,进行认真分析和讨论,按照软件工程的思想,完成软件的面向对象分析工作。
第三天到第四天:
在面向对象分析的基础上,对软件进行面向对象的设计工作,完成相关设计工作。
第五天到第六天:
进行面向对象实现工作,确定需要的用户界面以及结构,完成软件的整体框架,在开发环境下,编程实现所开发的系统。
第七到第八天:
调试、测试工作,相关的后期工作。
第九和第十天:
撰写课程设计报告
五、主要参考文献
[1]钱能.C++程序设计教程(第2版)[M].北京:
清华大学出版社.2005
审核意见
系(教研室)主任(签字)
指导教师下达时间2016年1月4日
指导教师签字:
____________________
目录
引言4
第一章系统开发环境的简介和特点5
1.1开发环境的简介5
1.2开发环境的特点5
第二章系统分析6
2.1系统定位6
2.1.1系统介绍6
2.1.2系统面向的用户群体6
2.2系统需求6
2.2.1系统的功能性需求6
2.2.2系统的非功能性需求7
2.3技术可能性分析7
第三章总体结构设计7
3.1“21”点纸牌游戏简介7
3.2“21”点纸牌游戏总体功能流程图8
第四章程序设计思路及测试结果8
4.1设计步骤和关键代码8
(一)先定义全局变量:
8
(二)创建一个poker类,构造函数poker;
9
(三)新一局开始时需要洗牌,实现洗牌这个函数initPoker();
12
(四)给玩家发牌函数和给庄家发牌函数的实现getPokerF();
getPokerL();
(五)玩家总点数的函数和庄家总点数函数的实现getSumF();
getSumL();
13
(六)main函数;
14
4.2测试15
引言
本次课程设计利用计算机高级语言C++进行简单编程,实现简易的C++程序计算器的编程和运行。
通过MicrosoftVisualC++6.0软件可以进行C++程序编译,通过模块之间关系的确定及各模块功能,最后设计一个简单的操作界面实现游戏。
本系统通过C++高级语言进行编程,并设计了简单明了的操作界面。
简单的界面能给用户更好的操作体验,更直接而充分的掌握本程序的一些应用和功能。
通过直观的方式,最终实现C++设计的应用程序——“21点”纸牌游戏。
本次课设所做程序虽然只是一个简单的C++计算器程序,但是基本的应用功能都已具备,可以更好的用在实际应用中。
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,“CPP”。
它是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
本学期我们开设了“C++语言程序设计”这门课程。
随着老师的讲解及对这门语言的深入认识和学习,我们已经对这门计算机语言有了一定的理解。
而C++作为一种较为普遍的计算机语言,已经被大多数程序员所采用。
随着这么语言的普及应用,生活中各种软件都会用到这种语言。
如生活中的一些应用软件、管理软件等。
例如:
万年历程序,“21点”纸牌游戏程序„„本次课程设计,我做的是一个简单的计算器程序集,他是利用C++的文件处方式实现一个“21点”纸牌游戏的程序。
在现代社会中,随着社会的快速发展,人们对休闲娱乐越来越重视,又由于电脑的快速发展,“21点”纸牌游戏逐渐成为人们的娱乐的一种方式,编写程序实现游戏,该程序是模拟古老21点扑克牌游戏,实现1对1的人机大战。
要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;
在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。
第一章系统开发环境的简介和特点
1.1开发环境的简介
MicrosoftVisualC++6.0,简称VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
1.2开发环境的特点
由于C++是由C语言发展起来的,也支持C语言的编译。
6.0版本是使用最多的版本,很经典。
最大的缺点是对于模版的支持比较差。
现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态和有些功能不可用的情况。
同时,6.0版本对windows7和windows8的兼容性较差
第二章系统分析
2.1系统定位
2.1.1系统介绍
本系统定位简单的“21点”纸牌游戏小应用程序,暂时只考虑单机环境下的实现;
操作系统选择目前常用的Windows
7。
系统界面力求简洁、易用,在标准化的基础上考虑界面的美观和新颖
2.1.2系统面向的用户群体
系统面向所有人群,凡是懂得计算机基本操作的人都可以对本程序进行应用。
简单明了的操作界面能够让用户迅速的适应并掌握。
2.2系统需求
2.2.1系统的功能性需求
(1)系统启动后,出现欢迎界面,满足人机交互的命令行设计。
(2)能实现基本信息的输入与游戏开始分开。
(3)能实现开始后显示每一个玩家的牌点大小,当然庄家的首张牌是隐藏的。
(4)能实现决定是否要继续发牌。
。
通过(1,2)?
问题选项的提问与回答,来完成是否继续发牌的游戏要求
(5)能实现自主完成庄家的发牌与显示最终大小工作。
通过所有玩家都已决定是否要发牌后,最终可以完成对庄家的是否发牌和显示最终牌点大小。
(6)能实现系统自动比较大小,并通过界面最终显示到屏幕上
(7)能实现在游戏结束后提示游戏结束界面。
2.2.2系统的非功能性需求
(1)用户界面需求:
简洁、易用、易懂,美观、大方、标准,具备一定的兼容性。
(2)系统开发平台:
Windows
7Microsoft
Visual
C++
6.0
(3)软件质量需求:
易用、健壮、兼容性好、运行稳定、有一定安全保障
2.3技术可能性分析
本系统设计的核心部分就是通过C++语言的文件处理模块,通过相应代码、类实现游戏,该程序是模拟古老的21点扑克牌游戏,实现1对1的人机大战。
可以得出结论:
该系统的实现在技术上是可行的。
第三章总体结构设计
3.1“21”点纸牌游戏简介
21点一般用到1-8副牌。
庄家给每个玩家发两张牌,牌面朝上;
给自己发两张牌,一张牌面朝上,一张牌面朝下。
K、Q、J和10牌都算作10点。
其余所有2至9牌均按其原面值计算。
如果玩家拿到的前两张牌是一张A和一张10点牌,就拥有天生21点(Blackjack);
此时,如果庄家没有黑杰克,玩家就能赢得1.5倍的赌金(2赔3)。
没有黑杰克的玩家可以继续拿牌,以使总点数尽可能接近但不超过21点;
如果超过21点,玩家就会“爆(Bust)”并输掉赌金。
如果庄家的总点数等于或少于16点,则必须拿牌(Hit);
如果庄家的总点数等于或多于17点,则必须停牌(Stand)。
3.2“21”点纸牌游戏总体功能流程图
游戏界面——》输入赌注——》选择要牌——》开始游戏——》退出
第四章程序设计思路及测试结果
4.1设计步骤和关键代码
第一步:
首先创建项目名称(game2);
第二步:
往项目中添加需要的源文件,和头文件;
#include<
iostream>
string>
time.h>
usingnamespacestd;
#defineNUM1000
intj=2;
//定义为全局变量
intrandNum[NUM];
//因为rand()函数有一定的缺陷,所以在程序中定义了randNum数组来存放随机数
//即使使用了种子函数srand(),由于程序运行时间比较短,也不太好设置种子。
因此使用数组来存放随机数
classPoker
{private:
intpoker[53];
//扑克
intpokerValue[53];
//扑克代表的数值
stringpokerName[53];
//扑克名
intmoney;
//玩家钱数
intbet;
//玩家的赌注
intpokerF[5];
//玩家手中的牌F:
FarmerL:
Landlord
intpokerL[5];
//庄家手中的牌F:
intpokerNumF;
//玩家手中的牌数
intpokerNumL;
//庄家手中的牌数
public:
Poker();
//构造函数,对牌初始化
voidinitPoker();
//洗牌,在每轮游戏开始前进行
stringgetPokerF();
//用字符串的形式返回玩家的牌
stringgetPokerL();
//用字符串的形式返回庄家的牌
intgetSumF();
//返回玩家牌的点数,用以判断是否超过21点
intgetSumL();
//返回庄家牌的点数
voidfarmerAsk();
//玩家要牌
voidlandlordAsk();
//庄家要牌
voidinputBet();
//玩家输入赌注
voidnewGame();
//开始新游戏
voidlandlordProcess();
//在玩家不要牌时进行处理
};
Poker:
:
Poker()
{poker[0]=0;
for(inti=1;
i<
=13;
i++)//|
{poker[i]=i;
//|用构造函数对牌初始化
poker[i+13]=i;
//|
poker[i+26]=i;
poker[i+39]=i;
}//for结束
pokerValue[0]=0;
for(i=1;
=52;
i++)
{if(poker[i]<
=10)pokerValue[i]=poker[i];
elsepokerValue[i]=10;
}pokerName[0]="
"
;
for(i=0;
4;
{pokerName[1+13*i]="
A"
pokerName[2+13*i]="
2"
pokerName[3+13*i]="
3"
pokerName[4+13*i]="
4"
pokerName[5+13*i]="
5"
pokerName[6+13*i]="
6"
pokerName[7+13*i]="
7"
pokerName[8+13*i]="
8"
pokerName[9+13*i]="
9"
pokerName[10+13*i]="
10"
pokerName[11+13*i]="
J"
pokerName[12+13*i]="
Q"
pokerName[13+13*i]="
K"
}money=200;
//玩家开始玩游戏时钱数是200
bet=0;
5;
{pokerF[i]=0;
//|对pokerOfFarmer初始化
pokerL[i]=0;
//|对pokerOfLandlord初始化
}pokerNumF=0;
//玩家手中的牌数初始化为0
pokerNumL=0;
//庄家手中的牌数初始化为0
srand((int)time(0));
NUM;
{randNum[i]=rand()*51/32767+1;
//产生随机数数组
}
}//构造函数Poker()结束
voidPoker:
initPoker()
{cout<
<
新一局游戏开始,开始洗牌>
>
endl;
pokerF[0]=randNum[j++];
//产生1-52的随机数
pokerF[1]=randNum[j++];
pokerL[0]=randNum[j++];
pokerL[1]=randNum[j++];
pokerNumF=2;
pokerNumL=2;
cout<
洗牌完成,你的牌为:
getPokerF()<
}//voidPoker:
initPoker()结束
stringPoker:
getPokerF()//用字符串的形式返回玩家的牌
{
inti;
stringresult="
for(i=0;
pokerNumF;
result=result+pokerName[pokerF[i]]+"
"
returnresult;
}//stringPoker:
getPokerF()结束
getPokerL()//用字符串的形式返回庄家的牌
pokerNumL;
result=result+pokerName[pokerL[i]]+"
returnresult;
getPokerL()结束
intPoker:
getSumF()//返回玩家的总点数
intresult=0;
for(inti=0;
result=result+pokerValue[pokerF[i]];
}
getSumL()//返回庄家的总点数
result=result+pokerValue[pokerL[i]];
intmain()
intchoose=1;
Pokerpoker;
cout<
******************欢迎玩二十一点游戏******************"
endl<
poker.inputBet();
poker.initPoker();
//洗牌
while(choose==1||choose==2||choose==3||choose==4)
{
1.要牌2.不要牌3.重新开始4.退出>
请输入数字选择操作:
cin>
choose;
if(choose==1)poker.farmerAsk();
elseif(choose==2)poker.landlordProcess();
elseif(choose==3)poker.newGame();
elseif(choose==4)exit(0);
return0;
}//main函数结束
4.2测试
开始洗牌,输入赌注;
当小于21点大于15点时应选择继续要牌;
当你超过21点时系统会提示你撑死了,也就是说你输了