📄 tritou.txt
字号:
//********************************************************************
//赛赛赛游戏程序
//本程序模拟儿童的石头、剪子、布游戏
//********************************************************************
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
char *PlayType[]={"石头","剪子","布"};
struct player{ //玩家结构
char name[20];
int point;
};
player pA;
int play[10][2];
bool newplayer,newplay;
void Begin();
int listmenu(); //显示主菜单
void playmain(); //游戏控制
void NewPlay(); //新一局游戏
void endProcess(); //游戏结束处理
void listwins(); //列出本局出手情况
void stat_sort(); //统计各种出手次数并排序
void listplayers(); //列出各玩家成绩
int main()
{Begin(); //输入玩家名字
int winsNum=0; //玩家一局胜数
int gameNumber=0;//游戏次数
ifstream fileA; //游戏玩家成绩文件
fileA.open("filea.txt");//打开玩家成绩文件
if(!fileA)
{cout<<"* * 不能打开玩家成绩文件(读 filea.dat) * * \n";
return 1;
}
player pB;
pA.point=-1;
int tmp;
newplayer=true;
while(!fileA.eof())
{fileA>>pB.name;fileA>>tmp;
if(strcmp(pA.name,pB.name)==0)// 老玩家
{pA.point=tmp;
newplayer=false;
break;
}
}
if(newplayer)//新玩家
{pA.point=0;}
fileA.close();
newplay=false;
playmain();
return 0;
}
//********************************************************************
void Begin()
{cout<<"\n\n\n\n\t欢迎与我赛赛赛!"
<<"\n\n\t输入你的姓名:";
cin>>pA.name;
}
//********************************************************************
int listmenu()//显示主菜单
{int s;
do{system("cls");
cout<<"\n\n\t 赛赛赛游戏菜单\n"
<<"\t********************************************************\n"
<<"\t 1.开始新局\n"
<<"\t 2.统计列表\n"
<<"\t 3.成绩清零\n"
<<"\t 4.退 出\n"
<<"\t*********************************************************\n"
<<"\t 请选择:";
cin>>s;
}while(s<1||s>4);
return s;
}
//*******************************************************************
void playmain() //游戏处理
{int sel;char se;
while(1)
{sel=listmenu(); //显示主菜单并选择
switch(sel)
{case 1:NewPlay();break;
case 2:
cerr<<"\n\n\n\t*************************************************\n"
<<"\t* 1.列出本局出手情况 *\n"
<<"\t* 2.统计各种出手次数并排序 *\n"
<<"\t* 3.列出各玩家成绩 *\n"
<<"\t******************************************************\n"
<<"\t 请选择:";
se=getche();
switch(se)
{case '1':listwins();break;
case '2':stat_sort();break;
case '3':listplayers();break;
}
break;
case 3:pA.point=0;break;
case 4:endProcess();return;
}
}
}
//********************************************************************
void NewPlay()
{int i,wins1=0,wins2=0;//wins1-玩家取胜次数,wins2-机方取胜次数
char ch;
srand(time(NULL));
for(i=0;i<10;i++)
play[i][0]=play[i][1]=0;
system("cls");
for(i=0;i<10;i++)
{cerr<<"\n第 "<<i<<"次出手:";
play[i][0]=1+rand()%3;
do{ch=getch();play[i][1]=ch-'0';
}while(play[i][1]<1||play[i][1]>3);
cerr<<"我出:"<<PlayType[play[i][0]-1]
<<" 你出:"<<PlayType[play[i][1]-1];
if((play[i][1]==1&&play[i][0]==2)
||(play[i][1]==2&&play[i][0]==3)
||(play[i][1]==3&&play[i][0]==1))
{wins1++;cerr<<"真棒!";}
else
if((play[i][0]==1&&play[i][1]==2)
||(play[i][0]==2&&play[i][1]==3)
||(play[i][0]==3&&play[i][1]==1))
{wins2++;cerr<<"真笨!";}
else cerr<<"平手!";
}
if(wins1>wins2)
{pA.point+=10;
cerr<<"\n祝贺你本局赢了!";
}
else
cerr<<"\n你要努力呦!";
cerr<<"\t按下任意键继续...";
getch();
newplay=true;
}
//********************************************************************
void endProcess()
{fstream fileB;//打开玩家成绩文件
if(newplayer)
{fileB.open("filea.txt",ios::out|ios::app);
if(!fileB)
{cout <<"* * 不能打开玩家成绩文件(写 filea.dat) * * \n";
return;
}
fileB<<setiosflags(ios::left)<<setw(20)<<pA.name
<<setw(10)<<pA.point<<endl;
}
else
{fileB.open("filea.txt",ios::out|ios::in);
if(!fileB)
{cout<<"**不能打开玩家成绩文件(改filea.dat)**\n";
return;
}
player pt;char tp[30];
while(!fileB.eof())
{fileB>>pt.name;fileB.getline(tp,30);
if(strcmp(pA.name,pt.name)==0)//老玩家
{fileB.seekp(-32,ios::cur);
fileB<<setiosflags(ios::left)<<setw(20)<<pA.name
<<setw(10)<<pA.point<<endl;
break;
}
}
}
fileB.close();
cout<<"\n\n\n\t欢迎再跟我玩儿! \n"
<<"\n\n\t 再见! \n";
}
//**********************************************************
void listwins()//列出本局出手情况
{if(!newplay)return;
int i;
cout<<"\n 计算机 "<<setw(10)<<pA.name<<endl;
for(i=0;i<10;i++)
cout<<setw(7)<<PlayType[play[i][0]-1]
<<setw(10)<<PlayType[play[i][1]-1]<<endl;
cerr<<"按下任意键继续...";
getch();
}
//**********************************************************
void stat_sort()//统计各种出手次数并排序
{if(!newplay)return;
int comp[3][2],playman[3][2],i,j,t;
cout<<"\n 计算机 "<<setw(14)<<pA.name<<endl;
for(i=0;i<3;i++)
{comp[i][0]=playman[i][0]=i+1;
comp[i][1]=playman[i][1]=0;
}
for(i=0;i<10;i++)//统计各种出手次数
{comp[play[i][0]-1][1]++;playman[play[i][1]-1][1]++;}
for(i=0;i<3;i++)
{for(j=i+1;j<3;j++)
{if(comp[i][1]<comp[j][1])
{t=comp[i][1];comp[i][1]=comp[j][1];comp[j][1]=t;
t=comp[i][0];comp[i][0]=comp[j][0];comp[j][0]=t;
}
if(playman[i][1]<playman[j][1])
{
t=playman[i][1];playman[i][1]=playman[j][1];playman[j][1]=t;
t=playman[i][0];playman[i][0]=playman[j][0];playman[j][0]=t;
}
}
cout<<setw(7)<<PlayType[comp[i][0]-1]<<":"<<setw(3)<<comp[i][1]
<<setw(14)<<PlayType[playman[i][0]-1]<<":"
<<setw(3)<<playman[i][1]<<endl;
}
cerr<<"按下任意键继续...";
getch();
}
//**********************************************************
void listplayers() //列出各玩家成绩
{
ifstream fileC;//游戏玩家成绩文件
fileC.open("filea.txt");//打开玩家成绩文件
if(!fileC)
{cout<<"** 不能打开玩家成绩文件(读filea.dat)**\n";
return;
}
char tp[20];
player pC;
cerr<<"\n\t玩家 成绩\n";
while(!fileC.eof())
{fileC>>pC.name;fileC>>pC.point;fileC.getline(tp,20);
cout<<setw(14)<<pC.name<<setw(8)<<pC.point<<endl;
}
fileC.close();
cerr<<"按下任意键继续...";
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -