見出し画像

ジジ抜きC言語プログラム、ソースコード仮公開


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <stdio.h> #include  <stdlib.h> #include  <time.h>


//
// 和仁親王によるカードゲーム『ジジ抜き』
//    COPYRIGHT 2021.07.1 Kazuhito
//
//	矢印で選択白でコピー黒で張りつけ
//        ver 103 
//

int timer(int n );
void tbl_set(int *a);
void card_set(int * tbl,int *card);
void test (int *a)	;
void matching ( int *a);
int card_r(int *tbl);
void disp_h( int *card );
void disp_ha( int *card );
int card_c(int *a);   //  数える
int card_s(int *a);   //  選ぶ
int lefts(int * a);   //  揃える  数える
void sub (int *a);
int s1(int a);
void  game_start(void);
void com_dis(int * a);
void cardpr1(int *a,int b);
void mj( int n );
void swap( int *card,int a,int b);     //    コムのカード混ぜる

void com_sw( int *card,int n){  //    コムのカード混ぜる
   int i,r;
   for (  i=0 ; i<n ; i++ ){
   	r=rand()%n;
   	swap(card,i,r);
   	
   }
}


void swap(int *card,int a,int b){
     int w;
     w=card[a];
     card[a]=card[b];
     card[b]=w;
}

int lefts(int * card){
	int work[26]={0,0,0,0,0,0,0,0,0,0,
		          0,0,0,0,0,0,0,0,0,0,
		          0,0,0,0,0,0};
	int c1=0;
	int i;
	
		          
//	printf ( " \n \n"  ) ;        
	for(i=0;i<26;i++)
	{
	    if(card[ i]!=0) 
	    {
//	    	printf ( " %3d ",  card[i]) ;
	    	work[c1]=card[i];
	    	c1++;
	    }
	}

   for(i=0;i<26;i++){card[i]=work[i];}
   
   return c1;
}

void mj( int n ){
	 char st[][5]={"S","H","D","C"};
    char cdno[][10]={"あ","A","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩","J","Q","K"};
    //   ↑使用上ゼロをつかわない
    printf ( "%s%s",st[n/100],cdno[n%100]);
}

int card_c(int * card ){
   int i,n=0;
   for(  i=0 ; i<26 ; i++ ){
      if( card[i]!=0 )
      {
          n++;
      }
   }
   return n;
}

int card_s(int * card ){
   int s;
   printf (" \n please input ... " )  ;
   scanf  (" %d ",&s);
   printf ( " %3d \n",s   ) ;

   return s;
}


void com_dis(int *card){
	int i,c;
	for(  i=0 ; i<26; i++ ){
	   if(card[i]!=0)
	   {
	   	   c++;
	   	   printf ( "[%3d]", c ) ;
	   }
	 }
}
	 
	
void jikoshoukai(){
printf("       全世界が驚いた                  \n");
timer( 15);
printf("    名匠が放つ問題作                   \n");
timer( 20);
printf(" 「ジジイをひくのは貴様だ」              \n");
timer( 5);
printf("     殺し合いなのか・・・              \n");
timer( 7);
printf("      aill be back                     \n");
timer( 5);
printf("   Kazuhito presents                   \n");
timer( 5);
printf("    copy light 2021                    \n");
printf("                     \n");
printf("                     \n");
printf("                     \n");

}

void disp_h( int *card ){ 
	
	int i=0,c=0,n;
	
	printf("\n"); 
		
	for (i=0;i<=25;i++){
	     if ( card[i]!=0 ){   			
           printf(" %3d",  card[i]);
           c++;
           if(c%10==0)
           {
               printf("\n");	
           }
        }
                                      
   }	   
}

void disp_ha( int *card ){ 
	
	int i=0,c=1,n;
	
	printf("\n"); 
		
	for (i=0;i<=25;i++){
	    if ( card[i]!=0 ){   			
           printf("[%3d]", c);
           c++;
        }
    }	
    printf("\n\n"); 
	 
    c=0;  
    for (i=0;i<=25;i++){
	    if ( card[i]!=0 ){   			
           printf("[%3d]",card[i]);
          
        }
    }	 
}


