7年前のソースコード
ひどいものを発掘した。大体プログラミング学習し始めたくらいの時期のもの。
気が向いたら書き直してみたい。
/*作るのに当たってのメモ card数列は、終わりを100、カードが存在しないのを60とする。 また、card_num数列も同じ。 */ #define PLAYER 4 #define ALL 54 #define STOP _getch() int yama[ALL]; int card[PLAYER][ALL]; int card_num[PLAYER][ALL]; int turn[PLAYER]; int arg_set[PLAYER-1][PLAYER-1]; //[NPCの番号][0:混ぜ方 1:カードの引き方] int agari[PLAYER]; int player_nokori=PLAYER; int ranking[PLAYER]; char card_name[PLAYER][ALL][20]; int number,next,a,han; //関数の仮宣言 void yama_make(); void yama_shuffle(); void card_sort(int); void card_dump(int , int); //(int(プレイヤーの番号) , int( 0:捨てる際にメッセージを表示しない 1:表示する //2:あなたが相手から引く 3:COMが相手から引く) ) void card_num_make(int); void card_name_make(int); void card_number(int,int); //(int(プレイヤーの番号) , int(0:手札を表示しない 1:表示する 2:番号のみ表示)) void wait(int); //引数の値だけ、停止 void arg_shuffle(int,int); //第一引数:プレイヤーの番号 第二引数:アルゴリズムの設定 void arg_draw(int,int); //第一引数:プレイヤーの番号 第二引数:アルゴリズムの設定 void agari_han(); int _tmain(int argc, _TCHAR* argv[]) //本体 { int aa , a_0 , a_1 , a_2; srand( (unsigned)time(NULL) ); for(a=0 ; a<PLAYER ; a++) agari[a]=0; while(1) { printf("開始(1)終了(0)"); scanf("%d",&han); if(han==1) { yama_make(); yama[ALL-1]=60; yama_shuffle(); printf("\nカードを配ります。"); STOP; for(a_0=0 ; a_0<(ALL+PLAYER) ; a_0++) { a=a_0 % PLAYER; aa=a_0 / PLAYER; if(a_0>ALL-1) { card[a][aa]=100; } else { card[a][aa]=yama[a_0]; } } for(a=0 ; a<PLAYER ; a++) { card_name_make(a); if(a==0) { card_number(a,1); _getch(); } else { card_number(a,2); } } STOP; printf("\n"); for(a=0 ; a<PLAYER ; a++) { card_num_make(a); if(a==0) { card_dump(a,1); } else { card_dump(a,0); } card_sort(a); card_num_make(a); } for(a=0 ; a<PLAYER ; a++) { card_name_make(a); if(a==0) { card_number(a,1); _getch(); } else { card_number(a,2); } } STOP; printf("\n"); printf("今回の順番は、\n"); for(a=0 ; a<PLAYER ;a++) { turn[a]=a; } for(a=0 ; a<100 ;a++) { while(1) { a_0=rand()%4; a_1=rand()%4; if(a_0!=a_1) { a_2=turn[a_0]; turn[a_0]=turn[a_1]; turn[a_1]=a_2; break; } } } for(a=0 ; a<PLAYER ;a++) { if(turn[a]==0) { printf("(%d)あなた\n",a+1); } else { printf("(%d)COM%d\n",a+1,turn[a]); } } a=0; STOP; while(1) { if(turn[a]==0 && agari[0]==0) { printf("あなたの番です。\n"); _getch(); card_number(turn[a],1); if(a+1>=player_nokori) { next=0; } else { next=a+1; } card_number(turn[next],2); while(1) { _getch(); printf("どのカードを引きますか?(0~%d)",number-1); scanf("%d",&han); if( (han>=0) && (han<number) ) { card_name_make(next); printf("\n[%s]を引きました。",card_name[next][han]); STOP; card_number(turn[a],0); if(card[turn[a]][number]==100) card[turn[a]][number+1]=100; card[turn[a]][number]=card[next][han]; card[next][han]=60; card_sort(next); card_number(next,0); agari_han(); card_num_make(turn[a]); card_name_make(turn[a]); card_dump(turn[a],2); card_sort(turn[a]); card_name_make(turn[a]); card_number(turn[a],1); agari_han(); if(a<player_nokori-1) { a++; } else { a=0; } break; } else { printf("値が不正です。\n\n"); } } } else { printf("COM%dの番です。\n",turn[a]); card_number(turn[a],0); if(a+1>=player_nokori) { next=0; } else { next=a+1; } card_number(turn[next],0); if(turn[next]==0) { } else { arg_shuffle(next,arg_set[next][0]); arg_draw(next,arg_set[a][1]); card_number(turn[a],0); if(card[turn[a]][number]==100) card[turn[a]][number+1]=100; card[turn[a]][number]=card[next][han]; card[next][han]=60; card_sort(next); card_number(next,0); agari_han(); card_num_make(turn[a]); card_name_make(turn[a]); card_dump(turn[a],3); card_sort(turn[a]); card_name_make(turn[a]); card_number(turn[a],1); agari_han(); if(a<player_nokori-1) { a++; } else { a=0; } } } } break; } else if(han==0) { break; } else { printf("値が不正です。\n\n"); } } STOP; return 0; } void yama_make() //山札の新規作成 { int i_0=0; for(i_0=0 ; i_0<ALL ; i_0++) { yama[i_0]=i_0+1; } } void yama_shuffle() //山札を混ぜる { int i_0=0 , i_1=0 , i_2=0 , i_3=0; for(i_0=0 ; i_0<=1000 ; i_0++) { while(1) { i_1=rand()%ALL; i_2=rand()%ALL; if(i_1!=i_2) { i_3=yama[i_1]; yama[i_1]=yama[i_2]; yama[i_2]=i_3; break; } } } } void card_sort(int i) //各プレイヤーの手札を並び替え { int i_0 , i_1 , i_2; for(i_0=0 ; card[i][i_0]<100 ; i_0++) { for(i_1=0 ; card[i][i_1+1]!=100 ; i_1++) { if(card[i][i_1]>card[i][i_1+1]) { i_2=card[i][i_1]; card[i][i_1]=card[i][i_1+1]; card[i][i_1+1]=i_2; } } } } void card_dump(int i,int ii) //手札カードのうち、番号の同じもの同士を捨てる。 { int i_0 , i_1, i_2=0; for(i_0=0 ; card_num[i][i_0]!=100 ; i_0++) { for(i_1=i_0+1 ; card_num[i][i_1]!=100 ; i_1++) { if((card_num[i][i_0] == card_num[i][i_1]) && card_num[i][i_0] != 60) { if(ii==1) { card_name_make(i); printf("場に[%s]と[%s]が捨てられました。\n",card_name[i][i_0],card_name[i][i_1]); } if(ii==2) { printf("場に[%s]と[%s]を捨てました。\n",card_name[i][i_0],card_name[i][i_1]); } if(ii==3) { printf("場に[%s]と[%s]が捨てられました。\n",card_name[i][i_0],card_name[i][i_1]); } card_num[i][i_0]=60; card_num[i][i_1]=60; card[i][i_0]=60; card[i][i_1]=60; i_2=1; break; } } } if(i_2==0) { if(ii==2) { printf("捨てるカードはありません。\n"); } if(ii==3) { printf("捨てるカードが無かったようです。\n"); } } } void card_num_make(int i) { int i_0; for(i_0=0 ; card[i][i_0]!=100 ; i_0++) { switch(card[i][i_0]) { case 1: case 14: case 27: case 40: card_num[i][i_0]=1; break; case 2: case 15: case 28: case 41: card_num[i][i_0]=2; break; case 3: case 16: case 29: case 42: card_num[i][i_0]=3; break; case 4: case 17: case 30: case 43: card_num[i][i_0]=4; break; case 5: case 18: case 31: case 44: card_num[i][i_0]=5; break; case 6: case 19: case 32: case 45: card_num[i][i_0]=6; break; case 7: case 20: case 33: case 46: card_num[i][i_0]=7; break; case 8: case 21: case 34: case 47: card_num[i][i_0]=8; break; case 9: case 22: case 35: case 48: card_num[i][i_0]=9; break; case 10: case 23: case 36: case 49: card_num[i][i_0]=10; break; case 11: case 24: case 37: case 50: card_num[i][i_0]=11; break; case 12: case 25: case 38: case 51: card_num[i][i_0]=12; break; case 13: case 26: case 39: case 52: card_num[i][i_0]=13; break; case 53: case 54: card_num[i][i_0]=14; break; default: card_num[i][i_0]=60; } } card_num[i][i_0]=100; } void card_name_make(int i) { int i_0; for(i_0=0 ; card_num[i][i_0]!=100 ;i_0++) { switch(card[i][i_0]) { case 1: strcpy( card_name[i][i_0] , "†①" ); break; case 2: strcpy( card_name[i][i_0] , "†②" ); break; case 3: strcpy( card_name[i][i_0] , "†③" ); break; case 4: strcpy( card_name[i][i_0] , "†④" ); break; case 5: strcpy( card_name[i][i_0] , "†⑤" ); break; case 6: strcpy( card_name[i][i_0] , "†⑥" ); break; case 7: strcpy( card_name[i][i_0] , "†⑦" ); break; case 8: strcpy( card_name[i][i_0] , "†⑧" ); break; case 9: strcpy( card_name[i][i_0] , "†⑨" ); break; case 10: strcpy( card_name[i][i_0] , "†⑩" ); break; case 11: strcpy( card_name[i][i_0] , "†⑪" ); break; case 12: strcpy( card_name[i][i_0] , "†⑫" ); break; case 13: strcpy( card_name[i][i_0] , "†⑬" ); break; case 14: strcpy( card_name[i][i_0] , "○①" ); break; case 15: strcpy( card_name[i][i_0] , "○②" ); break; case 16: strcpy( card_name[i][i_0] , "○③" ); break; case 17: strcpy( card_name[i][i_0] , "○④" ); break; case 18: strcpy( card_name[i][i_0] , "○⑤" ); break; case 19: strcpy( card_name[i][i_0] , "○⑥" ); break; case 20: strcpy( card_name[i][i_0] , "○⑦" ); break; case 21: strcpy( card_name[i][i_0] , "○⑧" ); break; case 22: strcpy( card_name[i][i_0] , "○⑨" ); break; case 23: strcpy( card_name[i][i_0] , "○⑩" ); break; case 24: strcpy( card_name[i][i_0] , "○⑪" ); break; case 25: strcpy( card_name[i][i_0] , "○⑫" ); break; case 26: strcpy( card_name[i][i_0] , "○⑬" ); break; case 27: strcpy( card_name[i][i_0] , "◇①" ); break; case 28: strcpy( card_name[i][i_0] , "◇②" ); break; case 29: strcpy( card_name[i][i_0] , "◇③" ); break; case 30: strcpy( card_name[i][i_0] , "◇④" ); break; case 31: strcpy( card_name[i][i_0] , "◇⑤" ); break; case 32: strcpy( card_name[i][i_0] , "◇⑥" ); break; case 33: strcpy( card_name[i][i_0] , "◇⑦" ); break; case 34: strcpy( card_name[i][i_0] , "◇⑧" ); break; case 35: strcpy( card_name[i][i_0] , "◇⑨" ); break; case 36: strcpy( card_name[i][i_0] , "◇⑩" ); break; case 37: strcpy( card_name[i][i_0] , "◇⑪" ); break; case 38: strcpy( card_name[i][i_0] , "◇⑫" ); break; case 39: strcpy( card_name[i][i_0] , "◇⑬" ); break; case 40: strcpy( card_name[i][i_0] , "★①" ); break; case 41: strcpy( card_name[i][i_0] , "★②" ); break; case 42: strcpy( card_name[i][i_0] , "★③" ); break; case 43: strcpy( card_name[i][i_0] , "★④" ); break; case 44: strcpy( card_name[i][i_0] , "★⑤" ); break; case 45: strcpy( card_name[i][i_0] , "★⑥" ); break; case 46: strcpy( card_name[i][i_0] , "★⑦" ); break; case 47: strcpy( card_name[i][i_0] , "★⑧" ); break; case 48: strcpy( card_name[i][i_0] , "★⑨" ); break; case 49: strcpy( card_name[i][i_0] , "★⑩" ); break; case 50: strcpy( card_name[i][i_0] , "★⑪" ); break; case 51: strcpy( card_name[i][i_0] , "★⑫" ); break; case 52: strcpy( card_name[i][i_0] , "★⑬" ); break; case 53: strcpy( card_name[i][i_0] , "JK" ); break; case 54: strcpy( card_name[i][i_0] , "JK" ); break; case 60: strcpy( card_name[i][i_0] , "" ); } } } void wait(int i) { int i_0; i_0=int(time(NULL)); while((int(time(NULL))-i_0)<i) ; } void card_number(int i , int ii) { int i_0 , i_1=0 , i_2=1; if((ii!=0) && i==0) { printf("あなたの手札は、\n"); } else if(ii != 0) { printf("COM%dの手札は、",i); } else ; for(i_0=0 ; card[i][i_0]!=100 ; i_0++) { if(card[i][i_0]!=60) { if(ii==2) { printf("[%d]",i_0); } else if(ii==1) { if(i_2>10) { printf("\n"); i_2=0; } printf("[%s]",card_name[i][i_0]); i_2++; } i_1++; } } if((ii!=0) && ii==0) { printf("%d枚です。\n",i_1); } else if(ii != 0) { printf("(%d枚)\n\n",i_1); } number=i_1; } void agari_han() { int i_0 , i_1 , i_2; if(number==0) { player_nokori-=1; ranking[PLAYER-player_nokori]=turn[a]; if(turn[a]==0) { printf("あなたは%d着です。\n",PLAYER-player_nokori); } else { printf("COM%dは%d着です。\n",turn[a],PLAYER-player_nokori); } turn[a]=PLAYER; for(i_1=0 ; i_1<PLAYER-1 ;i_1++) { if(turn[i_1]==PLAYER) { i_2=turn[i_1]; turn[i_1]=turn[i_1+1]; turn[i_1+1]=i_2; } } if(player_nokori==1) { ranking[PLAYER-player_nokori]=0; printf("\nゲーム終了\n"); STOP; printf("\n結果発表\n"); wait(4); for(i_0=0 ; i_0<PLAYER ;i_0++) { if(ranking[i_0]==0) { printf("%d位\tあなた\n",i_0+1); wait(2); } else { printf("%d位\tCOM%d\n",i_0+1,ranking[i_0]); wait(1); } } } } } void arg_draw(int i,int ii) { int i_0=0 , i_1=0 , i_2=0 , i_3 , i_4; switch(ii) { case 0: han=rand()%number; break; case 1: if(rand()%2==0) { han=0; }else{ han=number-1; } break; case 2: if(player_nokori<PLAYER) { han=rand()%number; } else { han=number/2; } break; case 3: if(player_nokori<PLAYER) { if(rand()%2==0) { han=0; }else{ han=number-1; } } else { han=number/2; } break; } } void arg_shuffle(int i,int ii) { int i_0=0 , i_1=0 , i_2=0 , i_3 , i_4; switch(ii) { case 0: { for(i_0=0 ; card[i][i_0]<100 ; i_0++) { for(i_1=0 ; card[i][i_1+1]!=100 ; i_1++) { if(card[i][i_1]>card[i][i_1+1]) { i_2=card[i][i_1]; card[i][i_1]=card[i][i_1+1]; card[i][i_1+1]=i_2; } } } } break; case 1: { for(i_0=0 ; card[i][i_0]<100 ; i_0++) { for(i_1=0 ; card[i][i_1+1]!=100 ; i_1++) { if(card[i][i_1]<card[i][i_1+1]) { i_2=card[i][i_1]; card[i][i_1]=card[i][i_1+1]; card[i][i_1+1]=i_2; } else if(card[i][i_1]==60) { i_2=card[i][i_1]; card[i][i_1]=card[i][i_1+1]; card[i][i_1+1]=i_2; } } } } break; case 2: card_number(i,0); for(i_0=0 ; i_0<100 ; i_0++) { while(1) { i_2=rand()%number; i_3=rand()%number; if(i_2!=i_3) { i_4=yama[i_2]; yama[i_2]=yama[i_3]; yama[i_3]=i_4; break; } } } } }