⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 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 + -