int timer( int n ){
   int i,a,j,b=10;
   int tbl[52];
   for(i=0;i<3*n;i++)
   {   	
       for(j=0;j<10000;j++){
   	a=a+a+a+i;
   	a=a*a+i+a+a;
   	b=b*10+a;
       }	
	}
	return 0;
}


	
int  main(){
  int tbl[52],c, c1=999,c2=999,i,j,n,n2,n3,ny;
  int jj,jr;
  int card[2][26]={{0,1,2,3,4,5,6,7,8,9,10,11,12},
                   {0,1,2,3,4,5,6,7,8,9,10,11,12}};
  
      
 	  
  jikoshoukai();             //自己紹介 語り 宣伝

  tbl_set(& tbl);        //   100の桁スーツ0-3  100のあまり0-13
  
  srand((unsigned int)time(NULL));
		               
  card_set(& tbl,&card);
  jr=rand()%2;       
  jj=card[jr][25]; //    COMor人間の ジジ決め
  card[jr][25] =0;
                                                     
  printf("\n\n\n");   
  matching( &card);
  matching( &card[1]);
//   com_dis(&card);                 
  c1= lefts( & card );    //    コム枚数
  com_sw( &card, c1);     //    コムのカード混ぜる
  c2= lefts( & card[1]);  //    人間枚数
                   


//   game_start(n);                                     
                   
while(c1!=0 && c2!=0){     
  //   人間から
if(jr==0){
//   com_dis(&card);
  printf ( "\nコム\n" );
  cardpr1(& card,0);
  com_sw( &card, c1);     //    コムのカード混ぜる

  printf ( "\nあなた\n" );
  cardpr1(& card[1],1);
  ny=s1(c1);
  card[1][c2]=card[0][ny-1];   //選んだカードから①減らす
  card[0][ny-1]=0;
  matching( &card);
  matching( &card[1]);
  
  printf ( " \n" ) ;
//  com_dis(&card);
  c1= lefts( & card );   
  c2= lefts( & card[1]);   
      
    if(c1==0)  {
  	   printf ( " \nCOMの勝ちです") ;
  	   return 0;
    }
    if(c2==0)  {
  	   printf ( " \nあなたの勝ちです") ;
  	   return 0;
    } 
}else {
  n3=rand()%c2;
  printf ( "\nCOM選択 %3d", n3+1 ) ;
  card[0][c1]=card[1][n3];    //  人間からカードひく
  card[1][n3]=0;              //
  matching( &card);
  matching( &card[1]);
  c1= lefts( & card );    
  c2= lefts( & card[1]);

//  printf ( "\n\nてすと%3d %3d %3d  ", c1,c2,n3 ) ;

//   ny=s1(c1);

    if(c1==0){
  	   printf ( " \nCOMの勝ちです") ;
  	   return 0;
    }
    if(c2==0) {
  	   printf ( " \nあなたの勝ちです") ;
  	   return 0;
    }

 
}
jr=(jr+1)%2;
}
  
                 
  return 0;
}


/*
int game_start(void){ 
	printf ( "\n\n**** さあ、命のやり取りのはじまりだ****"  );
	return 0;
	}
*/	

int s1(int n){
	int s= 999;
	
	while(!(1<=s && s<=n))   //  入力を1からnまでにする
	{
	   printf ( "\n\nいれてください[ 1 ]- [%2d ]",n);
	   scanf("  %d",&s)	;
	}
	return s;
	
}
	
