您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 课程设计-掷骰子游戏设计
C++课程设计0华东交通大学基础学院C++课程设计报告题目:掷骰子游戏的分析与设计姓名:张春梅学号:20080810010101班级:08信息与计算科学(1)班学年学期:2009~2010学年第一学期日期:2009年12月21日C++课程设计1目录一掷骰子游戏设计需求分析........................................21、掷骰子游戏需求......................................................22、游戏实现方式..........................................................3二类关系图和类主要成员函数和成员变量...............4三模块的设计分析........................................................51、游戏类(classPlayer)的说明................................52、游戏类(classPlayer)的流程图............................83、程序运行结果:....................................................11四存在的问题与不足及总结......................................13五掷骰子游戏使用说明书(操作手册).................14C++课程设计2一掷骰子游戏设计需求分析1、掷骰子游戏需求:1)假如有n个学生排成一圈,编号从1到n,每个人有初始积分,不防设为100。2)从1号开始掷骰子,骰子出现后,根据点数减去掷骰人的相应积分,如减去10*(6-点数),然后根据点数多少,就依次向后数掷骰的点数同等数量的人,被数到的最后一个人继续掷骰子,计算积分,依此类推。3)如果某人掷骰后,其积分小于等于0则出列,余下的人继续按照此法进行游戏,直到剩下最后一个人,为胜利者。4)要求打印每次出列的人的编号,掷骰子的次数,当前积分。并打印最后胜利者的相应信息。5)要求用环链表以及类来实现这个程序。6)选做:问掷骰m次后,还剩下几个人积分多少,显示出来。C++课程设计32、游戏实现方式:为了实现游戏的上述功能,在整个程序的设计中构造了一个游戏类(classplayer)。下面是游戏类(classplayer)的成员函数实现的功能:1)成员函数Player(char*pName,intid)用于储存参赛者的姓名和他们的编号;2)成员函数Player::Integral(intnumber)用于计算参赛者的当前积分和掷骰子的次数。3)成员函数Player::Initial()用于创建参赛者的链表。4)成员函数Player::Game()用于判断是否要有参赛者出列并记录当前参赛者的信息和掷骰子的次数、点数。5)成员函数Display()用于打印本次游戏打印每次出列的人的编号,掷骰子的次数和最后胜利者的相应信息。C++课程设计4二类关系图和类主要成员函数和成员变量Player类code;countscorename[20]numOfPlayerPlayer*head;Player*next;Player()Integral()Display()~Player()Initial()Game()code//每位参赛者的编号count//每位参赛者掷骰子的次数score//参赛者的积分name[20]//参赛者的姓名numOfPlayer//参加游戏总人数C++课程设计5三模块的设计分析1.游戏类(classPlayer)的说明1).构造函数Player(char*pName,intid)用于储存参赛者的姓名和他们的编号;先是从程序中输入参赛者人数,通过DOS屏幕的提示依次输入参赛者的姓名,系统会自动给参赛者编号,而这些信息由构造函数Player储存。2).Player::Integral(intnumber)用于计算参赛者的当前积分和掷骰子的次数。通过构造函数Integral()来计算参赛者的当前积分和掷骰子的次数。另外该函数被后面的Game()函数调用,用于判断是否有参赛者出列。3).析构函数Player::~Player()。因为分配了堆内存,所以当程序结束时要把空间给释放。intPlayer::Integral(intnumber){count=count+1;score-=(6-number)*10;if(score=0)return0;elsereturn1;}Player::Player(char*pName,intid){code=id;score=100;count=0;strcpy(name,pName);}Player::~Player(){Player*t;Player*p=head;for(inti=1;i=numOfPlayer;i++){t=p;if(i!=numOfPlayer){p=p-next;}deletet;}}C++课程设计64).Player::Initial()用于创建参赛者的链表。Player*ps;//创建的结点指针Player*pend;//链尾指针,用于在其后面插入结点ps=newPlayer(pName,id);//新建一个结点,准备插入链表Player::Initial(){intid;intm;Player*ps;Player*pend;while(1){cout下面请输入参赛者人数:;cinm;numOfPlayer=m;for(id=1;id=m;id++){cout请输入id号参赛者的姓名:;charpName[20];cinpName;ps=newPlayer(pName,id);if(head==NULL)head=ps;elsepend-next=ps;pend=ps;coutpNameendl已成功加入endlendl;}break;}pend-next=head;}C++课程设计75).Display()用于打印本次游戏打印每次出列的人的编号,掷骰子的次数和最后胜利者的相应信息。6).Player::Game()用于判断是否要有参赛者出列并记录当前参赛者的信息和掷骰子的次数、点数。在函数中求掷骰子的点数时用到了随机函数的模块,下面的文本框为骰子点数功能的实现。而函数中对链表的删除借鉴了书上的Josephus程序设计,另外删除链表条件的判断调用了上面的Player::Integral函数。srand((unsigned)time(NULL));do{intnumOfdice;//骰子数intq;staticintk=0;k++;q=rand();numOfdice=q%6+1;//得到一个1-6的数}C++课程设计82.游戏类(classPlayer)的流程图1)Player::Initial()流程图如图1:2)析构函数Player::~Player()流程图如图2:图1图2C++课程设计93)构造函数Player::Integral(intnumber)流程图如图3:图34)Player::Display()流程图如图4:图4C++课程设计105)Player::Game()流程图如图5:6)main()流程图容易图6:图5图6C++课程设计113.程序运行结果:输入参赛者人数如图7:图7输入参赛者姓名如图8:图8C++课程设计12程序运行过程及最后结果如图9:图9C++课程设计13四存在的问题与不足及总结存在的问题与不足:1、进行游戏时,系统总是显示出“内存不能读”的对话框;2、选做的“问掷骰m次后,还剩下几个人积分多少,显示出来”没有成功,我当时做的时候出现了重新骰子数的情况,而不是打印出刚刚出现的掷骰m次后积分。总结:在本程序是我只创建了一个游戏类。各个功能的实现是通过调用类中的静态函数得已实现的。因为静态函数不仅可以不创建类对象也可以直接使用,并且可以访问类中的保护数据成员,所以基本的功能实现都是以类的静态函数来编写的。程序都是用链表的方式做的,因为链表比起数组可以节省不必要的内存空间分配,可以仅当需要是再分配新的空间。数组的空间分配是有限制的,而链表可以达到无限制的空间分配。C++课程设计14五掷骰子游戏使用说明书(操作手册)用户首先进入软件界面主菜单:1、按照屏幕的提示输入参赛人数;2、同样按照提示输入参赛者的姓名;3、按任意键游戏开始;4、屏幕上将会打印出整个游戏过程中所有参赛者的信息,包括出列者的和最后胜利者的信息;5、本次游戏结束后,如果想继续玩请输入‘Y’或‘y’,输入其他字符将退出游戏。
本文标题:课程设计-掷骰子游戏设计
链接地址:https://www.777doc.com/doc-4211227 .html