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