見出し画像

C言語と格闘していたw

タブレット、キーボードなし、モバイルC・・・(しかもバグあり)がんばったな

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


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

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_hint *card );
void disp_haint *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);

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;
}

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_hint *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_haint *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 timerint 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 );    //    コム枚数
   c2= lefts( & card[1]);  //    人間枚数
                    


 //   game_start(n);                                     
                    
while(c1!=0 && c2!=0){     
   //   人間から
if(jr==0){
//   com_dis(&card);
   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;
}
   
                  
                                                     
//   disp_ha( &card);
/*                                                                                    
   disp_h( & card);
   printf("\n\n\n"); 
                    
   matching( &card);
   disp_h( & card);
                    
   printf("\n\n\n"); 
                    
   disp_h( & card[1]);
   printf("\n\n\n"); 
                    
   matching( &card[1]);
   disp_h( & card[1]);
                    
   printf("\n\n\n"); 
                                   
                                                  	              	            
 */	
/*                    
                    
   matching( &card);
   matching( &card[1]);
   c1= lefts( & card );    
   c2= lefts( & card[1] );
   
                    
                    
                                                               
   printf("\n\nCPU\n");  
   disp_ha( &card);
    
  // c=card_c(&card)  ;                               
   printf ( "\n\n %2d %2d 枚",c1,c2) ;                 
   printf("\n\nあなた\n")    ;                                                           
   disp_ha( &card[1]);
*/  
    
                                             	              
   return 0;
}


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

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 matchingint *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_setint * 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");
	}
}
    

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