斗地主数组模拟实现(仅大体部分)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斗地主数组模拟实现(仅大体部分)相关的知识,希望对你有一定的参考价值。

(游戏类代码判断情况比较多 往往是核心最多)
以下代码ckeck部分亦待修改
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include<string.h>
#define n 14
#define m 4
void paixu(int v[])
{
int i=0,j=0,t=0;
for(i=0;i<20;i++)
{ 
  for(j=0;j<19-i;j++)  { if(v[j]>v[j+1]) {t=v[j+1];v[j+1]=v[j];v[j]=t;} }
}
 
}
void display(int v[])
{
int i=0;
printf("\n");
paixu(v);
for(i=0;i<20;i++)
  {
  if (v[i]!=0&&v[i]<11) printf("%3d",v[i]);
  if (v[i]==11) printf(" J ");
  if (v[i]==12) printf(" Q ");
  if (v[i]==13) printf(" k ");
  if (v[i]==14) printf(" A ");
  if (v[i]==15) printf(" 2 ");
  if (v[i]==16) printf(" 小王 ");
  if (v[i]==17) printf(" 大王 ");

 }
printf("\n");
}
void fapai(int a[],int b[],int c[])
{
printf("\n 玩家 n1 a的牌 \n");
display(a);
printf("\n 玩家 n2 b的牌 \n");
display(b);
printf("\n 玩家 n3 c的牌 \n");
display(c);
}
int check(int v[])
{ 
 int i=0,count=0;
 if(v[i]!=0) count++;
 if(count==0) { printf(" \n win\n ");}
 return count;
}
 void player(int aa[],int c[],int cc[])
{   
int i,j,k;
int count=0;
int xx=0,x;
for(i=0;i<20;i++)
  { cc[i]=0; if(aa[i]!=0) count++; } 
  printf(" \n count=%d \n ",count); 

        if(count==0) {printf(" \n enter anycard \n ");scanf("%d",&x);cc[0]=x;printf(" \n cc%d \n ",cc[0]);for(i=0;i<20;i++)if(c[i]==c[0])c[i]=0; }
        if(count==1) {printf(" \n enter onecard \n ");scanf("%d",&x);cc[0]=x;printf(" \n cc%d \n ",cc[0]);for(i=0;i<20;i++)if(c[i]==c[0])c[i]=0; }
        if(count==2) {printf(" \n enter twocards \n ");scanf("%d",&x);cc[0]=x;scanf("%d",&x);cc[1]=x;printf(" \n cc%d , %d \n ",cc[0],cc[1]); } 


     paixu(cc);
}
void playee(int cc[],int b[],int bb[])
{   
int i,j,k;
int count=0;
int xx=0,x;
for(i=0;i<20;i++)
  { bb[i]=0; if(cc[i]!=0) count++; } 
  printf(" \n count=%d \n ",count); 

        if(count==0) 
{
printf(" \n enter anycard \n ");//for(i=0;i<20;i++)if(b[i]>cc[19]){ bb[0]=b[i]; b[i]=0;}
 }
       
     
     paixu(bb);
} 

void play(int a[],int b[],int c[])
{ 
int aa[20]={0},na=0;
int bb[20]={0},nb=0;
int cc[20]={0},nc=0;
 int num=5;
while(num--)
{
 player(aa,c,cc);  nc=check(c);
 playee(cc,b,bb);  nb=check(b);
 playee(bb,a,aa);  na=check(a);
//if(na<num)num=a; if(nb<num)num=b; if(nc<num) num=c;
 } 
}
void main()
{
int r,l;
int x[n][m]={0};
int a[20]={0},b[20]={0},c[20]={0};
int i,j,k=0;
	time_t t;
	srand((unsigned)time(&t));

for(i=0;i<n;i++)
 {
   for(j=0;j<m;j++)
   {
    x[i][j]=i+3;
 //  printf("%3d",x[i][j]);
   } 
}
//x[13][0]=16;
x[13][1]=17;
x[13][2]=0;
x[13][3]=0;
while(k<17)   
 {
 
	r=rand()%14;
        l=rand()%4;
  if(x[r][l]!=0){ a[k]=x[r][l];x[r][l]=0;k++;}
//  else      continue;
       
     }
k=0; 
while(k<17)
   {
 
	r=rand()%14;
        l=rand()%4;
  if(x[r][l]!=0){ b[k]=x[r][l];x[r][l]=0;k++;}
  // else      continue;
     }
k=0;
 for(i=0;i<14;i++)
{  for(j=0;j<4;j++)
   {
   if(x[i][j]!=0) { c[k]=x[i][j]; k++; }
   }
}


 fapai(a,b,c);
play(a,b,c);
//num();

}


以上是关于斗地主数组模拟实现(仅大体部分)的主要内容,如果未能解决你的问题,请参考以下文章

代码实现:模拟斗地主洗牌和发牌,牌没有排序

模拟斗地主

通过Java实现斗地主

bzoj4325: NOIP2015 斗地主(爆搜+模拟)

IT兄弟连 Java语法教程 综合案例

ArrayList模拟斗地主的洗牌,发牌和看牌