乌龟对对碰C++代码分享
#include<bits/stdc++.h>
#include <cstdlib>?
#include <ctime>
#include <Windows.h>
using namespace std;
struct Node{
int lucky,pair,triple,full,empty;
}s,e;
string c,q[10][10];
int k=10,n,t,a[100000],r,f[100],sum,ct[100],ans;
void Random(int *a)
{
srand(time(0));
for(int i=0;i<100000;i++)
a[i]=rand()%k;
}
void tp()
{
for(int i=1;i<=3;i++)
{
if(q[i][2]>="0"&&q[i][2]<=to_string(k-1)&&q[i][1]==q[i][2]&&q[i][2]==q[i][3]){//row
e.triple++;
for(int j=1;j<=3;j++)
{
f[stoi(q[i][j])]--;
q[i][j]="*";
}
}
if(q[2][i]>="0"&&q[2][i]<=to_string(k-1)&&q[1][i]==q[2][i]&&q[2][i]==q[3][i]){//column
e.triple++;
for(int j=1;j<=3;j++)
{
f[stoi(q[j][i])]--;
q[j][i]="*";
}
}
}
if(q[2][2]>="0"&&q[2][2]<=to_string(k-1)&&q[1][1]==q[2][2]&&q[2][2]==q[3][3]){//slash
e.triple++;
for(int j=1;j<=3;j++)
{
f[stoi(q[j][j])]--;
q[j][j]="*";
}
}
if(q[2][2]>="0"&&q[2][2]<=to_string(k-1)&&q[1][3]==q[2][2]&&q[2][2]==q[3][1]){
e.triple++;
for(int j=1;j<=3;j++)
{
f[stoi(q[j][4-j])]--;
q[j][4-j]="*";
}
}
}
void pp()
{
int cnt=0;
for(int i=0;i<=k-1;i++)
{
if(f[i]>=2){
e.pair+=f[i]/2;
cnt=(f[i]/2)*2;//cnt修正
f[i]=f[i]%2;//这里本来是用结构体vector数组存坐标再消除的,但是用vector顺序会变(吐血)?
for(int x=1;x<=3;x++)
{
for(int y=1;y<=3;y++)
{
if(cnt==0){
break;
}
if(q[x][y]==to_string(i)&&cnt>=1){
q[x][y]="*";
cnt--;
}
}
}
}
}
}
void fep()
{
bool flag=true,flagf=true;
int cnt=0,st[100];
数字对对碰memset(st,0,sizeof(st));
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(q[i][j]!="*"){
flag=false;//以前的逻辑写的像史,n=1000时全家福判定爆bug了,遂重写。
}
if(q[i][j]=="*"){
flagf=false;
}
}
}
if(flag){
e.empty++;
}
for(int i=0;i<=k-1;i++)
{
if(f[i]>1){
flagf=false;
}
}
if(flagf){
e.full++;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
f[stoi(q[i][j])]=0;
q[i][j]="*";
}
}
}
}
void stats()
{
sum=0;
if(e.lucky>0){
cout<<"许愿+"<<e.lucky<<endl;
sum+=e.lucky*s.lucky;
e.lucky=0;
}
if(e.pair>0){
cout<<"对碰+"<<e.pair<<endl;
sum+=e.pair*s.pair;
e.pair=0;
}
if(e.triple>0){
cout<<"三连+"<<e.triple*s.triple<<endl;
sum+=e.triple*s.triple;
e.triple=0;
}
if(e.full>0){
cout<<"全家福+"<<e.full*s.full<<endl;
sum+=e.full*s.full;
e.full=0;
}
if(e.empty>0){
cout<<"清台+"<<e.empty*s.empty<<endl;
sum+=e.empty*s.empty;
e.empty=0;
}
n+=sum;
ans+=sum;
cout<<"本轮共加"<<sum<<"包"<<' '<<"共"<<n<<"包未拆"<<endl;
}
void game()
{
int cnt=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(q[i][j]=="#"&&cnt<n){
cnt++;
int qwq=a[r++];
q[i][j]=to_string(qwq);
f[qwq]++;
ct[qwq]++;
if(q[i][j]==to_string(t)){
e.lucky++;
}
}
cout<<q[i][j]<<' ';
}
cout<<endl;
}
n-=cnt;
tp();
pp();
fep();
stats();
}
void setting()
{
int cnt=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(cnt<n&&q[i][j]=="*"){
cnt++;
q[i][j]="#";
}
cout<<q[i][j]<<' ';
}
cout<<endl;
}
}
int main()
{
s.lucky=1;s.pair=1;s.triple=3;s.full=5;s.empty=5;
cout<<"欢迎游玩乌龟对对碰,输入“set”进入设置,输入“rule”了解游戏规则,输入1直接进入游戏"<<endl;
while(1){
cin>>c;
if(c=="set"){
cout<<"请输入幸运色奖励数量:";
cin>>s.lucky;
cout<<"请输入对碰奖励数量:";
cin>>s.pair;
cout<<"请输入三连奖励数量:";
cin>>s.triple;
cout<<"请输入全家福奖励数量:";
cin>>s.full;
cout<<"请输入清台奖励数量:";
cin>>s.empty;
cout<<"请输入颜色种类数(建议9种以上,否则清台玩法失效;颜色图鉴为0~n-1,默认为10种颜色):" ;
cin>>k;
cout<<"设置完毕,输入1进入游戏"<<endl;
}else if(c=="rule"){
cout<<"游戏规则:"<<endl<<"“乌龟对对碰”是近期在网络直播平台上流行的一种盲盒玩法。"<<endl<<"消费者需先购买数包盲袋或者盲盒(每包一个乌龟),并许愿一种颜色。"<<endl<<"网络直播间的卖家会挂出几种“套餐”,如××元拆4包,××元拆9包套餐等。"<<endl<<"消费者在直播间下单后,主播现场拆开包含不同颜色的树脂乌龟盲袋。"<<endl<<"玩法的核心在于“对对碰”,如拆出的乌龟颜色与买家许愿的颜色一致,或拆出两只相同颜色的乌龟,主播会额外加拆一包,继续与此前没有对碰的已拆盲袋组合,直到没有对碰为止。"<<endl;
cout<<"默认奖励规则为:幸运色奖励一包(不减数),同色对碰加一包,在九宫格内形成三连(横/竖/斜)加三包,凑齐全家福(在游戏结束前九宫格满且九种颜色互不相同)清台并加五包(可输入“set”进行调整设置),在游戏未结束的情况下清除九宫格内所有数字(乌龟)为清台加五包"<<endl;
cout<<"在本程序中,默认用0~9表示10种颜色的乌龟(可设置),用'#'表示未拆包,用'*'表示空位"<<endl;
cout<<"输入1进入游戏"<<endl;?
}else if(c=="1"){
break;
}else{
cout<<"输入错误,请重新输入"<<endl;
}
}
cout<<"开始游戏"<<endl<<"请输入购买数量:";
cin>>n;
ans=n;
cout<<"请选择幸运色(输入任意0~"<<k-1<<"间的数字):";
cin>>t;
cout<<"游戏开始,按回车进行游戏"<<endl;
Random(a);
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
q[i][j]="*";
}
}
while(n>0){
if(cin.get()=='
'){
setting();
}if(cin.get()=='
'){
game();
}
}
cout<<"游戏结束,共获得"<<ans<<"只小乌龟。其中:"<<endl;
for(int i=0;i<=k-1;i++)
{
cout<<i<<":"<<ct[i]<<"只"<<endl;
}
cout<<"输入任意字符结束游戏(防误触)";
char end;
cin>>end;
return 0;
}