logo资料库

掷骰子游戏.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
C++课程设计 目录 一、掷骰子游戏设计需求分析…………………………1 二、类关系图和类成员函数……………………………3 三、模块的设计分析……………………………………4 四、存在的问题与不足及总结…………………………7 五、使用说明(操作手册)……………………………8 六、程序源代码…………………………………………9 1 0
C++课程设计 一 掷骰子游戏设计需求分析 一、掷骰子游戏需求: 1、假如有 n 个学生排成一圈,编号从 1 到 n,每个 人有初始积分,不防设为 100。 2、从 1 号开始掷骰子,骰子出现后,根据点数减 去掷骰人的相应积分, 如 减去 10*(6-点数),然后根 据点数多少,就依次向后数掷骰的点数同等数量的人, 被数到的最后一个人继续掷骰子,计算积分,依此类推。 3、如果某人掷骰后,其积分小于等于 0 则出列, 余下的人继续按照此法进行游戏,直到剩下最后一个 人,为胜利者。 4、要求打印每次出列的人的编号,掷骰子的次数, 当前积分。并打印最后胜利者的相应信息。 5、要求用环链表以及类来实现这个程序。 6、选做:问掷骰 m 次后,还剩下几个人积分多少, 显示出来。 二、游戏实现方式: 1
C++课程设计 为了实现游戏的上述功能,在整个程序的设计中构 造了一个游戏类(class player)。下面是游戏类(class player)的成员函数实现的功能: 1、成员函数 Player(char *pName,int id )用于储存参 赛者的姓名和他们的编号; 2、成员函数 Player::Integral(int number)用于计算参 赛者的当前积分和掷骰子的次数。 3、成员函数 Player::Initial( )用于创建参赛者的链 表。 4、成员函数 Player::Game( )用于判断是否要有参赛 者出列并记录当前参赛者的信息和掷骰子的次数、点数。 5、成员函数 Display( )用于打印本次游戏打印每次 出列的人的编号,掷骰子的次数和最后胜利者的相应信 息。 2
C++课程设计 二 类关系图和类主要成员函数和成员变量 Player 类 code; count score name[20] numOfPlayer Player * head; Player * next; Player () Integral () Initial () Game () ~Player () Display () code count score //每位参赛者的编号 //每位参赛者掷骰子的次数 //参赛者的积分 name[20] //参赛者的姓名 numOfPlayer //参加游戏总人数 3
C++课程设计 三 模块的设计分析 1.游戏类(class Player)的说明 1).构造函数 Player(char *pName,int id)用于储存参赛者 的姓名和他们的编号; Player::Player(char *pName,int id) { code=id; score=100; count=0; strcpy(name,pName); } 先是从程序中输入参 赛者人数,通过 DOS 屏幕的提示依次输入 参赛者的姓名,系统 会 自 动 给 参 赛 者 编 号,而这些信息由构 造函数 Player 储存。 2). Player::Integral(int number) 用于计算参赛者的当前 积分和掷骰子的次数。 int Player::Integral(int number) { } count=count+1; score-=(6-number)*10; if(score<=0) return 0; else return 1; 3).析构函数 Player::~Player() 。 因为分配了堆内存,所以当程序 结束时要把空间给释放。 通过构造函数 Integral () 来计算参赛者的当前积分和 掷骰子的次数。另外该函数 被后面的 Game()函数调 用,用于判断是否有参赛者 出列。 Player::~Player() { Player *t; Player *p=head; for(int i=1;i<=numOfPlayer;i++) t=p; { if(i!=numOfPlayer) {p=p->next; } delete t; } } 4
C++课程设计 4). Player::Initial()用于创建参赛者的链表。 Player * ps;//创建的结点指针 Player * pend;//链尾指针,用于在其后面插入结点 ps=new Player(pName,id);//新建一个结点,准备插入链表 Player::Initial() { int id; int m; Player * ps; Player * pend; while(1) { head=ps; else pend->next=ps; } break; } pend->next=head; } cout<<"下面请输入参赛者人数:"; cin>>m; numOfPlayer=m; for(id=1;id<=m;id++) { cout<<"请输入"<>pName; ps=new Player(pName,id); if(head==NULL) pend=ps; cout<
C++课程设计 6).Player::Game( )用于判断是否要有参赛者出列并记录当 前参赛者的信息和掷骰子的次数、点数。 在函数中求掷骰子的点数时用到了随机函数的模块,下面的 文本框为骰子点数功能的实现。 srand( (unsigned)time( NULL ) ); do { } numOfdice;//骰子数 int int q; static int k=0; k++; q=rand(); numOfdice=q%6+1;//得到一个 1-6 的数 而函数中对链表的删除借鉴了书上的 Josephus 程序设计,另外删 除链表条件的判断调用了上面的 Player::Integral 函数。 6
C++课程设计 四 存在的问题与不足及总结 存在的问题与不足: 1、进行游戏时,系统总是显示出“内存不能读”的 对话框; 2、选做的“问掷骰 m 次后,还剩下几个人积分多 少,显示出来”没有成功,我当时做的时候出现了重新 骰子数的情况,而不是打印出刚刚出现的掷骰 m 次后积 分。 总结: 在本程序是我只创建了一个游戏类。 各个功能的实现是通过调用类中的静态函数得已实 现的。因为静态函数不仅可以不创建类对象也可以直接 使用,并且可以访问类中的保护数据成员,所以基本的 功能实现都是以类的静态函数来编写的。 程序都是用链表的方式做的,因为链表比起数组可 以节省不必要的内存空间分配,可以仅当需要是再分配 新的空间。数组的空间分配是有限制的,而链表可以达 到无限制的空间分配。 7
分享到:
收藏