(002)(任务书 - 自动发牌)(学号)(姓名 )

更新时间:2023-05-21 22:13:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

自动发牌课程设计

本程序就是帮同学们过关而已,没有完成全部功能,因为我木有那么多时间,害人也不能还到底啊。不过通过本代码的指导,我相信你一定能写出属于自己的代码!祝你一切顺利……

我是我们学校的,舍友弄了学弟学妹的题目回来,我花了点时间写,平时不用C,但通过这个程序,我又想起当初学C

的痛苦经历,但C很能体现编程的本质。 我觉得能用C写大项目的,他就是我的上帝……

把代码复制,粘贴到VC,即可运行了。

字很小很小,故意的…………

中南民族大学计算机科学学院本科课程设计

任 务 书

指导教师: XXXXXXXX 下达时间: 2013-3-20 学生姓名: XXXXX 学 号:111111111 专 业: 计算机科学与技术

一、 课程设计的基本要求

根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用(时间函数、绘图函数以及文件的读写操作函数等);复杂任务功能分解

自动发牌课程设计

方法(自顶向下逐步求精、模块化设计、信息隐藏等)。

学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。

具体要求如下:

1、 采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。

2、 系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。

3、 程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。

4、 编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等);

5、 写出规范的课程设计报告,具体要求见相关说明文档。

二、 课程设计的主要内容

一副扑克有52张牌,打升级时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。 问题分析与算法设计

按照打升级的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,…然后从52 张牌中随机的为每个人抽牌(也可以采取其它的编号方式)。

这里可以采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。 运行示例: S K J 8 H A J 5 3 D Q 8 C K J 7 5

S A T 6 4 2 H 4 2 D 7 6 4 C Q T 9

S 9 7 5 3 H K Q T 9 D J 3 2 C 8 2

S Q H 8 7 6 D A K T 9 5 C A 6 4 3

思考题(必须完成):完成2副牌的自动发牌,每人应当有26张牌,而且需将每家所得的牌

自动发牌课程设计

进行排序。

要求:有清晰的菜单供选择,运行的结果需显示在屏幕上,并存入文件中。

三、 课程设计的进程安排

1.2013年3月20日(第4周):布置并下达课程设计题目。

2.2013年4月12日(第7周)之前:联系指导教师,理解课程设计题目及相关要求,查阅相关资料,进行课程设计。

3.2013年3月20日至4月18日(第4~8周):课程设计源程序的调试、修改与检查,书写设计报告。

地点:学院实验机房9-202、203、204、205、206。

4.2013年4月19日之前(第8周):上交、检查设计报告。

地点:计算机科学学院实验机房。

指导教师: XXXXXXXX

2013年 3 月 20 日

#include<iostream> #include<string> #include<sstream> #include<ctime> #include<vector> using namespace std;

void parseIntoPockerCards(int *numCars, string

pockerCars[])

{

for(int i=0;i<13;i++) {

stringstream str; string a;

switch((numCars[i]-1)/13)

{case 0:;

str<<numCars[i];str>>a;switch(numCars[i]){case 1:

pockerCars[i]="黑桃"+ string("A");break;

case 2:case 3:case 4:case 5:case

6:case 7:case 8:case 9:case 10:

pockerCars[i]="黑桃"+ a;break;

case 11:

自动发牌课程设计

pockerCars[i]="黑桃"+ string("J");break;

pockerCars[i]="黑桃"+ string("Q");break;

pockerCars[i]="黑桃"+ string("K");break;

pockerCars[i]="红桃"+ string("A");break;

6:case 7:case 8:case 9:case 10:

pockerCars[i]="红桃"+ a;break;

pockerCars[i]="红桃"+ string("J");break;

pockerCars[i]="红桃"+ string("Q");break;

pockerCars[i]="红桃"+ string("K");break;

pockerCars[i]="梅花"+ string("A");break;

case 12:

case 13:

}break;

case 1:

str<<numCars[i]-13str>>a;switch(numCars[i]-13){case 1:

case 2:case 3:case 4:case 5:case

case 11:

case 12:

case 13:

}break;

case 2:

str<<numCars[i]-26str>>a;switch(numCars[i]-26){case 1:

case 2:case 3:case 4:case 5:case

自动发牌课程设计

6:case 7:case 8:case 9:case 10:

pockerCars[i]="梅花"+ a;break;

pockerCars[i]="梅花"+ string("J");break;

pockerCars[i]="梅花"+ string("Q");break;

pockerCars[i]="梅花"+ string("K");break;

pockerCars[i]="方片"+ string("A");break;

6:case 7:case 8:case 9:case 10:

pockerCars[i]="方片"+ a;break;

pockerCars[i]="方片"+ string("J");break;

pockerCars[i]="方片"+ string("Q");break;

pockerCars[i]="方片"+ string("K");break;

}}}case 11:

case 12:

case 13:

}break;