void sub ( int  *card){
  int c1,c2,i,j,n,n2,carad[2][26];
  matching( &card);
  matching( &card[1]);
  c1= lefts( & card );    
  c2= lefts( & card[1] );
/*  
  n2=rand()%c2; 
  n=card[26+n2];
  
  for(j=0;j<26; j++ ){
  for(i=0;i<26; i++ ){
  	  if((card[i]%100)==(card[26+j]%100)){
     	 card[i]=0;
     	 card[26+j]=0;
  	  }
     matching(&card);
  	  matching(&card[1]);
  }}
  */
}


  
void matching( int *card){
	
     int i,c,j,m,k,f=0;
      	for(i=0;i<26;i++) {
	  	for(j=0;j<26;j++) {
	      if(i!=j){
	      if(card[i]%100==card[j]%100)	{
	      if(card[i]!=0 && card[j]!=0) 	{
	  	    card[i]=0;
	  	    card[j]=0;	  	 
	  	  }}}
	  	}}
	  			
}


/*      
   乱数に関するようプログラムをまとめる   
      バックアップよろ
   2021 06.25

*/


void tbl_set( int * tbl){
  int i,k,keta=13;
//   printf("\n");
  for(i=0;i<=51;i++){
  	   k=i/keta*100+i%keta+1;
//   	   printf(" %3d",k);
  	   if((i+1)%keta==0) {
  	   	//  printf("\n");
  	   	 }
  	   tbl[i]=k;
  }  
}

void test(int *tbl){
   int i,j;
//   printf("\n"); 
   for(i=0;i<4;i++){
   	   for(j=0;j<13;j++){  
   	//   	   printf(" %3d",card_r(tbl));
   	   }
   	   printf("\n");
   }   	
}

int card_r(int *tbl){
/*
	カードを1枚引くルーチン
*/	
   int r=0,f=0;
   while(f==0){
      r=rand()%52;
      if(tbl[r]!=0){
      	  f=tbl[r];
      	  tbl[r]=0;
      } 	
   }
   return f;
}


void card_set(int * tbl,int * card){
	
//ここはカードをセットするルーチン
	
	int i,j,a;
	printf("\n");

	for(i=0;i<2;i++){
		for(j=0;j<26;j++){
	     	a=card_r(tbl);
	     	card[i*26+j]=a;   //一次元で処理を行う
	//		printf(" %3d",a);
		}
//		printf("\n");
	}
}
void cardpr1( int * card,int pf ){
	int i,n,c=1;
	for(  i=0 ; i<26; i++ ){
	   n=card[i];
	   if (n !=0){
	   	  printf ( "[ %3d]", c ) ;
	   	  c++;
	   } 	
	}

	printf ( " \n"  ) ;
	for(  i=0 ; i<26; i++ ){
	   n=card[i];
	   if (n!=0){
	   	  if(pf==0){ printf ( "♥内緒" ) ;}
	   	  else 
	   	  {
	   	  printf ( "  " );
	   	  mj(n);
	      }	
	   }
	}
	printf ( "  \n"  ) ;
}

void cardpr2( int * card ){
	int i;
	for(  i=0 ; i<25; i++ ){
	   printf ( "[%3d] ",card[i]  );
	}
	printf ( "\n" ) ;
}
   

int timer(int n );
void tbl_set(int *a);
void card_set(int * tbl,int *card);
void test (int *a) ;
void matching ( int *a);
int card_r(int *tbl);
void disp_h( int *card );
void disp_ha( int *card );
int card_c(int *a); // 数える
int card_s(int *a); // 選ぶ
int lefts(int * a); // 揃える 数える
void sub (int *a);
int s1(int a);
void game_start(void);
void com_dis(int * a);
void cardpr1(int *a,int b);
void mj( int n );
void swap( int *card,int a,int b); // コムのカード混ぜる

void com_sw( int *card,int n){ // コムのカード混ぜる
int i,r;
for ( i=0 ; i<n ; i++ ){
r=rand()%n;
swap(card,i,r);

}
}


void swap(int *card,int a,int b){
int w;
w=card[a];
card[a]=card[b];
card[b]=w;
}

