C++ 知识复习--一个简易围棋比赛系统

2024-05-09 12:48

本文主要是介绍C++ 知识复习--一个简易围棋比赛系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include <fstream>
using namespace std;
#define LongOfChar 100  // 定义了一个常量为100的宏LongOfChar/**
* The class of Player
* 2017/2/19
*/
class Player{private:int dan;      //棋手段位public :char  name[LongOfChar]; //棋手姓名int mikeScore;public:  Player(){dan=0;mikeScore=0;}void setDan(int da){dan=da;}int getDan(){return dan;}
};
/*Player降序排列*/
class CompGreater
{
public:bool operator ()(const Player& pstItem1, const Player& pstItem2){return pstItem1.mikeScore> pstItem2.mikeScore;}};  /*
* The Class Of PlayerPair
* 2017/2/23
*/class PlayerPair{public :Player* A_Player;  //对手中A的指针Player* B_Player;  //对手中B的指针Player* winer_Player; //获胜者的指针
};/**
* The class of Complete
* 2017/2/19
*/
class WeiQiComplete{public :int numberOfPlayer;     //参赛人数int roundOfCompelte;    //比赛轮数int currentCompelte;    //当前第几轮vector<Player>  mPlayerVetor;   //存放参赛选手的Vectorvector<PlayerPair>  mPlayerPairVetor; //存放配对实体的Vectorpublic :WeiQiComplete(){numberOfPlayer=0;roundOfCompelte=0;currentCompelte=0;}//Print the info of playervoid printPlayer(){   //循环打印所有参赛选手信息vector<Player>::iterator it;    cout << "The In of Player:"<< endl;for(it=mPlayerVetor.begin();it!=mPlayerVetor.end();it++){cout<<"name:"<<(*it).name<<"  dan:"<<(*it).getDan()<<"  MikeScore:"<<(*it).mikeScore<<endl;}}//input the info of completevoid inputPlayer(){ //输入比赛信息(根据当前第几轮判断是否已经开始比赛,开始则不可以输入)if(currentCompelte>0){cout<<"the complete has begin,you cannot enter again!";}else{cout << "Please input the number of player :"<<endl;cin>>numberOfPlayer;cout << "Please input the round of Compelte :"<<endl;cin>>roundOfCompelte;cout << "Please input the Info of all Player"<<endl;for(int i=0;i < numberOfPlayer; i++){Player mPlayer;int dan;cout << "Please input name of "<< i+1 <<" player :"<<endl;cin>>mPlayer.name;cout << "Please input dan of "<< i+1 <<" player :"<<endl;cin>>dan;mPlayer.setDan(dan);mPlayer.mikeScore=dan;mPlayerVetor.push_back(mPlayer);}}}//sort the Playervoid sortPlayer(){  //根据选手的麦克马洪分数对选手进行排序sort(mPlayerVetor.begin(), mPlayerVetor.end(), CompGreater());}//make Pair of Player //根据选手的麦克马洪分数从高到低依次配对void makePair(){int sizeOfArray=mPlayerVetor.size() / 2;for(int i=0;i<sizeOfArray;i++){PlayerPair mPlayerPair;mPlayerPair.A_Player=&mPlayerVetor[2*i];mPlayerPair.B_Player=&mPlayerVetor[2*i+1];mPlayerPairVetor.push_back(mPlayerPair);}if(sizeOfArray*2 < mPlayerVetor.size()){mPlayerVetor[mPlayerVetor.size()-1].mikeScore+=0.5;}}//print the pair of Playervoid printpair(){  //打印出所有的分组信息cout << "*The Result of the pair*"<< endl;for(int i=0;i<mPlayerPairVetor.size();i++){cout<< (*(mPlayerPairVetor[i].A_Player)).name<<"   :   "<<(*(mPlayerPairVetor[i].B_Player)).name<<endl;}cout << "you can enter the result "<< endl;}//print the Result of roundvoid printTheResult(){ //打印此轮的比赛结果for(int i=0;i<mPlayerPairVetor.size();i++){cout<< (*(mPlayerPairVetor[i].A_Player)).name<<"  :  "<<(*(mPlayerPairVetor[i].B_Player)).name<< "  Winer is *" <<(*(mPlayerPairVetor[i].winer_Player)).name<<"*"<<endl;}if(roundOfCompelte==currentCompelte){cout<<"The Complete End ! The Sort Of all Payer is --"<<endl;sortPlayer();printPlayer();}}//input the result of roundvoid inputResult(){  //输入此轮的比赛每组的结果for(int i=0;i<mPlayerPairVetor.size();i++){int playerid;cout<<"please input the result of "<<(*(mPlayerPairVetor[i].A_Player)).name<<" win is 1 ; "<<(*(mPlayerPairVetor[i].B_Player)).name<<" win is 2 "<<endl;cin>>playerid;if(playerid==1){mPlayerPairVetor[i].winer_Player=mPlayerPairVetor[i].A_Player;(*(mPlayerPairVetor[i].A_Player)).mikeScore+=1;}else{if(playerid==2){mPlayerPairVetor[i].winer_Player=mPlayerPairVetor[i].B_Player;(*(mPlayerPairVetor[i].B_Player)).mikeScore+=1;}  else{(*(mPlayerPairVetor[i].A_Player)).mikeScore+=0.5;(*(mPlayerPairVetor[i].B_Player)).mikeScore+=0.5;}}}}
};/**
* The class 0f Login
* 2017/2/26
*/
class Login{private :string  name;string  password;public:void login(){  //登录验证的入口cout<< "*************************************"<<endl;cout<< "           WeiQi System              "<<endl;cout<< "*************************************"<<endl;cout<< "Please input your name and password :"<<endl;input();if(login_Verification(name,password)){login_success();    }else{login_error();}}//input info of loginvoid input(){  //输入登录信息cout<< "Your name:";cin>>name;cout<< "Your password:";cin>>password;}//Verificationbool login_Verification(string  name,string  password){ //比对登录信息bool resp=false;if(name.compare("li")==0 && password.compare("123")==0){resp=true;}return resp;}//login successvoid login_success(){  //比对成功后cout<< "Login Success !"<<endl;}//login errorvoid login_error(){   //比对失败后cout<< "Your name Or Password is Error!"<<endl;login();}
};class fileUtil{public:static void outPutToFile(WeiQiComplete weiQiComplete){   //将类对象打印保存到文件中ofstream file;   file.open("WeiQiComplete.txt", ios::out | ios::binary | ios::app);   file.write((char *)&weiQiComplete,sizeof(WeiQiComplete));  file.close();  }static WeiQiComplete readFromFile(){ //从文件中将之前所保存的对象读取出来WeiQiComplete weiQiComplete;ifstream infile;   infile.open("WeiQiComplete.txt", ios::in | ios::binary);if(infile.is_open()){infile.read((char *)&weiQiComplete,sizeof(weiQiComplete));     //(char *)&weiQiComplete 指读存放读取到的数据的对象的指针infile.close();                                               //sizeof(weiQiComplete) 存放读取数据所需要的空间大小cout << "finish read file " << endl;}print(weiQiComplete);        return  weiQiComplete;    }static void print(WeiQiComplete weiQiComplete){cout <<" have read a  WeiQiComplete Info "<< ":" << &weiQiComplete << endl;}
};/**
* The class 0f Menu
* 2017/2/27
*/
class Menu{   //菜单类WeiQiComplete mWeiQiComplete;public:void menu(){int select;cout<< "******************************************"<<endl;cout<< "              WelCome You                 "<<endl;cout<< "This is Menu ,you can input the number of list"<<endl;cout<< "* 1: Enter The Number of Player And Round "<<endl;cout<< "* 2: Start a Round "<<endl;cout<< "* 3: Enter The Result Of Round"<<endl;cout<< "* 4: Print The Sort Of Player"<<endl;cout<< "* 5: Save to the file"<<endl;cout<< "* 6: read  the file"<<endl;cout<< "* 7: Back "<<endl;cout<< "******************************************"<<endl;cin>>select;switch(select){case 1:enterInfo();break;case 2:startRound();break;case 3:inputResultOfRound();break;case 4:printSort();break;case 5:SaveToFile();break;case 6:ReadFromFile();break;case 7:exit(0);break;}}void enterInfo(){ //输入比赛信息mWeiQiComplete.inputPlayer();mWeiQiComplete.printPlayer();mWeiQiComplete.sortPlayer();menu();}void startRound(){  //开始新的一轮比赛if(mWeiQiComplete.numberOfPlayer <= 0 || mWeiQiComplete.roundOfCompelte<=0){cout <<"Please Enter the Info About Player and Compelte!"<<endl;menu();}else{if(mWeiQiComplete.roundOfCompelte <= mWeiQiComplete.currentCompelte){cout <<"The Compelte Has Finish!"<<endl;menu();}else{mWeiQiComplete.currentCompelte = mWeiQiComplete.currentCompelte + 1;cout <<"you will begin the  * "<<mWeiQiComplete.currentCompelte<<"  * round "<<endl;mWeiQiComplete.makePair();mWeiQiComplete.printpair();menu();                }}}void printSort(){ //输出排序后的选手信息mWeiQiComplete.printPlayer();menu();}void inputResultOfRound(){ //输入每轮比赛每组结果mWeiQiComplete.inputResult();mWeiQiComplete.printTheResult();menu();}void SaveToFile(){ //将比赛对象整体保存到文件中fileUtil::outPutToFile(mWeiQiComplete);menu();}void ReadFromFile(){ //从已存在的文件读取比赛对象数据mWeiQiComplete=fileUtil::readFromFile();menu();}
};
/**
* main method
* 2017/2/19
*/
int main(){Menu  mMenu;  Login mLogin;mLogin.login();mMenu.menu();return 0;}
其中在保存类对象时,如果对象中的域是string,a将会报错(在读取时报错)

这篇关于C++ 知识复习--一个简易围棋比赛系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973461

相关文章

有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

discuz-ucenter_api_for_java 有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。 所有的代码 1.UC.java package com.fivestars.interfaces.bbs.api;import java.io.IO

有效管理自己知识,多总结和分享——2018七月份的尾巴

知道却做不到,等于不知道! --笔记侠 知道却讲不出来,也等于不知道! --dufy 知道 ≠ 能做到 | 知道 ≠ 能讲出 ? 昨天听了一个音频,里面说:“知道很多道理 却依然过不好这一生”! 知道了这么多道理,能真正做到有多少呢?知道了这么多道理,真正用自己的理解或者自己的话能表达的道理又有多少呢? 我在反思自己,希望与你共勉! 分享:好的学习方法 — 费曼技巧 知道只是一个

Kali:系统安装之后进行所需配置

apt设置源 由于官网的源需要墙或者想使用国内的源,可以修改source.list vi /etc/source.list 打开文件并修改为其他可用的源地址,以下可供参考 deb http://ftp.sjtu.edu.cn/debian wheezy main non-free contribdeb-src http://ftp.sjtu.edu.cn/debian wheezy ma

原码,反码和补码(复习)

原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 100

C++转换

#include <iostream> #include <stdlib.h> using namespace std; int main(void){     cout << "请输入一个整数:" << endl;     int x = 0;     cin >> x;     cout <<"  八进制:"<< oct << x << endl;

第一篇 安卓系统的介绍及特点

安卓系统介绍及特点 一、    安卓系统的介绍 1、 Andriod是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。早期由原名为“Android”公司开发,谷歌在2005年收购了该公司后,继续对Android系统开发运营,它采用了软件堆层的架构,主要分为三部分,底层Linux内核只提供基本的功能,其他的应用软件则由各公司自行开发,部分程序以Java

Xcode缺少libstdc++的解决方案

Xcode 10和Xcode 11中删除的libstdc++库 先下载下来这个项目,然后打开终端cd到libstdc文件夹; 如果你使用的是 Xcode 10,则将install-Xcode_10.sh拖到终端中执行即可。Xcode 11 版则将install-Xcode_11.sh拖到终端中执行。

springboot 生成jar包与系统服务

一、打包 1、pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 1、设置jar的入口类 --><plugin><groupId>org.apache.maven.plug

Blender2.8 简易形变-bend弯曲中的问题

在blender2.8中发现一个问题,就是使用简易形变中弯曲的时候不能正常弯曲 以正方体为例, 将正方体向x轴方向伸长,分段,使用bend,绕x轴发现上下面绕x轴弯曲成平面重合(非想象中效果), 绕y轴发现上下面绕y轴弯曲成平面重合(非想象中效果), 绕z轴可以获得一个椭圆柱,x轴上的前后面绕z轴弯曲.   这时候,创建一个空物体轴,原心选取为空物体,绕z轴,可弯曲形变.   而将

互联网洗护工厂系统能带来哪方面的便捷

我们的干洗店洗衣洗鞋小程序,为您带来便捷、智能的洗衣洗鞋体验。只需轻触屏幕,即可在线预约洗衣服务,随时随地,无需等待,告别繁琐的电话预约。 用户成为会员,您将独享专属优惠与折扣,更有积分累积,礼品兑换,让洗衣成为一种享受。     与朋友一起拼团洗衣,不仅更省钱,还能增进友谊。同时,小程序还为您提供自动发票功能,方便您随时管理财务。   地址与订单管理功能,让您的信息一目了然,随时更