1、一副没有J、Q、K、A、大小王的扑克牌(40张牌),编号为1-40张牌。第一回合,从40张牌中给双方各随机抽取5张牌,抽出的牌在原数组里删除。第二回合,从剩下30张牌中给双方各随机抽取5张牌,抽出的牌在原数组里删除。第三回合,从剩下20张牌中给双方各随机抽取5张牌,抽出的牌在原数组里删除。第四回合,从剩下10张牌中给双方各随机抽取5张牌,抽出的牌在原数组里删除。四回合游戏结束后输出“请重新进行游戏”并结束程序。每回合结束记录用户获胜情况、计算机获胜情况和总的回合数。
2、存储结构可用顺序二叉树也可用二叉链表。
3、带有软件系统界面主函数main,功能完整(如:用户选择1开始游戏并随机抽取扑克牌;用户选择0退出执行程序;用户选择1后有两个选择,1为开始出本回合牌,2为不出牌;用户输入其他信息则输出错误信息并要求用户重新选择操作)。
4、主要代码及每个循环后请附上注释。
1、两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机。
2、每轮每人各发5张牌,各自以这5张牌建立二叉排序树。
3、A最小,2次小,9次大,10最大。
4、不用区分相同数字的花色,有可能一方抽到A,另一方也抽到A,这时候后出方手里的A就再也出不了;有可能一方抽到10,另一方也抽到10,这时候先出方获胜。
5、由用户先出,轮流出牌,每次只能出一张并且要比别人出的大(可出现第一手出10压制对手再出A)。
6、手中的牌没有别人的大则选择不出,最先出完的人获胜。
在这里先谢过啦!
参考下这个:https://download.csdn.net/download/eler2008/666667
这种学生作业题都大同小异。
看看是否合适吧,但没有用二叉树,这个用起来有点麻烦
#include
#include
#include
#include
#include
using namespace std;
const int MAX_SIZE = 40;
const int PER_NUMBER = 5;
vector vec;
vector vec_use;
vector vec_com;
int use_count = 0;
int com_count = 0;
int use_out_card = 0;
int com_out_card = 0;
bool flag = true;
void GameInit();
void GameStart();
int SelectCard();
int Random();
void Output();
int ComputorCard();
void test();
int main()
{
com_out_card = 0;
GameInit();
while((use_count + com_count)< 4)
{
flag = true;
GameStart();
while(1)
{
Output();
SelectCard();//玩家选牌
if (!flag) //是否赢了
{
vec_use.clear();
vec_com.clear();
break;
}
ComputorCard();//电脑选牌
if (!flag)
{
vec_use.clear();
vec_com.clear();
break;
}
}
}
printf("win times computor:%d user:%d",com_count,use_count);
return 0;
}
void GameInit()
{
for(int i = 0; i < MAX_SIZE; i++)//初始化牌
{
vec.push_back(i);
}
}
void GameStart()
{
int index = 0;
for(int i = 0; i < PER_NUMBER; i++)//给玩家发牌
{
index = Random();
vec_use.push_back(vec[index] % 10 + 1);
vec.erase(vec.begin() + index);
}
for(int i = 0; i < PER_NUMBER; i++)//给电脑发牌
{
index = Random();
vec_com.push_back(vec[index] % 10 + 1);
vec.erase(vec.begin() + index);
}
}
int SelectCard()
{
int op;
while(1)
{
printf("请选择出牌或者跳过:\n");
printf("***tip:'1' 出牌 '2' 跳过 ***\n");
cin>>op;
cin.clear();
cin.ignore();
if(op == 1)
{
break;
}
else if(op == 2)
{
use_out_card = 0;
return 0;
}
else
printf("选择错误,请重新选择\n");
}
while(1)
{
printf("请选择出牌:\n");
cin>>op;
cin.clear();
cin.ignore();
if(op == 0)
{
use_out_card = 0;
return 0;
}
for(int i = 0; i < vec_use.size(); i++)//选牌是否正确
{
if(op == vec_use[i])
{
if(op <= com_out_card)
{
printf("选择错误,请重新选择! '0':跳过\n");
break;
}
else
{
use_out_card = op;
vec_use.erase(vec_use.begin() + i);
if(vec_use.size() == 0)
{
system("cls");
printf("you win\n");
com_out_card = 0;
use_out_card = 0;
use_count++;
flag = false;
}
return op;
}
}
else if(i == vec_use.size() - 1)
{
printf("选择错误,请重新选择\n");
}
}
}
}
int ComputorCard()
{
sort(vec_com.begin(),vec_com.end());
for(int i = 0; i < vec_com.size(); i++)//电脑选牌
{
if(vec_com[i] > use_out_card)
{
com_out_card = vec_com[i];
vec_com.erase(vec_com.begin() + i);
if(vec_com.size() == 0)
{
system("cls");
printf("you failed\n");
com_out_card = 0;
use_out_card = 0;
com_count++;
flag = false;
break;
}
break;
}
else
{
com_out_card = 0;
}
}
}
int Random()
{
int num = vec.size();
srand((unsigned)time(NULL));
return rand() % num;
}
void Output()
{
printf("*********************************\n");
printf("*********************************\n");
printf("***");
for(int i = 0; i < vec_com.size(); i++)
{
printf("%d ",vec_com[i]);
}
printf("***\n");
printf("**computor: %d ****\n",com_out_card);
printf("*********************************\n");
printf("*********************************\n");
printf("******card number ********\n");
printf("***");
for(int i = 0; i < vec_use.size(); i++)
{
printf("%d ",vec_use[i]);
}
printf("***\n");
printf("*********************************\n");
printf("*********************************\n");
}