数字对对碰(数字对对碰教案中班)

乌龟对对碰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;

}

转载请说明出处 内容投诉内容投诉
九幽软件 » 数字对对碰(数字对对碰教案中班)