C++课程设计—猜拳游戏

C++课程设计—猜拳游戏

简介

给别人写的大二自动化《软件技术基础》课设,要求实现一个猜拳游戏的账号的注册、登录与游戏记录、排名。算是目前做过的所有课设里最最折腾的一个了,主要的麻烦在于C++中io流的使用,这一点上C++真的比C人性化多了,不用指针一个个地去扎,但是同时也逼着自己好好地学习了一把文件流的操作。

代码

#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<ctime>
#include<cstring>
void Display();//调用display显示switch()菜单
void Register();//注册
void Enter();//登录
using namespace std;
int flag;
int main()
{
	Display();//显示菜单  1注册;2登录
	cin.get();
	return 0;
}
bool cmp(float a,float b){
	return a>b;
}
void Register()//注册
{
	ofstream outFile("web1.txt");//把注册的ID、code保存到web1.txt文件当中
	if(!outFile.is_open())//如果没有成功打开文件
	{
		cout<<"很遗憾,连接不上服务器";
		cout<<"程序结束";
		cin.get();
		exit(EXIT_FAILURE);
	}
	string name;
	string code;
	cout<<"Please Enter members name请输入用户名名称: ";
	cin.get();//吃掉空字符
	getline(cin,name);
	//占位,假设输入的用户名超出长度或太短

	outFile<<name<<endl;//记录注册的资料到web1.txt文件中

	cout<<"Please Enter members code请输入密码: ";
	getline(cin,code);
	//占位,假设输入的密码超出长度或太短

	outFile<<code<<endl;//记录注册的资料到web1.txt文件中
	cout<<"注册成功!";
	outFile.close();
	Display();
}
void Enter()//登录
{
	cin.get();
	ifstream inFile;//定义ifstream对象
	inFile.open("web1.txt");//读取web1.txt文件中的注册资料
	if(!inFile.is_open())//如果文件没有成功打开
	{
		cout<<"很遗憾,连接不上服务器";
		exit(EXIT_FAILURE);
	}
	string name;
	string code;
	string temp;
    string temp0; 
	cout<<"Please Enter members name请输入用户名名称: ";
	getline(cin,name);

	while(getline(inFile,temp))//匹配用户名
	{
		if(temp==name)//如果匹配用户名成功
		{
			cout<<"Please Enter members code请输入密码: ";//请输入密码
			getline(cin,code);//code
			getline(inFile,temp);//匹配code
			if(temp==code)//如果密码正确,登录成功
			{
				
				cout<<"登录成功";
				//占位,登录成功应该转到程序主题
				 int cnt=0;
    int total=0;
    char gamer; // 玩家出拳
    int computer; // 电脑出拳
    int result; // 比赛结果
    // 为了避免玩一次游戏就退出程序,可以将代码放在循环中
    while (1){
    printf("这是一个猜拳的小游戏,请输入你要出的拳头:\n");
    printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n");
    scanf("%c%*c",&gamer);
    switch (gamer){
    case 65 | 97: // A | a
    gamer=4; break;
    case 66 | 98: // B | b
    gamer=7; break;
    case 67 | 99: // C | c
    gamer=10; break;
    case 68 | 100: // D | d
    exit(0);   
	break;
    }
    srand((unsigned)time(NULL)); // 随机数种子
    computer=rand()%3; // 产生随机数并取余,得到电脑出拳
    result=(int)gamer+computer; // gamer 为 char 类型,数学运算时要强制转换类型
    printf("电脑出了");
    switch (computer)
    {
    case 0:printf("剪刀\n");break; //4 1
    case 1:printf("石头\n");break; //7 2
    case 2:printf("布\n");break; //10 3
    }
    printf("你出了");
    switch (gamer)
    {
    case 4:printf("剪刀\n");break;
    case 7:printf("石头\n");break;
    case 10:printf("布\n");break;
    }
    if (result==6||result==7||result==11){
    	cnt++;
    	total++;
    	printf("你赢了\n");
	} 
    else if (result==5||result==9||result==10){
        cnt--;
        total++;
		printf("电脑赢了!");	
	} 
    else{
    	total++;
		printf("平手");
	}
	float pro;
    pro=float(cnt/total);//计算胜率 
   ofstream of("rank.txt");
   of<<pro<<endl;
   of.close();
    }
    
 }
			}
			else
			{
				cout<<"密码错误";
				Display();//返回!
			}
		}
	}

void Display()//菜单
{
	cout<<"1)Register注册     2)Enter登录\n3)Exit退出\n4)查看排行榜\nChoice:";
	int choice;//选择菜单
	cin>>choice;

	switch(choice)
	{
case 1://注册
	Register();//call function调用函数
		break;
case 2://登录
	Enter();//call function调头函数
	break;
case 3://退出
	exit(EXIT_FAILURE);
case 4://查看排名
    float res[10];
   memset(res,0,sizeof(res));
   ifstream inf("rank.txt");
   for(int j=0;j<10;j++){
   	inf>>res[j];
   }
   sort(res,res+10,cmp);
   for(int j=0;j<10;j++){
   	cout<<res[j]<<endl;
   } 
	}
}
 
发布了15 篇原创文章 · 获赞 16 · 访问量 1013

猜你喜欢

转载自blog.csdn.net/weixin_44522586/article/details/103648587