理工大学VC++课程设计报告课 程:VC++课程设计系 别:计算机科学与技术学院班 级:学 号:姓 名:选题1名称:对抗游戏选题1难易级别:B选题2名称:工资管理选题2难易级别:A指导教师:目 录1.1 程序功能简介一个简单的纸牌对抗游戏,根据随机产生的数字决定双方的输赢1.2 课程设计要求(1)当双方进行对抗时,游戏者可根据自身的牌点决定是否继续下注,例如拿到A,把握增大,则在计算机的牌点出来之前加大赌注,但不超过5点;(2)将双方牌点的比较扩大为两张牌点之和,若出现一组对子,则对子牌点大于任何单牌,若双方均为对子,则比较牌点之和2.1 程序具体实现原理总体方案增加变量plyrAddBet,compAddBet用来存储玩家和计算机加注的值,值并判断值的大小是否符合要求,若玩家不加注则plyrAddBet,compAddBet赋值为0,并对原成员函数Increase(),Decrease()做一定修改分别定义变量plyr1,plyr2 ,comp1,comp2用来储存玩家和计算机的两张牌点,而且定义成员函数Player1(),Player2(),Computer1(),Computer2()用来返回玩家和计算机的牌点,再定义成员函数Initialize1() ,Initialize2()随机产生玩家牌点plyr1,plyr2 和计算机的牌点comp1,comp2,再对主函数中的比较语句做出修改。
基本原理主函数中首先定义了War类的对象Play,然后分别调用Initialize1() ,Initialize2()随机产生玩家牌点plyr1,plyr2 和计算机的牌点comp1,comp2,调用函数Loops()计算出牌的次数,依次输出玩家的两张牌plyr1,plyr2,询问玩家是否继续加注,若继续加注就将值赋给plyrAddBett,若不继续加注则plyrAddBet赋值为0,然后再依次输出计算机的牌点comp1,comp2,由计算机自动判断是否加注,若加注则compAddBet赋值为3,若不加注则compAddBet赋值为0再根据要求比较玩家和计算机的牌点大小,调用Increase()或Decrease(),再调用CheckScore()返回玩家的分数,最后用if语句判断游戏是否继续进行是否开始调用函数Initialize1() ,Initialize2()调用函数CheckScore()结束定义类的对象play用if判断是否循环或结束分别输出Play.Player1(),Play.Player2()是否加大赌注输入Play.plyrAddBet分别输出Play.Computer1()Play.Computer2()调用函数Increase() ,Decrease()调用函数Loops()由计算机自动判断是否加注2.2 程序各个功能说明以及课程设计要求的实现程序结构#include #include #include #define MAX 13 //牌的最大点为13class War{ int plyr1,plyr2 ,comp1,comp2;//plyr玩者的牌点, comp计算机的牌点 static int Score;//玩者的分数,当分数为0或50时游戏结束 static int Loop;//出牌次数,游戏结束时给出总的出牌次数public: static int plyrAddBet,compAddBet;//plyrAddBet,compAddBet分别为玩家和计算机的加大赌注 int Player1(),Player2();//返回玩者的牌点 int Computer1(), Computer2();//返回计算机的牌点 void Initialize1(),Initialize2();//给出玩者和计算机的牌点 int CheckScore();//返回玩者分数 void GameOver(); War();//缺省构造函数,初始化对象 static int Increase();//分数增加 static int Decrease();//分数减少 static int Loops();//出牌次数增加};int War::Score = 26; //初始分数int War::Loop = 0;//比赛轮数int War::Increase()//增分,每轮赢一分加大的赌注{ Score=++Score+plyrAddBet+compAddBet; return Score; }int War::Decrease()//减分,每轮输一分加大的赌注{ Score=--Score-plyrAddBet+compAddBet; return Score; }int War::Loops()//双方出牌一次,为一轮{ Loop++; return Loop;}War::War()//构造函数,初始双方牌点为0{ plyr1, plyr2, comp1,comp2 = 0;}int War::Player1()//返回玩者牌点{ return plyr1;}int War::Player2()//返回玩者牌点{ return plyr2;}int War::Computer1()//返回计算机的牌点{ return comp1;}int War::Computer2()//返回计算机的牌点{ return comp2;}void War::Initialize1()//随机产生玩家牌点{ //srand ( time (NULL) ); plyr1 = rand()%MAX+2;//牌点为2-14,14点为A plyr2 = rand()%MAX+2;//牌点为2-14,14点为A}void War::Initialize2()//随机产生计算机牌点{ //srand ( time (NULL) ); comp1 = rand()%MAX+2; comp2 = rand()%MAX+2;}int War::CheckScore()//返回玩者分数{ return Score;}void War::GameOver()//游戏结束时的相关信息{ cout << endl << "游戏结束! 谢谢参与." << endl; cout << "你用了 " << War::Loops() << " 轮." << endl;}int War::plyrAddBet;int War::compAddBet;void main(){ War Play; int x; cout << endl << "准备开始!" << endl << endl; Play.Initialize1();//随机产生玩家牌点 Play.Initialize2(); Play.Loops();//轮次增加 cout << "你的牌是一张"; if(Play.Player1() == 11) cout << "J" << endl; else if(Play.Player1() == 12) cout << "Q" << endl; else if (Play.Player1() == 13) cout << "K" << endl; else if (Play.Player1() == 14) cout << "A" << endl; else cout << Play.Player1() << endl; cout << "和一张"; if(Play.Player2() == 11) cout << "J" << endl; else if(Play.Player2() == 12) cout << "Q" << endl; else if (Play.Player2() == 13) cout << "K" << endl; else if (Play.Player2() == 14) cout << "A" << endl; else cout << Play.Player2() << endl; cout<<"是否继续加注?加注请输入1到5,如不加注请输入0"<>Play.plyrAddBet; if(Play.plyrAddBet>5||Play.plyrAddBet<0){ cout<<"加注错误,重新加注"<>Play.plyrAddBet; } cout << "计算机有一张"; if(Play.Computer1() == 11) cout << "J" << endl; else if(Play.Computer1() == 12) cout << "Q" << endl; else if (Play.Computer1() == 13) cout << "K" << endl; else if (Play.Computer1() == 14) cout << "A" << endl; else cout << Play.Computer1() << endl; cout<<"和一张"; if(Play.Computer2() == 11) cout << "J" << endl; else if(Play.Computer2() == 12) cout << "Q" << endl; else if (Play.Computer2() == 13) cout << "K" << endl; else if (Play.Computer2() == 14) cout << "A" << endl; else cout << Play.Computer2() << endl; if (Play.Player1()==Play.Player2()&&Pl。