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