ジジ抜き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" ) ;
}
この記事が気に入ったらサポートをしてみませんか?