case 3:

str<<numCars[i]-39str>>a;switch(numCars[i]-39){case 1:

case 2:case 3:case 4:case 5:case

case 11:

case 12:

case 13:

}break;

default:

break;

自动发牌课程设计

voiddisplayCards(int *p1,int *p2,int *p3,int *p4){string player1[13];string player2[13];string player3[13];string player4[13];parseIntoPockerCards(p1,player1);//将每位玩家手里的牌输出为扑克牌样式parseIntoPockerCards(p2,player2);

parseIntoPockerCards(p3,player3);

parseIntoPockerCards(p4,player4);

cout<<"player1的牌为:"<<endl;

for(int i=0;i<13;i++)cout<<player1[i]<<",";

cout<<endl;cout<<"player2的牌为:"<<endl;

for(int j=0;j<13;j++)cout<<player2[j]<<",";

cout<<endl;cout<<"player3的牌为:"<<endl;

for(int k=0;k<13;k++)cout<<player3[k]<<",";

cout<<endl;cout<<"player4的牌为:"<<endl;

for(int q=0;q<13;q++)cout<<player4[q]<<",";

cout<<endl;}voidgetRandomCards(int p1[],int p2[],int p3[],int p4[]){int totalCards[52]={1,2,34,56,78,9101112,13,14,15,1617,18,19,20,21222324,25,2627,28,293031,32,33,34,353637,38,39,40,414243,44,45,46,474849,50,51,52}; //该数组存放了所有的牌vector<int> dc;

int countOfDispachCards=1;//记录发牌次数int currentIndex_p1=0;//记录玩家1的发牌次数int currentIndex_p2=0;//记录玩家2的发牌次数int currentIndex_p3=0;//记录玩家3的发牌次数int currentIndex_p4=0;//记录玩家4的发牌次数//获取伪随机数srand((unsigned)time(0));

int ran_num;ran_num=rand() % 52dc.push_back(ran_num);for(int i=0;i<52;i++,countOfDispachCards++){//这个for循环要来确保每次产生的随机数都是不同的,因为每个玩家的牌都是不一样的ran_num=rand() % 52for(int j=0;j<dc.size();j++){if(ran_num==dc[j])

{ran_num=rand() % 52j=0}

自动发牌课程设计

if(j==dc.size()-1){dc.push_back(ran_num);break;

}}switch(countOfDispachCards%4)//用发牌的次数对4取余,便能按顺序给每位玩家发牌{case 1:

p1[currentIndex_p1]=totalCards[ran_num];

currentIndex_p1++;break;

case 2:

p2[currentIndex_p2]=totalCards[ran_num];

currentIndex_p2++;break;

case 3:

p3[currentIndex_p3]=totalCards[ran_num];

currentIndex_p3++;break;

case 0:

p4[currentIndex_p4]=totalCards[ran_num];

currentIndex_p4++;break;

default:

cout<<"ERROR";break;

}}}int main()

{int player1[13];int player2[13];int player3[13];int player4[13];

getRandomCards(player1,player2,player3,player4);//给每位玩家发牌 displayCards(player1,player2,player3,player4);//牌 return 0; 打印每位玩家的}

本文来源:https://www.bwwdw.com/article/8um4.html

Top