课程设计报告
VC++ 课程设计报告
班级: 学号: 姓名:
一、名称:对抗游戏
二、目的:设计一个对抗游戏,根据随机产生的数字决定双方的输赢。
三、内容:
(1)游戏在开始时系统默认赌注为 1,当双方进行对抗时,游戏者可根据自身的牌点决定是否继续下注,例如拿到
A,把握增大,则在计算机的牌点出来之前加大赌注,但不超过 5 点。
(2)将双方牌点的比较扩大为两张牌点之和,若出现一组对子,则对子牌点大于任何单牌,若双方均为对子,则比
较牌点之和。
(3)该程序只允许玩家在牌好的情况下加注,添加一些成员函数就可以让计算机根据自己的牌面来判断是否加注及
加多少点,这样的程序更加实用。
五、算法分析和流程图
1、主要算法与设计思路
vc++中,类有很好的封装性,要完成对抗游戏的以上功能,可以先构造一个类,将所需要的函数放入其中,再根
据需要,编写具体的函数源程序。该程序的过程较为烦琐,要仔细考虑每一步,避免反复,尤其应当注意让函数的功
能尽可能做的能够解决多个问题。
2、流程图
游戏过程简介:
1
课程设计报告
3 具体功能的实现
1、先定义一个类:
该程序的数据结构比较简单,由于玩家和计算机都有两张牌,且这两张牌均为随机产生,输出的格式也一样,所以可以
分装成一个类的两个对象,相对有特点的是比较函数(Computer)作为算法的主要载体,因为涉及大量牌面内容的比较,而
牌面又是私有成员,为简化程序,将该函数定义为类的友元函数,可以说这个函数是整个程序中的核心.
class War
{
//类名为 War
//玩家,电脑的两张牌
//player 的赌资
int player,comp;
static int Score;
static int nWin,nLost,nDraw;
static int Loop;
//记录玩家在游戏中赢,输,平的次数
//记录玩家一共进行游戏的局数
public:
War();
int PLAYER();
//构造函数
//返回私有成员 player 的的值
2
课程设计报告
//随机发出两张牌
//返回私有成员 comp 的的值
int COMP();
void SetCard();
void Show(int a);//显示牌点
void Judge(int&);//计算机可根据自己的牌面判断是否加注
static int Scores(int);
void friend Compare1(War&,War&,int&,int);//判断牌面的大小,得出结果同时通过 d 返回输或赢的分数
void ShowResult(int);//得到并显示在一局游戏中玩家得到的分数以及总计的分数
void TJ();//游戏结束后统计出最终的结果
};
2、一些重要的功能函数:
(1) void War::Judge(int&y)
{
if(player>=comp)
{
switch(comp)
{
case 10:
case 11:
case 12:
case 13:
case 14:
cout<<"电脑选择加注\n";
cout<<"加注金额:"<<2;y=2;cout<<'\n';break;
default:cout<<"电脑选择加注\n";
cout<<"加注金额:"<<1;y=1;cout<<'\n';break;
}
}
else
{cout<<"电脑也选择退出\n";y=0;}
}
// 调用该函数,电脑可根据自己的牌面来判断是否加注及加多少点
(2)void Compare(War&A,War&B,int&d,int y) // 判断牌面的大小,同时通过 d 返回输或赢的分数
{
cout<<"######统计######\n";
switch(y)
{case 0:
{
if(A.PLAYER()>A.COMP()){cout<<"恭喜你^^,玩家的牌大!\n";d=1;}
else if(A.PLAYER()==A.COMP())cout<<"双方势均力敌!\n";
else {cout<<"555,电脑的牌大!\n";d=-1;}
break;
}
default:
{
int i,j,m,n;
3
课程设计报告
i=A.PLAYER()==B.PLAYER();
j=A.COMP()==B.COMP();
m=(A.PLAYER()+B.PLAYER())>(A.COMP()+B.COMP());
n=(A.PLAYER()+B.PLAYER())<(A.COMP()+B.COMP());
if(i&&j)
{
if(A.PLAYER()>A.COMP()){cout<<"恭喜你^^,玩家的对子大!\n";d=y+1;}
else if(A.PLAYER()
0){nWin++;cout<<"此局玩家赢得"<0)cout<<"你一共在游戏中赢得"<else if(Score-26<0)cout<<"你一共在游戏中输掉"<<26-Score<<"分\n";
课程设计报告
}
//游戏结束之后,调用该函数,将会对整个游戏过程作一个过程说明.
3. 主函数的过程
(1)主函数主要是给出了发牌的烦琐过程,以下为发牌的顺序
bl:play1.SetCard();
cout<<"玩家的第一张牌是 ";
play1.Show(1);
cout<<"请问玩家是否要加注,继续[1](退出[0])\n";
cin>>x;
if(x==1)
{
cout<<"输入加注的金额,不大于 5n";
cin>>y;
cout<<"加注金额:"<
(3)在一局游戏后,要判断游戏是否要继续进行下一局,使用了 goto 语句
switch(play1.Scores())
课程设计报告
{
case 0:
case 50:cout<<"游戏结束\n";break;
default:
cout<<"继续[1](退出[0])\n";
cin>>i;
if(i==1)
{
cout<<"=====================================================\n";
cout<<"这是第"<<++j<<"局游戏\n"<<'\n';
goto bl;
}
}
cout<>这不电影中描述的牌局,里面可以有同花顺,对对碰等名堂,实用性还
不够强,不过这可以作为以后的兴趣继续发展.
设计的感想和心得体会:
设计优秀程序的革命道路即是漫长而又非常艰辛。通过这次课程设计我总结出了程序设计所需要的几点:
1.
要有齐全的工具。所谓工具除了设计程序需要的资料,最重要的就是计算机。仅靠机房断断续续的开放,
吵吵嚷嚷的氛围,思想怎么能集中呢?
作程序要冷静,保持清醒的头脑。课程设计的程序很冗长,看起来很费劲。你稍微改动一点,要是改的不
对的话,会出现几十个错误,这时你可不能心烦,你要慢慢的根据错误提示逐条改正,但是有时候你只要
改前面的几个错误,所有的错误便消失了。有一种“柳暗花明又一村”的快感!
做程序要善于把实际问题进行抽象,总结算法,用 C++语言进行描述。
2.
3.
这次课程设计的过程是坎坷的,然而却使我有很大的体会 。做事情可不能急于求成,正所谓“欲速则不达”。
就好比程序设计,你越想把程序赶快弄好,你反倒思想越混乱,出现的错误也越多,速度就越慢。做程序也是考
验人的耐性的过程,看懂一个程序是需要一段时间的,要是沉不住气,最终会半途而废,前功尽弃,浪费很多时
间。虽然这只是一次简单的课程设计,但是从中学到的一些经验,我觉得对以后的工作也会有很大的帮助。是我
受益终身。
6