int lefts(int * card){
int work[26]={0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0};
int c1=0;
int i;


// printf ( " \n \n" ) ;
for(i=0;i<26;i++)
{
if(card[ i]!=0)
{
// printf ( " %3d ", card[i]) ;
work[c1]=card[i];
c1++;
}
}

for(i=0;i<26;i++){card[i]=work[i];}

return c1;
}

void mj( int n ){
char st[][5]={"S","H","D","C"};
char cdno[][10]={"あ","A","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩","J","Q","K"};
// ↑使用上ゼロをつかわない
printf ( "%s%s",st[n/100],cdno[n%100]);
}

int card_c(int * card ){
int i,n=0;
for( i=0 ; i<26 ; i++ ){
if( card[i]!=0 )
{
n++;
}
}
return n;
}

int card_s(int * card ){
int s;
printf (" \n please input ... " ) ;
scanf (" %d ",&s);
printf ( " %3d \n",s ) ;

return s;
}


void com_dis(int *card){
int i,c;
for( i=0 ; i<26; i++ ){
if(card[i]!=0)
{
c++;
printf ( "[%3d]", c ) ;
}
}
}


void jikoshoukai(){
printf(" 全世界が驚いた \n");
timer( 15);
printf(" 名匠が放つ問題作 \n");
timer( 20);
printf(" 「ジジイをひくのは貴様だ」 \n");
timer( 5);
printf(" 殺し合いなのか・・・ \n");
timer( 7);
printf(" aill be back \n");
timer( 5);
printf(" Kazuhito presents \n");
timer( 5);
printf(" copy light 2021 \n");
printf(" \n");
printf(" \n");
printf(" \n");

}

void disp_h( int *card ){

int i=0,c=0,n;

printf("\n");

for (i=0;i<=25;i++){
if ( card[i]!=0 ){
printf(" %3d", card[i]);
c++;
if(c%10==0)
{
printf("\n");
}
}

}
}

void disp_ha( int *card ){

int i=0,c=1,n;

printf("\n");

for (i=0;i<=25;i++){
if ( card[i]!=0 ){
printf("[%3d]", c);
c++;
}
}
printf("\n\n");

c=0;
for (i=0;i<=25;i++){
if ( card[i]!=0 ){
printf("[%3d]",card[i]);

}
}
}


int timer( int n ){
int i,a,j,b=10;
int tbl[52];
for(i=0;i<3*n;i++)
{
for(j=0;j<10000;j++){
a=a+a+a+i;
a=a*a+i+a+a;
b=b*10+a;
}
}
return 0;
}



int main(){
int tbl[52],c, c1=999,c2=999,i,j,n,n2,n3,ny;
int jj,jr;
int card[2][26]={{0,1,2,3,4,5,6,7,8,9,10,11,12},
{0,1,2,3,4,5,6,7,8,9,10,11,12}};



jikoshoukai(); //自己紹介 語り 宣伝

tbl_set(& tbl); // 100の桁スーツ0-3 100のあまり0-13

srand((unsigned int)time(NULL));

card_set(& tbl,&card);
jr=rand()%2;
jj=card[jr][25]; // COMor人間の ジジ決め
card[jr][25] =0;

printf("\n\n\n");
matching( &card);
matching( &card[1]);
// com_dis(&card);
c1= lefts( & card ); // コム枚数
com_sw( &card, c1); // コムのカード混ぜる
c2= lefts( & card[1]); // 人間枚数


// game_start(n);

while(c1!=0 && c2!=0){
// 人間から
if(jr==0){
// com_dis(&card);
printf ( "\nコム\n" );
cardpr1(& card,0);
com_sw( &card, c1); // コムのカード混ぜる

printf ( "\nあなた\n" );
cardpr1(& card[1],1);
ny=s1(c1);
card[1][c2]=card[0][ny-1]; //選んだカードから①減らす
card[0][ny-1]=0;
matching( &card);
matching( &card[1]);

printf ( " \n" ) ;
// com_dis(&card);
c1= lefts( & card );
c2= lefts( & card[1]);

if(c1==0) {
printf ( " \nCOMの勝ちです") ;
return 0;
}
if(c2==0) {
printf ( " \nあなたの勝ちです") ;
return 0;
}
}else {
n3=rand()%c2;
printf ( "\nCOM選択 %3d", n3+1 ) ;
card[0][c1]=card[1][n3]; // 人間からカードひく
card[1][n3]=0; //
matching( &card);
matching( &card[1]);
c1= lefts( & card );
c2= lefts( & card[1]);

// printf ( "\n\nてすと%3d %3d %3d ", c1,c2,n3 ) ;

// ny=s1(c1);

if(c1==0){
printf ( " \nCOMの勝ちです") ;
return 0;
}
if(c2==0) {
printf ( " \nあなたの勝ちです") ;
return 0;
}


}
jr=(jr+1)%2;
}


return 0;
}


/*
int game_start(void){
printf ( "\n\n**** さあ、命のやり取りのはじまりだ****" );
return 0;
}
*/

int s1(int n){
int s= 999;

while(!(1<=s && s<=n)) // 入力を1からnまでにする
{
printf ( "\n\nいれてください[ 1 ]- [%2d ]",n);
scanf(" %d",&s) ;
}
return s;

}

void sub ( int *card){
int c1,c2,i,j,n,n2,carad[2][26];
matching( &card);
matching( &card[1]);
c1= lefts( & card );
c2= lefts( & card[1] );
/*
n2=rand()%c2;
n=card[26+n2];

for(j=0;j<26; j++ ){
for(i=0;i<26; i++ ){
if((card[i]%100)==(card[26+j]%100)){
card[i]=0;
card[26+j]=0;
}
matching(&card);
matching(&card[1]);
}}
*/
}



void matching( int *card){

int i,c,j,m,k,f=0;
for(i=0;i<26;i++) {
for(j=0;j<26;j++) {
if(i!=j){
if(card[i]%100==card[j]%100) {
if(card[i]!=0 && card[j]!=0) {
card[i]=0;
card[j]=0;
}}}
}}

}


/*
乱数に関するようプログラムをまとめる
バックアップよろ
2021 06.25

*/


void tbl_set( int * tbl){
int i,k,keta=13;
// printf("\n");
for(i=0;i<=51;i++){
k=i/keta*100+i%keta+1;
// printf(" %3d",k);
if((i+1)%keta==0) {
// printf("\n");
}
tbl[i]=k;
}
}

void test(int *tbl){
int i,j;
// printf("\n");
for(i=0;i<4;i++){
for(j=0;j<13;j++){
// printf(" %3d",card_r(tbl));
}
printf("\n");
}
}

int card_r(int *tbl){
/*
カードを1枚引くルーチン
*/
int r=0,f=0;
while(f==0){
r=rand()%52;
if(tbl[r]!=0){
f=tbl[r];
tbl[r]=0;
}
}
return f;
}


void card_set(int * tbl,int * card){

//ここはカードをセットするルーチン

int i,j,a;
printf("\n");

for(i=0;i<2;i++){
for(j=0;j<26;j++){
a=card_r(tbl);
card[i*26+j]=a; //一次元で処理を行う
// printf(" %3d",a);
}
// printf("\n");
}
}
void cardpr1( int * card,int pf ){
int i,n,c=1;
for( i=0 ; i<26; i++ ){
n=card[i];
if (n !=0){
printf ( "[ %3d]", c ) ;
c++;
}
}

printf ( " \n" ) ;
for( i=0 ; i<26; i++ ){
n=card[i];
if (n!=0){
if(pf==0){ printf ( "♥内緒" ) ;}
else
{
printf ( " " );
mj(n);
}
}
}
printf ( " \n" ) ;
}

void cardpr2( int * card ){
int i;
for( i=0 ; i<25; i++ ){
printf ( "[%3d] ",card[i] );
}
printf ( "\n" ) ;
}



この記事が気に入ったらサポートをしてみませんか?