📄 05405136
字号:
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX 13 //牌的最大点为13
float jiafen; //加分的变量
char a=3,b=4,c=5,d=6;//a红桃,b方块,c梅花,d黑桃
struct war3 //定义结构体,用来记录牌面情况
{
int p1[2]; //第一张牌的内容,p1[0]为牌的点数,p1[1]为牌的花色
int p2[2]; //第一张牌的内容,p2[0]为牌的点数,p2[1]为牌的花色
int zt; //牌的状态,对子为4,顺子为2,其余为1
int pdh; //两张牌的和
}player,computer;//同时定义了玩家和电脑
class war
{
static int loop;//出牌次数,游戏结束时给出总的出牌次数
public:
static float score;//玩家的总分
war3 initialize();//给出玩者或算机的牌点
void win();
void lost();
static int loops();//出牌次数增加
};
float war::score=26; //初始分数
int war::loop=0;//初始轮数
int war::loops()//双方出牌一次,为一轮
{
loop++;
return loop;
}
war3 war::initialize()//随机产生双方牌点
{
war3 temp1;//临时变量
srand ( time (NULL) );
for (long m=0;m<1e8;m++);
temp1.p1[0]=rand()%MAX+2;//牌点为2-14,14点为A
temp1.p1[1]=rand()%4+1;
for (long n=0;n<1e8;n++);
temp1.p2[0]=rand()%MAX+2;
temp1.p2[1]=rand()%4+1;
temp1.pdh=temp1.p1[0]+temp1.p2[0];
temp1.zt=0;
return temp1;
}
void war::win()//游戏结束时的相关信息
{
cout<<endl << "你赢了,游戏结束! 谢谢参与." << endl;
cout<<"你用了" << war::loops() << " 轮." << endl;
}
void war::lost()//游戏结束时的相关信息
{
cout<<endl << "你输了,游戏结束! 谢谢参与." << endl;
cout<<"你用了" << war::loops() << " 轮." << endl;
}
void pdpaixu(war3 &temp2)//把两张牌按点数排序,大的牌放在p1里
{
int temp3[2];
if (temp2.p1[0]<temp2.p2[0]) {
temp3[0]=temp2.p1[0];
temp3[1]=temp2.p1[1];
temp2.p1[0]=temp2.p2[0];
temp2.p1[1]=temp2.p2[1];
temp2.p2[0]=temp3[0];
temp2.p2[1]=temp3[1];
}
}
void hspaixu(war3 &temp7)
{
int temp6[2];
if (temp7.p1[1]<temp7.p2[1]) {
temp6[0]=temp7.p1[0];
temp6[1]=temp7.p1[1];
temp7.p1[0]=temp7.p2[0];
temp7.p1[1]=temp7.p2[1];
temp7.p2[0]=temp6[0];
temp7.p2[1]=temp6[1];
}
}
int p1panduan()//判断玩家和电脑的第1张牌谁大,玩家大返回1,小-1,相等0
{
if (player.p1[0]<computer.p1[0]) return -1;
else if (player.p1[0]>computer.p1[0]) return 1;
else if (player.p1[1]<computer.p1[1]) return -1;
else if (player.p1[1]>computer.p1[1]) return 1;
else return 0;
}
int p2panduan()//判断玩家和电脑的第2张牌谁大,玩家大返回1,小-1,相等0
{
if (player.p2[0]<computer.p2[0]) return -1;
else if (player.p2[0]>computer.p2[0]) return 1;
else if (player.p2[1]<computer.p2[1]) return -1;
else if (player.p2[1]>computer.p2[1]) return 1;
else return 0;
}
void show(int temp4[2])//显示牌
{
cout<<setw(4);
switch (temp4[1])
{
case 4:cout<<a;break;
case 3:cout<<b;break;
case 2:cout<<c;break;
case 1:cout<<d;break;
}
switch (temp4[0])
{
case 11:cout<<'J';break;
case 12:cout<<'Q';break;
case 13:cout<<'K';break;
case 14:cout<<'A';break;
default :cout<<temp4[0];break;
}
cout<<setw(2);
}
void ztpanduan(war3 &temp5)//判断玩家或电脑的状态zt
{
if (temp5.p1[0]==temp5.p2[0]) temp5.zt=4;
else if (temp5.p1[0]-temp5.p2[0]==1||temp5.p1[0]-temp5.p2[0]==-1) temp5.zt=2;
else temp5.zt=1;
}
void zero()//状态zt相等时,比较2张牌中最大的牌
{
if (player.zt==4&&computer.zt==4&&player.p1[0]==computer.p1[0])
{
hspaixu(player);
hspaixu(computer);//由于hspaixu()在show()之后,所以不能按花色大小显示
};
int m=p1panduan();
int n=p2panduan();
switch(m)
{
case 1:jiafen=0.5;break;
case -1:jiafen=-0.5;break;
case 0:{
switch(n)
{
case 1:jiafen=0.5;break;
case -1:jiafen=-0.5;break;
case 0:jiafen=0;break;
}
}
}
}
void bijiao()
{
int n=player.zt-computer.zt;
if (n!=0) jiafen=n;
else zero();
}
void main()
{
war play;
float shangciscore;//上次分数
int x;
char miji;//秘计
cout<<endl<<"欢迎进入对抗游戏1.0!"<<endl<<endl;
cout<<"游戏规则:"<<endl;
cout<<" 牌点相同为对子如2 2,相差一点为顺子如5 6,其余为一"<<endl;
cout<<"般的牌,按先牌点后花色的比较方法,红桃>方块>梅花>黑桃."<<endl<<endl;
cout<<"请按回车键开始"<<endl;
cin.get(miji);
if (miji=='s') play.score=52;
do
{
cout<<"计算中..."<<endl;
player=play.initialize();
computer=play.initialize();
pdpaixu(player);//按牌点排序
pdpaixu(computer);
ztpanduan(player);//判断状态
ztpanduan(computer);
cout<<"你有的牌是:";//显示牌
show(player.p1);
show(player.p2);
cout<<endl;
cout<<"电脑的牌是:";
show(computer.p1);
show(computer.p2);
cout<<endl;
bijiao();//比较大小
shangciscore=play.score;
play.score=play.score+jiafen;//计算分数
cout<<endl<<"你上次的分数是:"<<shangciscore<<endl;
cout<<"你现在的分数是:"<<play.score<<endl;
if (play.score<=0){
play.lost();
x=0;break;
}
else if (play.score>52){
play.win();
x=0;break;//分数为0或52则游戏结束
};
cout<<endl<<"继续1[退出0]"<<endl;//选择游戏是否继续进行
cin>>x;
play.loops();//轮次增加
system("cls");
}
while (x==1);
cin.get();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -