最近的工作和学习相对来说比较累,没有时间去研究比较深的原理性的专业知识,但是为了将我多年修炼的编程内功继续保持下去,我总会去写一些很有趣的东西,昨天休息在家我就用一天的时间完成了C++版的三国杀,虽然很搓,但还是想开源,希望刚学习C++的新手有所帮助。。。高手的话可以忽略我的存在。。。呵呵。。。
View Code
1 #include<iostream> 2 #include<time.h> 3 #include<stdio.h> 4 #include <stdlib.h> 5 using namespace std; 6 struct pai 7 { 8 int paifu; 9 int huase; 10 int yanse; 11 int dianshu; 12 int leixing; 13 int changdu; 14 void Kanpai() 15 { 16 if(paifu==0||paifu==1); 17 else 18 printf("牌副参数错误!\n"); 19 switch(huase) 20 { 21 case 0:cout<<"黑桃";break; 22 case 1:cout<<"红桃";break; 23 case 2:cout<<"草花";break; 24 case 3:cout<<"方片";break; 25 case -1:cout<<"无色";break; 26 default:printf("花色错误!\n");break; 27 } 28 switch(dianshu) 29 { 30 case 0:cout<<"A ";break; 31 case 1:cout<<"2 ";break; 32 case 2:cout<<"3 ";break; 33 case 3:cout<<"4 ";break; 34 case 4:cout<<"5 ";break; 35 case 5:cout<<"6 ";break; 36 case 6:cout<<"7 ";break; 37 case 7:cout<<"8 ";break; 38 case 8:cout<<"9 ";break; 39 case 9:cout<<"10 ";break; 40 case 10:cout<<"J ";break; 41 case 11:cout<<"Q ";break; 42 case 12:cout<<"K ";break; 43 case -1:cout<<"无点数";break; 44 default:printf("点数错误!\n");break; 45 } 46 switch(leixing) 47 { 48 case 101:cout<<"【杀】"<<endl;break; 49 case 102:cout<<"【闪】"<<endl;break; 50 case 103:cout<<"【桃】"<<endl;break; 51 case 201:cout<<"【过河拆桥】"<<endl;break; 52 case 202:cout<<"【顺手牵羊】"<<endl;break; 53 case 203:cout<<"【无中生有】"<<endl;break; 54 case 204:cout<<"【决斗】"<<endl;break; 55 case 205:cout<<"【借刀杀人】"<<endl;break; 56 case 206:cout<<"【桃园结义】"<<endl;break; 57 case 207:cout<<"【五谷丰登】"<<endl;break; 58 case 208:cout<<"【南蛮入侵】"<<endl;break; 59 case 209:cout<<"【万箭齐发】"<<endl;break; 60 case 210:cout<<"【无懈可击】"<<endl;break; 61 case 251:cout<<"【乐不思蜀】"<<endl;break; 62 case 252:cout<<"【闪电】"<<endl;break; 63 case 301:cout<<"【诸葛连弩(1)】"<<endl;break; 64 case 302:cout<<"【雌雄双股剑(2)】"<<endl;break; 65 case 303:cout<<"【青釭剑(2)】"<<endl;break; 66 case 304:cout<<"【青龙偃月刀(3)】"<<endl;break; 67 case 305:cout<<"【丈八蛇矛(3)】"<<endl;break; 68 case 306:cout<<"【贯石斧(3)】"<<endl;break; 69 case 307:cout<<"【方天画戟(4)】"<<endl;break; 70 case 308:cout<<"【麒麟弓(5)】"<<endl;break; 71 case 331:cout<<"【八卦阵】"<<endl;break; 72 case 361:cout<<"【赤兔(-1)】"<<endl;break; 73 case 362:cout<<"【大宛(-1)】"<<endl;break; 74 case 363:cout<<"【紫辛(-1)】"<<endl;break; 75 case 381:cout<<"【爪黄飞电(+1)】"<<endl;break; 76 case 382:cout<<"【的卢(+1)】"<<endl;break; 77 case 383:cout<<"【绝影(+1)】"<<endl;break; 78 default:printf("类型参数错误!");break; 79 } 80 } 81 }; 82 void Qishixipai(pai A[2][4][13],pai paidui[104]) 83 { 84 int i,m,x,y,z,a[104]={0}; 85 srand((unsigned)time(NULL)); 86 for(i=1;i<=104;i++) 87 { 88 while(a[m=rand()%104]); 89 a[m]=i; 90 } 91 for(i=0;i<=103;i++) 92 { 93 x=(a[i]-1)/52; 94 y=((a[i]-1)-52*x)/13; 95 z=(a[i]-1)%13; 96 paidui[i]=A[x][y][z]; 97 } 98 } 99 void Xipai(pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 100 { 101 int i,m,a[104]={0}; 102 srand((unsigned)time(NULL)); 103 for(i=1;i<=(*qipaishu);i++) 104 { 105 while(a[m=rand()%(*qipaishu)]); 106 a[m]=i; 107 } 108 for(i=0;i<=((*qipaishu)-1);i++) 109 { 110 paidui[i]=qipaidui[a[i]]; 111 qipaidui[a[i]].leixing=-1; 112 (*paiduishu)++; 113 (*qipaishu)--; 114 } 115 for(i=(*paiduishu);i<=103;i++)paidui[i].leixing=-1; 116 } 117 pai Mo1pai(pai A[104],int *x,pai B[104],int*y,int *b) 118 { 119 pai p; 120 if((*x)==0)Xipai(A,x,B,y); 121 else if((*x)<0)printf("摸牌参数错误!"); 122 else; 123 p=A[104-(*x)]; 124 (*x)--; 125 (*b)++; 126 return(p); 127 } 128 struct wujiang 129 { 130 char name; 131 int tili; 132 int tilishangxian; 133 int shoupaishangxian; 134 int huihekaishi; 135 int panding; 136 int mopai; 137 int chupai; 138 int qipai; 139 int huihejieshu; 140 int juese; 141 pai shoupai[20]; 142 int shoupaishu; 143 pai zhuangbei[4]; 144 int zhuangbeishu; 145 pai pandingpai[3]; 146 int pandingshu; 147 int juli[1]; 148 void Kanshoupai() 149 { 150 printf("玩家当前手牌:\n"); 151 if(shoupaishu) 152 { 153 int m; 154 for(m=0;m<=(shoupaishu-1);m++) 155 { 156 printf("%d ",m); 157 (shoupai[m]).Kanpai(); 158 } 159 } 160 else printf("空城!\n"); 161 printf("\n"); 162 } 163 void Kanzhuangbei() 164 { 165 if(juese)printf("玩家"); 166 else printf("电脑"); 167 printf("当前装备:\n"); 168 printf("0 武器: "); 169 if((zhuangbei[0]).leixing==-1)printf("空\n"); 170 else (zhuangbei[0]).Kanpai(); 171 printf("1 防具: "); 172 if((zhuangbei[1]).leixing==-1)printf("空\n"); 173 else (zhuangbei[1]).Kanpai(); 174 printf("2 进攻马: "); 175 if((zhuangbei[2]).leixing==-1)printf("空\n"); 176 else (zhuangbei[2]).Kanpai(); 177 printf("3 防御马: "); 178 if((zhuangbei[3]).leixing==-1)printf("空\n"); 179 else (zhuangbei[3]).Kanpai(); 180 printf("\n"); 181 } 182 void Kanpandingpai() 183 { 184 if(juese)printf("玩家"); 185 else printf("电脑"); 186 printf("当前判定区:\n"); 187 if((pandingpai[0]).leixing==-1)printf("空\n"); 188 else 189 { 190 printf("0 "); 191 (pandingpai[0]).Kanpai(); 192 if((pandingpai[1]).leixing==-1); 193 else 194 { 195 printf("1 "); 196 (pandingpai[1]).Kanpai(); 197 if((pandingpai[2]).leixing==-1); 198 else 199 { 200 printf("2 "); 201 (pandingpai[2]).Kanpai(); 202 } 203 } 204 } 205 } 206 }; 207 void Mopai(int*shoupaishu,pai shoupai[20],pai A[104],int *x,pai B[104],int*y,int juese) 208 { 209 if(juese)printf("玩家从牌堆摸2张牌\n"); 210 else printf("电脑从牌堆摸2张牌\n"); 211 pai p; 212 p=Mo1pai(A,x,B,y,shoupaishu); 213 shoupai[*shoupaishu-1]=p; 214 pai q; 215 q=Mo1pai(A,x,B,y,shoupaishu); 216 shoupai[*shoupaishu-1]=q; 217 int m; 218 if(juese) 219 { 220 printf("玩家当前手牌:\n"); 221 for(m=0;m<=(*shoupaishu-1);m++) 222 { 223 printf("%d ",m); 224 (shoupai[m]).Kanpai(); 225 } 226 } 227 printf("牌堆还剩%d张牌!\n\n",*x); 228 } 229 void Qishishoupai(wujiang *w,pai A[104],int *x,pai B[104],int*y) 230 { 231 pai a; 232 a=Mo1pai(A,x,B,y,&((*w).shoupaishu)); 233 (*w).shoupai[(*w).shoupaishu-1]=a; 234 pai b; 235 b=Mo1pai(A,x,B,y,&((*w).shoupaishu)); 236 (*w).shoupai[(*w).shoupaishu-1]=b; 237 pai c; 238 c=Mo1pai(A,x,B,y,&((*w).shoupaishu)); 239 (*w).shoupai[(*w).shoupaishu-1]=c; 240 pai d; 241 d=Mo1pai(A,x,B,y,&((*w).shoupaishu)); 242 (*w).shoupai[(*w).shoupaishu-1]=d; 243 int m; 244 if((*w).juese)printf("玩家从牌堆摸4张牌\n"); 245 else printf("电脑从牌堆摸4张牌\n"); 246 if((*w).juese) 247 { 248 printf("玩家当前手牌:\n"); 249 for(m=0;m<=((*w).shoupaishu-1);m++) 250 { 251 printf("%d ",m); 252 ((*w).shoupai[m]).Kanpai(); 253 } 254 } 255 printf("牌堆还剩%d张牌!\n\n",*x); 256 } 257 void Panding(pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 258 { 259 paidui[*paiduishu].Kanpai(); 260 qipaidui[*qipaishu]=paidui[*paiduishu]; 261 (*paiduishu)--; 262 (*qipaishu)++; 263 } 264 pai Zhangba(wujiang*w,pai qipaidui[104],int*qipaishu) 265 { 266 int x,y; 267 pai p; 268 for(;;) 269 { 270 int i,j; 271 printf("请输入任意两张手牌之前的编号,以空格隔开,以回车结束!\n"); 272 scanf("%d",&x); 273 scanf("%d",&y); 274 if((x>=0)&&(x<(*w).shoupaishu)&&(y>=0)&&(y<(*w).shoupaishu-1)) 275 { 276 switch((((*w).shoupai[x].huase)%2)+(((*w).shoupai[y].huase)%2)) 277 { 278 case 0:p.yanse=0;break; 279 case 2:p.yanse=1;break; 280 case 1:p.yanse=2;break; 281 default:printf("【丈八蛇矛】函数参数错误!\n"); 282 } 283 qipaidui[*qipaishu]=(*w).shoupai[x]; 284 (*w).shoupai[x].leixing=-1; 285 ((*w).shoupaishu)--; 286 (*qipaishu)++; 287 qipaidui[*qipaishu]=(*w).shoupai[y]; 288 (*w).shoupai[y].leixing=-1; 289 ((*w).shoupaishu)--; 290 (*qipaishu)++; printf("弃牌数:%d",*qipaishu); 291 for(i=0;i<=(((*w).shoupaishu)+1);i++) 292 { 293 if((*w).shoupai[i].leixing==-1) 294 { 295 for(j=i+1;j<=(((*w).shoupaishu)+2);j++) 296 (*w).shoupai[j-1]=(*w).shoupai[j]; 297 i--; 298 } 299 } 300 printf("玩家把:\n"); 301 qipaidui[(*qipaishu)-2].Kanpai(); 302 qipaidui[(*qipaishu)-1].Kanpai(); 303 printf("当作一张"); 304 switch(p.yanse) 305 { 306 case 0:printf("黑色");break; 307 case 2:printf("红色");break; 308 case 1:printf("无色");break; 309 default:printf("绿色");break; 310 } 311 printf("无点数的【杀】"); 312 p.dianshu=-1; 313 p.leixing=101; 314 return p; 315 break; 316 } 317 printf("你将两张空气当作一张空气属性的【杀】使用或打出!\n"); 318 } 319 } 320 int Xuanpai(wujiang*w,int t) 321 { 322 int x; 323 if((*w).juese) 324 { 325 for(;;) 326 { 327 printf("出牌请输入手牌之前的编号,以回车结束!\n如果你想结束出牌阶段,请输入“-1”,以回车结束!\n"); 328 scanf("%d",&x); 329 if((x>=-1&&x<((*w).shoupaishu))||((x==100)&&((*w).zhuangbei[0].leixing==305))) 330 { 331 return x; 332 break; 333 } 334 printf("你打出了一张空气!\n"); 335 } 336 } 337 else return t; 338 } 339 pai Panpai(wujiang*w1,int*sha,int y,pai qipaidui[104],int*qipaishu) 340 { 341 pai p,q; 342 p.leixing=0; 343 q.leixing=-1; 344 if(y==-1)return q; 345 else 346 { 347 if(y==100) 348 { 349 if((*sha)>0) 350 { 351 q=Zhangba(w1,qipaidui,qipaishu); 352 printf("使用!\n"); 353 return q; 354 } 355 else 356 { 357 printf("当前回合使用【杀】的次数已用尽,你也不能使用【丈八蛇矛】效果!\n"); 358 return p; 359 } 360 } 361 switch((*w1).shoupai[y].leixing) 362 { 363 case 101: 364 if(((*sha)>0)||((*w1).zhuangbei[0].leixing==301)) 365 { 366 if(((*w1).zhuangbei[0].leixing==301))printf("武器【诸葛连弩】效果被触发!\n"); 367 return (*w1).shoupai[y]; 368 break; 369 } 370 else 371 { 372 if((*w1).juese)printf("当前回合使用【杀】的次数已用尽,你不能使用【杀】!\n"); 373 return p;break; 374 } 375 case 102: 376 if((*w1).juese) 377 printf("当前不需要响应任何操作,你不能主动打出【闪】!\n"); 378 return p;break; 379 case 103: 380 if(((*w1).tili)<((*w1).tilishangxian)) 381 { 382 return (*w1).shoupai[y]; 383 break; 384 } 385 else 386 { 387 if((*w1).juese) 388 printf("你并未受伤,不能对自己使用【桃】!\n"); 389 } 390 return p;break; 391 case 210: 392 if((*w1).juese) 393 printf("当前不需要响应任何锦囊,你不能主动打出【无懈可击】!\n"); 394 return p;break; 395 case 201: 396 case 202: 397 case 203: 398 case 204: 399 case 205: 400 case 206: 401 case 207: 402 case 208: 403 case 209: 404 case 251: 405 case 252: 406 case 301: 407 case 302: 408 case 303: 409 case 304: 410 case 305: 411 case 306: 412 case 307: 413 case 308: 414 case 331: 415 case 361: 416 case 362: 417 case 363: 418 case 381: 419 case 382: 420 case 383:return (*w1).shoupai[y];break; 421 default:printf("手牌类型参数错误!\n");return p;break; 422 } 423 } 424 } 425 int Mubiao(pai p,wujiang *w1,wujiang *w2,int*sha) 426 { 427 int x; 428 switch(p.leixing) 429 { 430 case 101: 431 if((*w1).juese) 432 { 433 printf("请选择【杀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 434 scanf("%d",&x); 435 if(x==0) 436 { 437 if((*w1).zhuangbei[0].changdu>=(*w1).juli[0]) 438 { 439 (*sha)--; 440 return((*w2).juese); 441 } 442 else 443 { 444 printf("武器长度不够!\n"); 445 return -2; 446 } 447 } 448 else 449 { 450 printf("目标错误!\n"); 451 return -2; 452 } 453 } 454 else 455 { 456 if((*w1).zhuangbei[0].changdu>=(*w1).juli[0]) 457 { 458 (*sha)--; 459 return((*w2).juese); 460 } 461 else return -2; 462 } 463 break; 464 case 103:return((*w1).juese);break; 465 case 201: 466 if((*w1).juese) 467 { 468 printf("请选择【过河拆桥】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 469 scanf("%d",&x); 470 if(x==0) 471 { 472 if((*w2).shoupaishu||(*w2).zhuangbeishu||(*w2).pandingshu)return((*w2).juese); 473 else 474 { 475 printf("目标没有牌!\n"); 476 return -2; 477 } 478 } 479 else 480 { 481 printf("目标错误!\n"); 482 return -2; 483 } 484 } 485 else return((*w2).juese); 486 break; 487 case 202: 488 if((*w1).juese) 489 { 490 printf("请选择【顺手牵羊】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 491 scanf("%d",&x); 492 if(x==0) 493 { 494 if(((*w2).shoupaishu||(*w2).zhuangbeishu||(*w2).pandingshu)&&((*w1).juli[0]<=1))return((*w2).juese); 495 else 496 { 497 printf("目标没有牌!\n"); 498 return -2; 499 } 500 } 501 else 502 { 503 printf("目标错误!\n"); 504 return -2; 505 } 506 } 507 else 508 { 509 if((*w1).juli[0]<=1)return((*w2).juese); 510 else return -2; 511 } 512 break; 513 case 203: 514 return((*w1).juese);break; 515 case 204: 516 if((*w1).juese) 517 { 518 printf("请选择【决斗】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 519 scanf("%d",&x); 520 if(x==0)return((*w2).juese); 521 else 522 { 523 printf("目标错误!\n"); 524 return -2; 525 } 526 } 527 else return((*w2).juese); 528 break; 529 case 205: 530 int y; 531 if((*w1).juese) 532 { 533 printf("请选择【借刀杀人】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 534 scanf("%d",&x); 535 if(x!=0) 536 { 537 printf("目标错误!\n"); 538 return -2; 539 } 540 else 541 { 542 if(((*w2).zhuangbei[0]).leixing<=300||((*w2).zhuangbei[0]).leixing>=331) 543 { 544 printf("目标装备区里没有武器!\n"); 545 return -2; 546 } 547 else 548 { 549 printf("请选择【杀】的目标!\n提示:【杀】的目标必须在【借刀杀人】的目标的攻击范围之内!\n输入目标前的编号,以回车结束!\n0 玩家\n"); 550 scanf("%d",&y); 551 if(y!=0) 552 { 553 printf("目标错误!\n"); 554 return -2; 555 } 556 else 557 { 558 if(((*w2).zhuangbei[0].changdu)<(*w2).juli[0]) 559 { 560 printf("武器距离不够!\n"); 561 return -2; 562 } 563 else 564 return((*w2).juese); 565 } 566 } 567 } 568 } 569 else 570 { 571 if(((*w2).zhuangbei[0]).leixing<=300||((*w2).zhuangbei[0]).leixing>=331)return -2; 572 else 573 { 574 if(((*w2).zhuangbei[0].changdu)<(*w2).juli[0])return -2; 575 else return((*w2).juese); 576 } 577 } 578 break; 579 case 206: 580 case 207:return 99;break; 581 case 208: 582 case 209:return 100;break; 583 case 251: 584 if((*w1).juese) 585 { 586 printf("请选择【乐不思蜀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n"); 587 scanf("%d",&x); 588 if(x==0) 589 { 590 int i; 591 for(i=0;i<=2;i++) 592 { 593 if((*w2).pandingpai[i].leixing==251) 594 i=-1; 595 break; 596 } 597 if(i==-1) 598 { 599 printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n"); 600 return -2; 601 } 602 else return((*w2).juese); 603 } 604 else 605 { 606 printf("目标错误!\n"); 607 return -2; 608 } 609 } 610 else 611 { 612 int i; 613 for(i=0;i<=2;i++) 614 { 615 if((*w2).pandingpai[i].leixing==251) 616 i=-1; 617 break; 618 } 619 if(i==-1)return -2; 620 else return((*w2).juese); 621 } 622 break; 623 case 252: 624 int i; 625 for(i=0;i<=2;i++) 626 { 627 if((*w1).pandingpai[i].leixing==252) 628 i=-1; 629 break; 630 } 631 if(i==-1) 632 { 633 if((*w1).juese)printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n"); 634 return -2; 635 } 636 else return ((*w1).juese); 637 break; 638 case 301: 639 case 302: 640 case 303: 641 case 304: 642 case 305: 643 case 306: 644 case 307: 645 case 308: 646 case 331: 647 case 361: 648 case 362: 649 case 363: 650 case 381: 651 case 382: 652 case 383:return((*w1).juese);break; 653 default:return -2;break; 654 } 655 } 656 void Da1pai(wujiang *w1,wujiang*w2,pai qipaidui[104],int *qipaishu,int x) 657 { 658 int i; 659 if((x<0||x>=((*w1).shoupaishu))&&x!=100) 660 printf("你的牌呢?!\n"); 661 else 662 { 663 switch(((*w1).shoupai)[x].leixing) 664 { 665 case 101: 666 case 102: 667 case 103: 668 case 201: 669 case 202: 670 case 203: 671 case 204: 672 case 205: 673 case 206: 674 case 207: 675 case 208: 676 case 209: 677 case 210: 678 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 679 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 680 ((*w1).shoupaishu)--; 681 (*qipaishu)++; 682 break; 683 case 251: 684 for(i=1;i>=0;i--)(*w2).pandingpai[i+1]=(*w2).pandingpai[i]; 685 (*w2).pandingpai[0]=(*w1).shoupai[x]; 686 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 687 ((*w1).shoupaishu)--; 688 ((*w2).pandingshu)++; 689 break; 690 case 252: 691 for(i=1;i>=0;i--)(*w1).pandingpai[i+1]=(*w1).pandingpai[i]; 692 (*w1).pandingpai[0]=(*w1).shoupai[x]; 693 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 694 ((*w1).shoupaishu)--; 695 ((*w1).pandingshu)++; 696 break; 697 case 301: 698 case 302: 699 case 303: 700 case 304: 701 case 305: 702 case 306: 703 case 307: 704 case 308: 705 if((*w1).zhuangbei[0].leixing==-1)((*w1).zhuangbeishu)++; 706 else 707 { 708 qipaidui[*qipaishu]=((*w1).zhuangbei)[0]; 709 (*qipaishu)++; 710 } 711 (*w1).zhuangbei[0]=(*w1).shoupai[x]; 712 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 713 ((*w1).shoupaishu)--; 714 break; 715 case 331: 716 if((*w1).zhuangbei[1].leixing==-1)((*w1).zhuangbeishu)++; 717 else 718 { 719 qipaidui[*qipaishu]=((*w1).zhuangbei)[1]; 720 (*qipaishu)++; 721 } 722 (*w1).zhuangbei[1]=(*w1).shoupai[x]; 723 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 724 ((*w1).shoupaishu)--; 725 break; 726 case 361: 727 case 362: 728 case 363: 729 if((*w1).zhuangbei[2].leixing==-1)((*w1).zhuangbeishu)++; 730 else 731 { 732 qipaidui[*qipaishu]=((*w1).zhuangbei)[2]; 733 (*qipaishu)++; 734 } 735 (*w1).zhuangbei[2]=(*w1).shoupai[x]; 736 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 737 ((*w1).shoupaishu)--; 738 break; 739 case 381: 740 case 382: 741 case 383: 742 if((*w1).zhuangbei[3].leixing==-1)((*w1).zhuangbeishu)++; 743 else 744 { 745 qipaidui[*qipaishu]=((*w1).zhuangbei)[3]; 746 (*qipaishu)++; 747 } 748 (*w1).zhuangbei[3]=(*w1).shoupai[x]; 749 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 750 ((*w1).shoupaishu)--; 751 break; 752 default:break; 753 } 754 } 755 } 756 void Miaoshu(pai p,int juese,int duixiang) 757 { 758 if(juese==0)printf("电脑"); 759 else if(juese==1)printf("玩家"); 760 else printf("角色参数错误!\n"); 761 if(p.leixing<=300&&p.leixing>100) 762 { 763 switch(duixiang) 764 { 765 case -1:printf("打出");break; 766 case 0:printf("对电脑使用");break; 767 case 1:printf("对玩家使用");break; 768 case 99:printf("使用");break; 769 case 100:printf("对所有人使用");break; 770 default:printf("对象参数错误\n");break; 771 } 772 } 773 else if(p.leixing>=301&&p.leixing<=400) 774 printf("装备"); 775 else printf("你出的是什么东西?\n"); 776 p.Kanpai(); 777 if(!juese&&(p.leixing==101||p.leixing==204||p.leixing==205||p.leixing==207||p.leixing==208||p.leixing==209))printf("请响应!\n"); 778 } 779 int Wuxie(pai *p,wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu,int a) 780 { 781 int x; 782 if((*w1).juese) 783 { 784 printf("是否使用【无懈可击】响应?\n\n"); 785 for(;;) 786 { 787 (*w1).Kanshoupai(); 788 printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n"); 789 scanf("%d",&x); 790 if(x==-1) 791 { 792 for(x=0;x<((*w2).shoupaishu);x++) 793 { 794 if((*w2).shoupai[x].leixing==210) 795 { 796 printf("电脑使用"); 797 ((*w2).shoupai)[x].Kanpai(); 798 printf("对象是"); 799 (*p).Kanpai(); 800 (*p)=((*w2).shoupai)[x]; 801 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 802 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 803 ((*w2).shoupaishu)--; 804 (*qipaishu)++; 805 a++; 806 break; 807 } 808 } 809 break; 810 } 811 else if((*w1).shoupai[x].leixing==210) 812 { 813 printf("玩家使用"); 814 ((*w1).shoupai)[x].Kanpai(); 815 printf("对象是"); 816 (*p).Kanpai(); 817 (*p)=((*w1).shoupai)[x]; 818 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 819 for(int i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 820 ((*w1).shoupaishu)--; 821 (*qipaishu)++; 822 (*w1).Kanshoupai(); 823 a++; 824 break; 825 } 826 else printf("你确定你使用的是【无懈可击】?\n"); 827 } 828 } 829 else 830 { 831 printf("是否使用【无懈可击】响应?\n"); 832 for(;;) 833 { 834 (*w2).Kanshoupai(); 835 printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n"); 836 scanf("%d",&x); 837 if(x==-1)break; 838 else if((*w2).shoupai[x].leixing==210) 839 { 840 printf("玩家使用"); 841 ((*w2).shoupai)[x].Kanpai(); 842 printf("对象是"); 843 (*p).Kanpai(); 844 (*p)=((*w2).shoupai)[x]; 845 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 846 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 847 ((*w2).shoupaishu)--; 848 (*qipaishu)++; 849 (*w2).Kanshoupai(); 850 a++; 851 break; 852 } 853 else printf("你确定你使用的是【无懈可击】?\n"); 854 } 855 } 856 return a; 857 } 858 int Qiutao(wujiang*w,pai qipaidui[104],int*qipaishu) 859 { 860 int x; 861 if((*w).juese) 862 { 863 for(;;) 864 { 865 printf("如果要使用【桃】请输入手牌之前的编号,不需要请输入“-1”,以回车结束!\n"); 866 scanf("%d",&x); 867 if(x==-1) 868 { 869 return -1; 870 break; 871 } 872 else if((*w).shoupai[x].leixing==103) 873 { 874 qipaidui[*qipaishu]=((*w).shoupai)[x]; 875 for(int i=x+1;i<=((*w).shoupaishu);i++)((*w).shoupai)[i-1]=((*w).shoupai)[i]; 876 ((*w).shoupaishu)--; 877 (*qipaishu)++; 878 return 0; 879 break; 880 } 881 else printf("你确定你使用的是【桃】?\n"); 882 } 883 } 884 else 885 { 886 for(x=0;x<((*w).shoupaishu);x++) 887 { 888 if((*w).shoupai[x].leixing==103) 889 { 890 qipaidui[*qipaishu]=((*w).shoupai)[x]; 891 for(int i=x+1;i<=((*w).shoupaishu);i++)((*w).shoupai)[i-1]=((*w).shoupai)[i]; 892 ((*w).shoupaishu)--; 893 (*qipaishu)++; 894 return 0; 895 break; 896 } 897 } 898 return -1; 899 } 900 } 901 int Binsi(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu) 902 { 903 if(((*w2).tili)>0)return 0; 904 else 905 { 906 int i; 907 if((*w1).juese) 908 { 909 for(;;) 910 { 911 printf("电脑濒死,是否使用【桃】?\n"); 912 i=Qiutao(w1,qipaidui,qipaishu); 913 if(i==0)((*w2).tili)++; 914 if((i==-1)||((*w2).tili>0))break; 915 } 916 if((*w2).tili>0)return 0; 917 else 918 { 919 for(;;) 920 { 921 i=Qiutao(w2,qipaidui,qipaishu); 922 if(i==0)((*w2).tili)++; 923 if((i==-1)||((*w2).tili>0))break; 924 } 925 if((*w2).tili>0)return 0; 926 else return -1; 927 } 928 } 929 else 930 { 931 for(;;) 932 { 933 printf("玩家濒死,是否使用【桃】?\n"); 934 i=Qiutao(w2,qipaidui,qipaishu); 935 if(i==0)((*w2).tili)++; 936 if((i==-1)||((*w2).tili>0))break; 937 } 938 if((*w2).tili>0)return 0; 939 else return -1; 940 } 941 } 942 } 943 int Shan(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 944 { 945 int x; 946 if((*w2).juese) 947 { 948 if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing!=303)) 949 { 950 for(;;) 951 { 952 int m; 953 printf("是否发动【八卦阵】防具效果?\n0 否\n1 是\n请输入选项之前的编号,以回车结束!\n"); 954 scanf("%d",&m); 955 if(m==1) 956 { 957 Panding(paidui,paiduishu,qipaidui,qipaishu); 958 if(qipaidui[(*qipaishu)-1].huase%2) 959 { 960 printf("【八卦阵】判定成功!\n"); 961 return 0; 962 } 963 } 964 else if(m==0) 965 { 966 printf("【八卦阵】判定失败!\n"); 967 break; 968 } 969 else printf("你确定你输入的是“0”或“1”?\n"); 970 } 971 } 972 else if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing==303))printf("【青釭剑】锁定技被触发!\n"); 973 for(;;) 974 { 975 printf("请输入手牌之前的编号,或者输入“-1”放弃打出【闪】,以回车结束!\n"); 976 scanf("%d",&x); 977 if(x==-1) 978 { 979 return -1; 980 break; 981 } 982 else if((*w2).shoupai[x].leixing==102) 983 { 984 printf("玩家打出"); 985 ((*w2).shoupai)[x].Kanpai(); 986 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 987 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 988 ((*w2).shoupaishu)--; 989 (*qipaishu)++; 990 return 0; 991 break; 992 } 993 else printf("你确定你打出的是【闪】?\n"); 994 } 995 } 996 else 997 { 998 if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing!=303)) 999 { 1000 Panding(paidui,paiduishu,qipaidui,qipaishu); 1001 if(qipaidui[(*qipaishu)-1].huase%2) 1002 { 1003 printf("【八卦阵】判定成功!\n"); 1004 return 0; 1005 } 1006 else printf("【八卦阵】判定失败!\n"); 1007 } 1008 else if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing==303))printf("【青釭剑】锁定技被触发!\n"); 1009 int i; 1010 for(x=0;x<((*w2).shoupaishu);x++) 1011 { 1012 if((*w2).shoupai[x].leixing==102) 1013 { 1014 printf("电脑打出"); 1015 ((*w2).shoupai)[x].Kanpai(); 1016 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1017 for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1018 ((*w2).shoupaishu)--; 1019 (*qipaishu)++; 1020 return 0; 1021 break; 1022 } 1023 } 1024 return -1; 1025 } 1026 } 1027 int Sha(wujiang *w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 1028 { 1029 int x; 1030 if((*w2).juese) 1031 { 1032 printf("请打出【闪】响应【杀】!否则你将受到1点伤害!\n"); 1033 x=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1034 if(x==-1) 1035 { 1036 int i; 1037 ((*w2).tili)--; 1038 printf("电脑对玩家造成1点伤害!\n"); 1039 i=Binsi(w1,w2,qipaidui,qipaishu); 1040 return i; 1041 } 1042 else if(x==0&&((*w1).zhuangbei[0].leixing==306)) 1043 { 1044 int i; 1045 if(((*w1).shoupaishu)>=2) 1046 { 1047 printf("电脑弃掉:\n"); 1048 ((*w1).shoupai)[0].Kanpai(); 1049 qipaidui[*qipaishu]=((*w1).shoupai)[0]; 1050 for(i=1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1051 ((*w1).shoupaishu)--; 1052 (*qipaishu)++; 1053 ((*w1).shoupai)[0].Kanpai(); 1054 qipaidui[*qipaishu]=((*w1).shoupai)[0]; 1055 for(i=1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1056 ((*w1).shoupaishu)--; 1057 (*qipaishu)++; 1058 printf("发动【贯石斧】武器效果使【杀】造成伤害!\n"); 1059 ((*w2).tili)--; 1060 i=Binsi(w1,w2,qipaidui,qipaishu); 1061 return i; 1062 } 1063 else return 0; 1064 } 1065 else if(x==0&&((*w1).zhuangbei[0].leixing==304)) 1066 { 1067 int i; 1068 for(x=0;x<((*w1).shoupaishu);x++) 1069 { 1070 if((*w1).shoupai[x].leixing==101) 1071 { 1072 printf("电脑发动【青龙偃月刀】效果对玩家使用"); 1073 ((*w1).shoupai)[x].Kanpai(); 1074 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 1075 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1076 ((*w1).shoupaishu)--; 1077 (*qipaishu)++; 1078 i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1079 return i; 1080 break; 1081 } 1082 } 1083 return 0; 1084 } 1085 } 1086 else//往上是玩家被使用【杀】 往下是电脑被使用【杀】 1087 { 1088 x=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1089 if(x==-1) 1090 { 1091 if((*w1).zhuangbei[0].leixing==308) 1092 { 1093 for(;;) 1094 { 1095 printf("是否发动【麒麟弓】武器效果?\n0 否\n1 是\n"); 1096 scanf("%d",&x); 1097 if(x==1) 1098 { 1099 if(((*w2).zhuangbei[2].leixing==-1)&&((*w2).zhuangbei[3].leixing==-1)) 1100 { 1101 printf("电脑根本没有马,射你妹的马啊!\n"); 1102 break; 1103 } 1104 else 1105 { 1106 for(;;) 1107 { 1108 printf("0 "); 1109 ((*w2).zhuangbei[2]).Kanpai(); 1110 printf("1 "); 1111 ((*w2).zhuangbei[3]).Kanpai(); 1112 printf("请选择要弃掉的马,输入之前的编号,以回车结束!\n"); 1113 scanf("%d",&x); 1114 if((x==0)&&((*w2).zhuangbei[2].leixing!=-1)) 1115 { 1116 printf("你弃掉了电脑的"); 1117 ((*w2).zhuangbei)[2].Kanpai(); 1118 qipaidui[*qipaishu]=((*w2).zhuangbei)[2]; 1119 ((*w2).zhuangbeishu)--; 1120 (*qipaishu)++; 1121 ((*w2).zhuangbei)[2].leixing=-1; 1122 ((*w2).juli[0])++; 1123 break; 1124 } 1125 else if((x==1)&&((*w2).zhuangbei[3].leixing!=-1)) 1126 { 1127 printf("你弃掉了电脑的"); 1128 ((*w2).zhuangbei)[3].Kanpai(); 1129 qipaidui[*qipaishu]=((*w2).zhuangbei)[3]; 1130 ((*w2).zhuangbeishu)--; 1131 (*qipaishu)++; 1132 ((*w2).zhuangbei)[3].leixing=-1; 1133 ((*w1).juli[0])--; 1134 break; 1135 } 1136 else printf("射你妹的马!"); 1137 } 1138 break; 1139 } 1140 } 1141 else if(x==0)break; 1142 else printf("键盘上的“0”和“1”被你吃了吗?\n"); 1143 } 1144 } 1145 int i; 1146 ((*w2).tili)--; 1147 printf("玩家对电脑造成1点伤害!\n"); 1148 i=Binsi(w1,w2,qipaidui,qipaishu); 1149 return i; 1150 } 1151 else if(x==0&&((*w1).zhuangbei[0].leixing==306)) 1152 { 1153 for(;;) 1154 { 1155 printf("是否发动【贯石斧】武器效果?\n0 否\n1 是\n"); 1156 scanf("%d",&x); 1157 if(x==1) 1158 { 1159 int i; 1160 if((*w1).shoupaishu+(*w1).zhuangbeishu<=2) 1161 { 1162 printf("你除了【贯石斧】以外连2张牌都没有,发动你妹的效果!\n"); 1163 break; 1164 } 1165 else 1166 { 1167 printf("请分别弃掉两张牌!\n"); 1168 for(i=0;i<=2;i++) 1169 { 1170 for(;;) 1171 { 1172 printf("请选择区域:\n0 手牌\n1 装备\n"); 1173 scanf("%d",&x); 1174 if(x==0&&((*w1).shoupaishu==0))printf("你根本没有手牌,弃你妹啊!\n"); 1175 else if(x==1&&((*w1).zhuangbeishu==1))printf("你根本没有别的装备,弃你妹啊!\n"); 1176 else if(x>=0&&x<=1)break; 1177 else printf("键盘上的“0”和“1”被你吃了吗?\n"); 1178 } 1179 if(x==0) 1180 { 1181 for(;;) 1182 { 1183 (*w1).Kanshoupai(); 1184 printf("弃牌请输入手牌之前的编号,以回车结束!\n"); 1185 scanf("%d",&x); 1186 if(x>=0&&x<((*w1).shoupaishu))break; 1187 else printf("弃你妹的手牌!\n"); 1188 } 1189 printf("你弃掉了"); 1190 ((*w1).shoupai)[x].Kanpai(); 1191 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 1192 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1193 ((*w1).shoupaishu)--; 1194 (*qipaishu)++; 1195 } 1196 else 1197 { 1198 for(;;) 1199 { 1200 (*w1).Kanzhuangbei(); 1201 printf("请输入装备之前的编号,以回车键结束!\n"); 1202 scanf("%d",&x); 1203 if((((*w1).zhuangbei[x]).leixing!=-1)&&(x>=0)&&(x<=3)) 1204 { 1205 printf("你弃掉了"); 1206 ((*w1).zhuangbei)[x].Kanpai(); 1207 qipaidui[*qipaishu]=((*w1).zhuangbei)[x]; 1208 ((*w1).zhuangbeishu)--; 1209 (*qipaishu)++; 1210 ((*w1).zhuangbei)[x].leixing=-1; 1211 break; 1212 } 1213 else printf("弃你妹的装备!\n"); 1214 } 1215 } 1216 } 1217 } 1218 printf("玩家发动【贯石斧】武器效果使【杀】造成伤害!\n"); 1219 ((*w2).tili)--; 1220 i=Binsi(w1,w2,qipaidui,qipaishu); 1221 return i; 1222 break; 1223 } 1224 else if(x==0)break; 1225 else printf("键盘上的“0”和“1”被你吃了吗?\n"); 1226 } 1227 } 1228 else if(x==0&&((*w1).zhuangbei[0].leixing==304)) 1229 { 1230 for(;;) 1231 { 1232 printf("是否发动【青龙偃月刀】武器效果?\n0 否\n1 是\n"); 1233 scanf("%d",&x); 1234 if(x==1) 1235 { 1236 for(;;) 1237 { 1238 printf("请对电脑使用一张【杀】!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n"); 1239 (*w1).Kanshoupai(); 1240 scanf("%d",&x); 1241 if(x==-1) 1242 { 1243 return 0; 1244 break; 1245 } 1246 else if((*w1).shoupai[x].leixing==101) 1247 { 1248 int i; 1249 printf("玩家对电脑使用"); 1250 ((*w1).shoupai)[x].Kanpai(); 1251 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 1252 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1253 ((*w1).shoupaishu)--; 1254 (*qipaishu)++; 1255 i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1256 return i; 1257 break; 1258 } 1259 else printf("你确定你打出的是【杀】?\n"); 1260 } 1261 } 1262 else if(x==0) 1263 { 1264 return 0; 1265 break; 1266 } 1267 else printf("你确定你输入的是“0”或“1”?\n"); 1268 } 1269 } 1270 else return 0; 1271 } 1272 return 0; 1273 } 1274 void Tao(wujiang*w1)//【桃】函数 1275 { 1276 ((*w1).tili)++; 1277 if((*w1).juese)printf("玩家"); 1278 else printf("电脑"); 1279 printf("恢复了1点体力!\n"); 1280 if(((*w1).tili)>((*w1).tilishangxian))printf("你被撑死了!\n"); 1281 } 1282 void Chai(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu) 1283 { 1284 int i,x,y; 1285 if((*w1).juese) 1286 { 1287 for(;;) 1288 { 1289 if((*w2).shoupaishu+(*w2).zhuangbeishu+(*w2).pandingshu==0) 1290 { 1291 printf("对方空城,拆你妹啊!\n"); 1292 break; 1293 } 1294 else 1295 { 1296 printf("请选择想拆的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n"); 1297 scanf("%d",&x); 1298 if(x==0&&((*w2).shoupaishu==0))printf("你拆掉了一张空气!\n"); 1299 else if(x==1&&((*w2).zhuangbeishu==0))printf("你拆掉了一张空气!\n"); 1300 else if(x==2&&((*w2).pandingshu==0))printf("你拆掉了一张空气!\n"); 1301 else if(x>=0&&x<=2)break; 1302 else printf("你拆掉了太空区里的一张牌!\n"); 1303 } 1304 } 1305 switch(x) 1306 { 1307 case 0: 1308 srand((unsigned)time(NULL)); 1309 y=rand()%((*w2).shoupaishu); 1310 printf("你弃掉了电脑的"); 1311 ((*w2).shoupai)[y].Kanpai(); 1312 qipaidui[*qipaishu]=((*w2).shoupai)[y]; 1313 for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1314 ((*w2).shoupaishu)--; 1315 (*qipaishu)++; 1316 break; 1317 case 1: 1318 for(;;) 1319 { 1320 (*w2).Kanzhuangbei(); 1321 printf("请输入装备之前的编号,以回车键结束!\n"); 1322 scanf("%d",&y); 1323 if((((*w2).zhuangbei[y]).leixing!=-1)&&(y>=0)&&(y<=3)) 1324 { 1325 printf("你弃掉了电脑的"); 1326 ((*w2).zhuangbei)[y].Kanpai(); 1327 qipaidui[*qipaishu]=((*w2).zhuangbei)[y]; 1328 ((*w2).zhuangbeishu)--; 1329 (*qipaishu)++; 1330 ((*w2).zhuangbei)[y].leixing=-1; 1331 if(!y)((*w2).zhuangbei)[y].changdu=1; 1332 else if(y==2)((*w2).juli[0])++; 1333 else if(y==3)((*w1).juli[0])--; 1334 break; 1335 } 1336 else printf("你弃掉了一张空气!\n"); 1337 } 1338 break; 1339 case 2: 1340 for(;;) 1341 { 1342 (*w2).Kanpandingpai(); 1343 printf("请输入判定牌之前的编号,以回车键结束!\n"); 1344 scanf("%d",&y); 1345 if((*w2).pandingpai[y].leixing!=-1) 1346 { 1347 printf("你弃掉了电脑的"); 1348 ((*w2).pandingpai)[y].Kanpai(); 1349 qipaidui[*qipaishu]=((*w2).pandingpai)[y]; 1350 ((*w2).pandingshu)--; 1351 (*qipaishu)++; 1352 ((*w2).pandingpai)[y].leixing=-1; 1353 break; 1354 } 1355 else printf("你弃掉了一张空气!\n"); 1356 } 1357 break; 1358 default:break; 1359 } 1360 } 1361 else 1362 { 1363 if((*w2).zhuangbeishu) 1364 { 1365 if((*w2).zhuangbei[1].leixing!=-1) 1366 { 1367 printf("电脑弃掉了玩家的"); 1368 ((*w2).zhuangbei)[1].Kanpai(); 1369 qipaidui[*qipaishu]=((*w2).zhuangbei)[1]; 1370 ((*w2).zhuangbeishu)--; 1371 (*qipaishu)++; 1372 ((*w2).zhuangbei)[1].leixing=-1; 1373 } 1374 else if((*w2).zhuangbei[3].leixing!=-1) 1375 { 1376 printf("电脑弃掉了玩家的"); 1377 ((*w2).zhuangbei)[3].Kanpai(); 1378 qipaidui[*qipaishu]=((*w2).zhuangbei)[3]; 1379 ((*w2).zhuangbeishu)--; 1380 (*qipaishu)++; 1381 ((*w2).zhuangbei)[3].leixing=-1; 1382 ((*w1).juli[0])--; 1383 } 1384 else if((*w2).zhuangbei[0].leixing!=-1) 1385 { 1386 printf("电脑弃掉了玩家的"); 1387 ((*w2).zhuangbei)[0].Kanpai(); 1388 qipaidui[*qipaishu]=((*w2).zhuangbei)[0]; 1389 ((*w2).zhuangbeishu)--; 1390 (*qipaishu)++; 1391 ((*w2).zhuangbei)[0].leixing=-1; 1392 ((*w2).zhuangbei)[0].changdu=1; 1393 } 1394 else 1395 { 1396 printf("电脑弃掉了玩家的"); 1397 ((*w2).zhuangbei)[2].Kanpai(); 1398 qipaidui[*qipaishu]=((*w2).zhuangbei)[2]; 1399 ((*w2).zhuangbeishu)--; 1400 (*qipaishu)++; 1401 ((*w2).zhuangbei)[2].leixing=-1; 1402 ((*w2).juli[0])++; 1403 } 1404 } 1405 else 1406 { 1407 srand((unsigned)time(NULL)); 1408 y=rand()%((*w2).shoupaishu); 1409 printf("电脑弃掉了玩家的手牌"); 1410 ((*w2).shoupai)[y].Kanpai(); 1411 qipaidui[*qipaishu]=((*w2).shoupai)[y]; 1412 for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1413 ((*w2).shoupaishu)--; 1414 (*qipaishu)++; 1415 } 1416 } 1417 } 1418 void Qian(wujiang *w1,wujiang *w2) 1419 { 1420 int i,x,y; 1421 if((*w1).juese) 1422 { 1423 for(;;) 1424 { 1425 if((*w2).shoupaishu+(*w2).zhuangbeishu+(*w2).pandingshu==0) 1426 { 1427 printf("对方空城啦!你牵走了一张寂寞!\n"); 1428 break; 1429 } 1430 else 1431 { 1432 printf("请选择想牵的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n"); 1433 scanf("%d",&x); 1434 if(x==0&&((*w2).shoupaishu==0))printf("你牵走了一张空气!\n"); 1435 else if(x==1&&((*w2).zhuangbeishu==0))printf("你牵走了一张空气!\n"); 1436 else if(x==2&&((*w2).pandingshu==0))printf("你牵走了一张空气!\n"); 1437 else if(x>=0&&x<=2)break; 1438 else printf("你牵走了太空区里的一张牌!\n"); 1439 } 1440 } 1441 switch(x) 1442 { 1443 case 0: 1444 srand((unsigned)time(NULL)); 1445 y=rand()%((*w2).shoupaishu); 1446 printf("你牵走了电脑的"); 1447 ((*w2).shoupai)[y].Kanpai(); 1448 (*w1).shoupai[(*w1).shoupaishu]=((*w2).shoupai)[y]; 1449 for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1450 ((*w2).shoupaishu)--; 1451 ((*w1).shoupaishu)++; 1452 break; 1453 case 1: 1454 for(;;) 1455 { 1456 (*w2).Kanzhuangbei(); 1457 printf("请输入装备之前的编号,以回车键结束!\n"); 1458 scanf("%d",&y); 1459 if((((*w2).zhuangbei[y]).leixing!=-1)&&(y>=0)&&(y<=3)) 1460 { 1461 printf("你牵走了电脑的"); 1462 ((*w2).zhuangbei)[y].Kanpai(); 1463 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[y]; 1464 ((*w2).zhuangbeishu)--; 1465 ((*w1).shoupaishu)++; 1466 ((*w2).zhuangbei)[y].leixing=-1; 1467 if(!y)((*w2).zhuangbei[y]).changdu=1; 1468 else if(y==2)((*w2).juli[0])++; 1469 else if(y==3)((*w1).juli[0])--; 1470 break; 1471 } 1472 else printf("你弃掉了一张空气!\n"); 1473 } 1474 break; 1475 case 2: 1476 for(;;) 1477 { 1478 (*w2).Kanpandingpai(); 1479 printf("请输入判定牌之前的编号,以回车键结束!\n"); 1480 scanf("%d",&y); 1481 if((*w2).pandingpai[y].leixing!=-1) 1482 { 1483 printf("你牵走了电脑的"); 1484 ((*w2).pandingpai)[y].Kanpai(); 1485 (*w1).shoupai[(*w1).shoupaishu]=((*w2).pandingpai)[y]; 1486 ((*w2).pandingshu)--; 1487 ((*w1).shoupaishu)++; 1488 ((*w2).pandingpai)[y].leixing=-1; 1489 break; 1490 } 1491 else printf("你牵走了一张空气!\n"); 1492 } 1493 break; 1494 default:break; 1495 } 1496 } 1497 else 1498 { 1499 if((*w2).zhuangbeishu) 1500 { 1501 if((*w2).zhuangbei[1].leixing!=-1) 1502 { 1503 printf("电脑牵走了玩家的"); 1504 ((*w2).zhuangbei)[1].Kanpai(); 1505 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[1]; 1506 ((*w2).zhuangbeishu)--; 1507 ((*w1).shoupaishu)++; 1508 ((*w2).zhuangbei)[1].leixing=-1; 1509 } 1510 else if((*w2).zhuangbei[3].leixing!=-1) 1511 { 1512 printf("电脑牵走了玩家的"); 1513 ((*w2).zhuangbei)[3].Kanpai(); 1514 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[3]; 1515 ((*w2).zhuangbeishu)--; 1516 ((*w1).shoupaishu)++; 1517 ((*w2).zhuangbei)[3].leixing=-1; 1518 ((*w1).juli[0])--; 1519 } 1520 else if((*w2).zhuangbei[0].leixing!=-1) 1521 { 1522 printf("电脑牵走了玩家的"); 1523 ((*w2).zhuangbei)[0].Kanpai(); 1524 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0]; 1525 ((*w2).zhuangbeishu)--; 1526 ((*w1).shoupaishu)++; 1527 ((*w2).zhuangbei)[0].leixing=-1; 1528 ((*w2).zhuangbei)[0].changdu=1; 1529 } 1530 else 1531 { 1532 printf("电脑牵走了玩家的"); 1533 ((*w2).zhuangbei)[2].Kanpai(); 1534 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[2]; 1535 ((*w2).zhuangbeishu)--; 1536 ((*w1).shoupaishu)++; 1537 ((*w2).zhuangbei)[2].leixing=-1; 1538 ((*w2).juli[0])--; 1539 } 1540 } 1541 else 1542 { 1543 srand((unsigned)time(NULL)); 1544 y=rand()%((*w2).shoupaishu); 1545 printf("电脑牵走了玩家的手牌"); 1546 ((*w2).shoupai)[y].Kanpai(); 1547 (*w1).shoupai[(*w1).shoupaishu]=((*w2).shoupai)[y]; 1548 for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1549 ((*w2).shoupaishu)--; 1550 ((*w1).shoupaishu)++; 1551 } 1552 } 1553 } 1554 void Wuzhong(wujiang*w1,pai A[104],int *x,pai B[104],int*y) 1555 { 1556 Mopai(&((*w1).shoupaishu),(*w1).shoupai,A,x,B,y,(*w1).juese); 1557 } 1558 int Juedou(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu) 1559 { 1560 int i,j,x; 1561 if((*w1).juese) 1562 { 1563 for(;;) 1564 { 1565 j=0; 1566 for(x=0;x<((*w2).shoupaishu);x++) 1567 { 1568 if((*w2).shoupai[x].leixing==101) 1569 { 1570 printf("电脑打出"); 1571 ((*w2).shoupai)[x].Kanpai(); 1572 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1573 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1574 ((*w2).shoupaishu)--; 1575 (*qipaishu)++; 1576 j=1; 1577 break; 1578 } 1579 } 1580 if(!j) 1581 { 1582 printf("玩家对电脑造成1点伤害!\n"); 1583 ((*w2).tili)--; 1584 i=Binsi(w1,w2,qipaidui,qipaishu); 1585 return i; 1586 break; 1587 } 1588 j=0; 1589 for(;;) 1590 { 1591 printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n"); 1592 if(((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n"); 1593 (*w1).Kanshoupai(); 1594 scanf("%d",&x); 1595 if(x==-1) 1596 { 1597 int i; 1598 ((*w1).tili)--; 1599 printf("电脑对玩家造成1点伤害!\n"); 1600 i=Binsi(w2,w1,qipaidui,qipaishu); 1601 return i; 1602 break; 1603 } 1604 else if(((*w1).zhuangbei[0].leixing==305)&&x==100) 1605 { 1606 pai p=Zhangba(w1,qipaidui,qipaishu); 1607 p.paifu=-1; 1608 printf("打出!\n"); 1609 j=1; 1610 break; 1611 } 1612 else if((*w1).shoupai[x].leixing==101) 1613 { 1614 printf("玩家打出"); 1615 ((*w1).shoupai)[x].Kanpai(); 1616 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 1617 for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1618 ((*w1).shoupaishu)--; 1619 (*qipaishu)++; 1620 j=1; 1621 break; 1622 } 1623 else printf("你确定你打出的是【杀】?\n"); 1624 } 1625 } 1626 } 1627 else 1628 { 1629 for(;;) 1630 { 1631 j=0; 1632 for(;;) 1633 { 1634 printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n"); 1635 if(((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n"); 1636 (*w2).Kanshoupai(); 1637 scanf("%d",&x); 1638 if(x==-1) 1639 { 1640 int i; 1641 ((*w2).tili)--; 1642 printf("电脑对玩家造成1点伤害!\n"); 1643 i=Binsi(w1,w2,qipaidui,qipaishu); 1644 return i; 1645 break; 1646 } 1647 else if(((*w2).zhuangbei[0].leixing==305)&&x==100) 1648 { 1649 pai p=Zhangba(w2,qipaidui,qipaishu); 1650 p.paifu=-1; 1651 printf("打出!\n"); 1652 j=1; 1653 break; 1654 } 1655 else if((*w2).shoupai[x].leixing==101) 1656 { 1657 printf("玩家打出"); 1658 ((*w2).shoupai)[x].Kanpai(); 1659 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1660 for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1661 ((*w2).shoupaishu)--; 1662 (*qipaishu)++; 1663 j=1; 1664 break; 1665 } 1666 else printf("你确定你打出的是【杀】?\n"); 1667 } 1668 j=0; 1669 for(x=0;x<((*w1).shoupaishu);x++) 1670 { 1671 if((*w1).shoupai[x].leixing==101) 1672 { 1673 printf("电脑打出"); 1674 ((*w1).shoupai)[x].Kanpai(); 1675 qipaidui[*qipaishu]=((*w1).shoupai)[x]; 1676 for(int i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i]; 1677 ((*w1).shoupaishu)--; 1678 (*qipaishu)++; 1679 j=1; 1680 break; 1681 } 1682 } 1683 if(!j) 1684 { 1685 printf("玩家对电脑造成1点伤害!\n"); 1686 ((*w2).tili)--; 1687 i=Binsi(w2,w1,qipaidui,qipaishu); 1688 return i; 1689 break; 1690 } 1691 } 1692 } 1693 } 1694 int Jiedao(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 1695 { 1696 int i,j=0,x; 1697 if((*w1).juese) 1698 { 1699 for(x=0;x<((*w2).shoupaishu);x++) 1700 { 1701 if((*w2).shoupai[x].leixing==101) 1702 { 1703 printf("电脑对玩家使用"); 1704 ((*w2).shoupai)[x].Kanpai(); 1705 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1706 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1707 ((*w2).shoupaishu)--; 1708 (*qipaishu)++; 1709 j=1; 1710 break; 1711 } 1712 } 1713 if(j) 1714 { 1715 i=Sha(w2,w1,paidui,paiduishu,qipaidui,qipaishu); 1716 return i; 1717 printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 1718 } 1719 else 1720 { 1721 printf("电脑放弃使用【杀】,玩家获得电脑的武器"); 1722 (*w2).zhuangbei[0].Kanpai(); 1723 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0]; 1724 ((*w2).zhuangbeishu)--; 1725 ((*w1).shoupaishu)++; 1726 ((*w2).zhuangbei)[0].leixing=-1; 1727 ((*w2).zhuangbei)[0].changdu=1; 1728 (*w1).Kanshoupai(); 1729 return 0; 1730 } 1731 } 1732 else 1733 { 1734 for(;;) 1735 { 1736 printf("请对电脑使用一张【杀】,否则电脑将获得你的武器!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n"); 1737 if(((*w2).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n"); 1738 (*w2).Kanshoupai(); 1739 scanf("%d",&x); 1740 if(x==-1)break; 1741 else if(((*w2).zhuangbei[0].leixing==305)&&x==100) 1742 { 1743 pai p=Zhangba(w2,qipaidui,qipaishu); 1744 p.paifu=-1; 1745 printf("使用!\n"); 1746 j=1; 1747 break; 1748 } 1749 else if((*w2).shoupai[x].leixing==101) 1750 { 1751 printf("玩家对电脑使用"); 1752 ((*w2).shoupai)[x].Kanpai(); 1753 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1754 for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1755 ((*w2).shoupaishu)--; 1756 (*qipaishu)++; 1757 j=1; 1758 break; 1759 } 1760 else printf("你确定你使用的是【杀】?\n"); 1761 } 1762 if(j) 1763 { 1764 i=Sha(w2,w1,paidui,paiduishu,qipaidui,qipaishu); 1765 return i; 1766 printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 1767 } 1768 else 1769 { 1770 printf("玩家放弃使用【杀】,电脑获得玩家的武器"); 1771 ((*w2).zhuangbei)[0].Kanpai(); 1772 (*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0]; 1773 ((*w2).zhuangbeishu)--; 1774 ((*w1).shoupaishu)++; 1775 ((*w2).zhuangbei)[0].leixing=-1; 1776 ((*w2).zhuangbei)[0].changdu=1; 1777 return 0; 1778 } 1779 } 1780 } 1781 void Taoyuan(wujiang*w) 1782 { 1783 if((*w).tili<(*w).tilishangxian) 1784 { 1785 ((*w).tili)++; 1786 if((*w).juese)printf("玩家"); 1787 else printf("电脑"); 1788 printf("恢复1点体力!\n"); 1789 } 1790 } 1791 void Kaipai(pai paidui[104],int* paiduishu,int renshu,pai wugu[10]) 1792 { 1793 int i; 1794 printf("五谷丰登开牌:\n"); 1795 for(i=1;i<=renshu;i++) 1796 { 1797 wugu[i-1]=paidui[104-(*paiduishu)]; 1798 (*paiduishu)--; 1799 printf("%d ",i-1); 1800 wugu[i-1].Kanpai(); 1801 } 1802 } 1803 void Qupai(pai wugu[10],wujiang*w) 1804 { 1805 int i,x; 1806 printf("五谷丰登开牌:\n"); 1807 for(i=0;(wugu[i].leixing)!=-1;i++) 1808 { 1809 printf("%d ",i); 1810 wugu[i].Kanpai(); 1811 } 1812 if((*w).juese) 1813 { 1814 for(;;) 1815 { 1816 printf("请选择你想要的卡牌,输入卡牌之前的编号,以回车结束!\n"); 1817 scanf("%d",&x); 1818 if(wugu[x].leixing!=-1) 1819 { 1820 printf("玩家选择"); 1821 wugu[x].Kanpai(); 1822 (*w).shoupai[(*w).shoupaishu]=wugu[x]; 1823 ((*w).shoupaishu)++; 1824 for(i=x+1;i<=9;i++)wugu[i-1]=wugu[i]; 1825 wugu[9].leixing=-1; 1826 break; 1827 } 1828 printf("你选择了一张空气加入手牌!"); 1829 } 1830 } 1831 else 1832 { 1833 printf("电脑选择"); 1834 wugu[0].Kanpai(); 1835 (*w).shoupai[(*w).shoupaishu]=wugu[0]; 1836 ((*w).shoupaishu)++; 1837 for(i=1;i<=9;i++)wugu[i-1]=wugu[i]; 1838 wugu[9].leixing=-1; 1839 } 1840 } 1841 void Rengpai(pai wugu[10],pai qipaidui[104],int*qipaishu) 1842 { 1843 int i; 1844 for(i=0;wugu[i].leixing!=-1;i++) 1845 { 1846 qipaidui[*qipaishu]=wugu[i]; 1847 (*qipaishu)++; 1848 wugu[i].leixing=-1; 1849 } 1850 } 1851 int Nanman(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu) 1852 { 1853 int i,x; 1854 if((*w1).juese) 1855 { 1856 for(x=0;x<((*w2).shoupaishu);x++) 1857 { 1858 if((*w2).shoupai[x].leixing==101) 1859 { 1860 printf("电脑打出"); 1861 ((*w2).shoupai)[x].Kanpai(); 1862 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1863 for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1864 ((*w2).shoupaishu)--; 1865 (*qipaishu)++; 1866 return 0; 1867 break; 1868 } 1869 } 1870 printf("玩家对电脑造成1点伤害!\n"); 1871 ((*w2).tili)--; 1872 i=Binsi(w1,w2,qipaidui,qipaishu); 1873 return i; 1874 } 1875 else 1876 { 1877 for(;;) 1878 { 1879 printf("请打出一张【杀】响应【南蛮入侵】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n"); 1880 if(((*w2).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n"); 1881 (*w2).Kanshoupai(); 1882 scanf("%d",&x); 1883 if(x==-1) 1884 { 1885 int i; 1886 ((*w2).tili)--; 1887 printf("电脑对玩家造成1点伤害!\n"); 1888 i=Binsi(w1,w2,qipaidui,qipaishu); 1889 return i; 1890 break; 1891 } 1892 else if(((*w2).zhuangbei[0].leixing==305)&&x==100) 1893 { 1894 pai p=Zhangba(w2,qipaidui,qipaishu); 1895 p.paifu=-1; 1896 printf("使用!\n"); 1897 return 0; 1898 break; 1899 } 1900 else if((*w2).shoupai[x].leixing==101) 1901 { 1902 printf("玩家打出"); 1903 ((*w2).shoupai)[x].Kanpai(); 1904 qipaidui[*qipaishu]=((*w2).shoupai)[x]; 1905 for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i]; 1906 ((*w2).shoupaishu)--; 1907 (*qipaishu)++; 1908 return 0; 1909 break; 1910 } 1911 else printf("你确定你打出的是【杀】?\n"); 1912 } 1913 } 1914 } 1915 int Wanjian(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu) 1916 { 1917 int i; 1918 i=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1919 if(i==-1) 1920 { 1921 i=Binsi(w1,w2,qipaidui,qipaishu); 1922 return i; 1923 } 1924 else return 0; 1925 } 1926 int Chupai(pai paidui[104],pai qipaidui[104],int *paiduishu,int*qipaishu,wujiang*w1,wujiang*w2,pai yuanshipaidui[2][4][13]) 1927 { 1928 pai p1; 1929 int sha=1;int y=-1,i,t=((*w1).shoupaishu)-1; 1930 for(;;t--) 1931 { 1932 1933 if((*w1).juese) 1934 { 1935 printf("\n电脑当前手牌数:%d\n",((*w2).shoupaishu)); 1936 (*w2).Kanzhuangbei(); 1937 (*w1).Kanshoupai(); 1938 (*w1).Kanzhuangbei(); 1939 } 1940 int j=0; 1941 if((*w1).juese&&((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n"); 1942 y=Xuanpai(w1,t); 1943 p1=Panpai(w1,&sha,y,qipaidui,qipaishu); 1944 if((p1).leixing==-1)break; 1945 else if((p1).leixing==0)continue; 1946 else 1947 { 1948 int duixiang; 1949 duixiang=Mubiao(p1,w1,w2,&sha); 1950 if(duixiang==-2)continue; 1951 else 1952 { 1953 Da1pai(w1,w2,qipaidui,qipaishu,y); 1954 Miaoshu(p1,((*w1).juese),duixiang); 1955 if(!((*w1).juese)) 1956 { 1957 printf("\n电脑当前手牌数:%d\n",((*w1).shoupaishu)); 1958 (*w1).Kanzhuangbei(); 1959 (*w2).Kanshoupai(); 1960 (*w2).Kanzhuangbei(); 1961 } 1962 switch(p1.leixing) 1963 { 1964 case 101: 1965 i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 1966 if(i==-1){return -1;break;} 1967 if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 1968 else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 1969 break; 1970 case 103: 1971 Tao(w1); 1972 break; 1973 case 201: 1974 for(;;) 1975 { 1976 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 1977 if(!i)break; 1978 j++; 1979 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 1980 if(!i)break; 1981 j++; 1982 } 1983 if(!(j%2))Chai(w1,w2,qipaidui,qipaishu); 1984 else; 1985 if((*w1).juese)(*w1).Kanshoupai(); 1986 break; 1987 case 202: 1988 for(;;) 1989 { 1990 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 1991 if(!i)break; 1992 j++; 1993 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 1994 if(!i)break; 1995 j++; 1996 } 1997 if(!(j%2))Qian(w1,w2); 1998 else; 1999 if((*w1).juese)(*w1).Kanshoupai(); 2000 break; 2001 case 203: 2002 for(;;) 2003 { 2004 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2005 if(!i)break; 2006 j++; 2007 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2008 if(!i)break; 2009 j++; 2010 } 2011 if(!(j%2))Wuzhong(w1,paidui,paiduishu,qipaidui,qipaishu); 2012 else; 2013 break; 2014 case 204: 2015 for(;;) 2016 { 2017 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2018 if(!i)break; 2019 j++; 2020 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2021 if(!i)break; 2022 j++; 2023 } 2024 if(!(j%2)) 2025 { 2026 i=Juedou(w1,w2,qipaidui,qipaishu); 2027 if(i==-1)return -1; 2028 if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 2029 else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 2030 } 2031 break; 2032 case 205: 2033 for(;;) 2034 { 2035 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2036 if(!i)break; 2037 j++; 2038 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2039 if(!i)break; 2040 j++; 2041 } 2042 if(!(j%2)) 2043 { 2044 i=Jiedao(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 2045 if(i==-1)return -1; 2046 if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 2047 else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 2048 } 2049 break; 2050 case 206: 2051 for(;;) 2052 { 2053 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2054 if(!i)break; 2055 j++; 2056 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2057 if(!i)break; 2058 j++; 2059 } 2060 if(!(j%2))Taoyuan(w1); 2061 j=0; 2062 for(;;) 2063 { 2064 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2065 if(!i)break; 2066 j++; 2067 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2068 if(!i)break; 2069 j++; 2070 } 2071 if(!(j%2))Taoyuan(w2); 2072 break; 2073 case 207: 2074 pai wugu[10]; 2075 for(i=1;i<=10;i++)wugu[i-1].leixing=-1; 2076 Kaipai(paidui,paiduishu,2,wugu); 2077 for(;;) 2078 { 2079 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2080 if(!i)break; 2081 j++; 2082 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2083 if(!i)break; 2084 j++; 2085 } 2086 if(!(j%2))Qupai(wugu,w1); 2087 for(;;) 2088 { 2089 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2090 if(!i)break; 2091 j++; 2092 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2093 if(!i)break; 2094 j++; 2095 } 2096 if(!(j%2))Qupai(wugu,w2); 2097 Rengpai(wugu,qipaidui,qipaishu); printf("弃牌数:%d\n",*qipaishu); 2098 break; 2099 case 208: 2100 for(;;) 2101 { 2102 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2103 if(!i)break; 2104 j++; 2105 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2106 if(!i)break; 2107 j++; 2108 } 2109 if(!(j%2)) 2110 { 2111 i=Nanman(w1,w2,qipaidui,qipaishu); 2112 if(i==-1)return -1; 2113 if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 2114 else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 2115 } 2116 break; 2117 case 209: 2118 for(;;) 2119 { 2120 i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0); 2121 if(!i)break; 2122 j++; 2123 i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0); 2124 if(!i)break; 2125 j++; 2126 } 2127 if(!(j%2)) 2128 { 2129 i=Wanjian(w1,w2,paidui,paiduishu,qipaidui,qipaishu); 2130 if(i==-1)return -1; 2131 if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian); 2132 else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian); 2133 } 2134 break; 2135 case 361: 2136 case 362: 2137 case 363: 2138 ((*w1).juli[0])--;break; 2139 case 381: 2140 case 382: 2141 case 383: 2142 ((*w2).juli[0])++;break; 2143 default:break; 2144 } 2145 printf("\n"); 2146 } 2147 } 2148 } 2149 return 0; 2150 } 2151 void Qipai(pai shoupai[20],int *shoupaishu,pai qipaidui[104],int *qipaishu,int juese,int *shoupaishangxian) 2152 { 2153 int x; 2154 if((*shoupaishu)>(*shoupaishangxian)) 2155 { 2156 if(juese!=1&&juese!=0)printf("身份参数错误!"); 2157 int q=(*shoupaishu)-(*shoupaishangxian); 2158 int i,j; 2159 for(j=1;j<=q;j++) 2160 { 2161 for(;;) 2162 { 2163 if(juese) 2164 { 2165 printf("弃牌请输入手牌之前的编号,以回车结束!\n注:一次只能弃一张牌\n"); 2166 printf("手牌数:%d\n",*shoupaishu); 2167 scanf("%d",&x); 2168 if(x>=0&&x<(*shoupaishu))break; 2169 else printf("你弃掉了一张空气!\n"); 2170 } 2171 else 2172 { 2173 srand((unsigned)time(NULL)); 2174 x=rand()%(*shoupaishu); 2175 break; 2176 } 2177 } 2178 qipaidui[*qipaishu]=shoupai[x]; 2179 for(i=x+1;i<=(*shoupaishu);i++)shoupai[i-1]=shoupai[i]; 2180 (*shoupaishu)--; 2181 if(juese)printf("弃牌阶段玩家弃置"); 2182 else printf("弃牌阶段电脑弃置"); 2183 qipaidui[*qipaishu].Kanpai(); 2184 (*qipaishu)++; 2185 int m; 2186 if(juese) 2187 { 2188 printf("玩家当前手牌:\n"); 2189 for(m=0;m<=(*shoupaishu-1);m++) 2190 { 2191 printf("%d ",m); 2192 (shoupai[m]).Kanpai(); 2193 } 2194 } printf("弃牌堆:%d\n",*qipaishu); 2195 } 2196 } 2197 } 2198 int Huihe(pai A[104],pai B[104],int *x,int *y,pai yuanshipaidui[2][4][13],wujiang *w1,wujiang *w2) 2199 { 2200 printf("\n回合开始阶段……\n"); 2201 switch((*w1).huihekaishi) 2202 { 2203 case 0:break; 2204 default:printf("回合开始阶段参数错误!\n");break; 2205 } 2206 printf("判定阶段……\n"); 2207 int K=0; 2208 if((*w1).pandingshu>0) 2209 { 2210 int i,j; 2211 for(;(*w1).pandingshu;) 2212 { 2213 switch((*w1).pandingpai[0].leixing) 2214 { 2215 case 251:printf("【乐不思蜀】开始判定……\n"); break; 2216 case 252:printf("【闪电】开始判定……\n");break; 2217 default:printf("【??】开始判定……\n");break; 2218 } 2219 j=0; 2220 pai p=((*w1).pandingpai[0]); 2221 for(;;)//在判定之前询问【无懈】 2222 { 2223 i=Wuxie(&p,w2,w1,B,y,0); 2224 if(!i)break; 2225 j++; 2226 i=Wuxie(&p,w1,w2,B,y,0); 2227 if(!i)break; 2228 j++; 2229 } 2230 switch((*w1).pandingpai[0].leixing) 2231 { 2232 case 251: 2233 if(!(j%2)) 2234 { 2235 printf("【乐不思蜀】的判定牌是:"); 2236 Panding(A,x,B,y); 2237 if((B[(*y)-1].huase)!=1) 2238 { 2239 printf("【乐不思蜀】判定成功!\n"); 2240 if((*w1).juese)printf("玩家"); 2241 else printf("电脑"); 2242 printf("跳过出牌阶段!\n"); 2243 K=-1; 2244 } 2245 else printf("【乐不思蜀】判定失败!\n"); 2246 } 2247 B[*y]=(*w1).pandingpai[0]; 2248 ((*w1).pandingshu)--; 2249 (*w1).pandingpai[0]=(*w1).pandingpai[1]; 2250 (*w1).pandingpai[1]=(*w1).pandingpai[2]; 2251 (*w1).pandingpai[2].leixing=-1; 2252 (*y)++; 2253 break; 2254 case 252: 2255 if(!(j%2)) 2256 { 2257 printf("【闪电】的判定牌是:"); 2258 Panding(A,x,B,y); 2259 if((B[(*y)-1].huase==0)&&(B[(*y)-1].dianshu>=1)&&(B[(*y)-1].dianshu<=8)) 2260 { 2261 printf("【闪电】判定成功!\n"); 2262 if((*w1).juese)printf("玩家"); 2263 else printf("电脑"); 2264 printf("受到3点雷电伤害!"); 2265 ((*w1).tili)=((*w1).tili)-3; 2266 i=Binsi(w2,w1,B,y); 2267 B[*y]=(*w1).pandingpai[0]; 2268 ((*w1).pandingshu)--; 2269 (*w1).pandingpai[0]=(*w1).pandingpai[1]; 2270 (*w1).pandingpai[1]=(*w1).pandingpai[2]; 2271 (*w1).pandingpai[2].leixing=-1; 2272 (*y)++; 2273 if(i==-1)return -1; 2274 } 2275 else 2276 { 2277 printf("【闪电】判定失败!\n"); 2278 (*w2).pandingpai[2]=(*w2).pandingpai[1]; 2279 (*w2).pandingpai[1]=(*w2).pandingpai[0]; 2280 (*w2).pandingpai[0]=(*w1).pandingpai[0]; 2281 (*w1).pandingpai[0]=(*w1).pandingpai[1]; 2282 (*w1).pandingpai[1]=(*w1).pandingpai[2]; 2283 (*w1).pandingpai[2].leixing=-1; 2284 ((*w1).pandingshu)--; 2285 ((*w2).pandingshu)++; 2286 } 2287 break; 2288 } 2289 default:printf("判定牌错误!"); 2290 } printf("弃牌数:%d\n",*y); 2291 } 2292 } 2293 else if(!((*w1).pandingshu)); 2294 else printf("判定阶段参数错误!\n"); 2295 printf("摸牌阶段……\n"); 2296 switch((*w1).mopai) 2297 { 2298 case 0:Mopai(&((*w1).shoupaishu),(*w1).shoupai,A,x,B,y,(*w1).juese);break; 2299 case -1:break; 2300 default:printf("摸牌阶段参数错误!\n");break; 2301 } 2302 if(K==-1)goto M; 2303 printf("出牌阶段……\n"); 2304 switch((*w1).chupai) 2305 { 2306 case 0: 2307 { 2308 int i; 2309 i=Chupai(A,B,x,y,w1,w2,yuanshipaidui); 2310 if(i==-1) 2311 { 2312 return -1; 2313 break; 2314 } 2315 else 2316 break; 2317 } 2318 case -1:break; 2319 default:printf("出牌阶段参数错误!\n");break; 2320 } 2321 M: 2322 printf("弃牌阶段……\n"); 2323 switch((*w1).qipai) 2324 { 2325 case 0: 2326 Qipai((*w1).shoupai,&((*w1).shoupaishu),B,y,(*w1).juese,&((*w1).tili));break; 2327 default:printf("弃牌阶段参数错误!\n");break; 2328 } 2329 printf("回合结束阶段……\n"); 2330 switch((*w1).huihejieshu) 2331 { 2332 case 0:break; 2333 default:printf("回合结束阶段参数错误!\n");break; 2334 } 2335 return 0; 2336 } 2337 int main() 2338 { 2339 void Kanshoupai(pai p); 2340 pai yuanshipaidui[2][4][13],qipaidui[104],paidui[104]; 2341 wujiang wanjia,com; 2342 com.tili=wanjia.tili=5; 2343 com.tilishangxian=wanjia.tilishangxian=5; 2344 com.huihekaishi=wanjia.huihekaishi=0; 2345 com.panding=wanjia.panding=0; 2346 com.mopai=wanjia.mopai=0; 2347 com.chupai=wanjia.chupai=0; 2348 com.qipai=wanjia.qipai=0; 2349 com.huihejieshu=wanjia.huihejieshu=0; 2350 com.shoupaishu=wanjia.shoupaishu=0; 2351 com.pandingshu=wanjia.pandingshu=0; 2352 com.zhuangbeishu=wanjia.zhuangbeishu=0; 2353 com.juese=0;wanjia.juese=1; 2354 pai p; 2355 p.leixing=-1; 2356 com.zhuangbei[0]=com.zhuangbei[1]=com.zhuangbei[2]=com.zhuangbei[3]=wanjia.zhuangbei[0]=wanjia.zhuangbei[1]=wanjia.zhuangbei[2]=wanjia.zhuangbei[3]=p; 2357 com.zhuangbei[0].changdu=wanjia.zhuangbei[0].changdu=1; 2358 com.pandingpai[0]=com.pandingpai[1]=com.pandingpai[2]=wanjia.pandingpai[0]=wanjia.pandingpai[1]=wanjia.pandingpai[2]=p; 2359 com.juli[0]=wanjia.juli[0]=1; 2360 int a,b,c; 2361 for(a=0;a<=1;a++) 2362 { 2363 for(b=0;b<=3;b++) 2364 { 2365 for(c=0;c<=12;c++) 2366 { 2367 yuanshipaidui[a][b][c].paifu=a; 2368 yuanshipaidui[a][b][c].huase=b; 2369 yuanshipaidui[a][b][c].dianshu=c; 2370 } 2371 } 2372 } 2373 yuanshipaidui[0][0][0].leixing=204; 2374 yuanshipaidui[0][0][1].leixing=331; 2375 yuanshipaidui[0][0][2].leixing=201; 2376 yuanshipaidui[0][0][3].leixing=201; 2377 yuanshipaidui[0][0][4].leixing=304;yuanshipaidui[0][0][4].changdu=3; 2378 yuanshipaidui[0][0][5].leixing=251; 2379 yuanshipaidui[0][0][6].leixing=101; 2380 yuanshipaidui[0][0][7].leixing=101; 2381 yuanshipaidui[0][0][8].leixing=101; 2382 yuanshipaidui[0][0][9].leixing=101; 2383 yuanshipaidui[0][0][10].leixing=202; 2384 yuanshipaidui[0][0][11].leixing=201; 2385 yuanshipaidui[0][0][12].leixing=208; 2386 yuanshipaidui[0][1][0].leixing=209; 2387 yuanshipaidui[0][1][1].leixing=102; 2388 yuanshipaidui[0][1][2].leixing=103; 2389 yuanshipaidui[0][1][3].leixing=103; 2390 yuanshipaidui[0][1][4].leixing=308;yuanshipaidui[0][1][4].changdu=5; 2391 yuanshipaidui[0][1][5].leixing=103; 2392 yuanshipaidui[0][1][6].leixing=103; 2393 yuanshipaidui[0][1][7].leixing=103; 2394 yuanshipaidui[0][1][8].leixing=103; 2395 yuanshipaidui[0][1][9].leixing=101; 2396 yuanshipaidui[0][1][10].leixing=101; 2397 yuanshipaidui[0][1][11].leixing=103; 2398 yuanshipaidui[0][1][12].leixing=102; 2399 yuanshipaidui[0][2][0].leixing=204; 2400 yuanshipaidui[0][2][1].leixing=101; 2401 yuanshipaidui[0][2][2].leixing=101; 2402 yuanshipaidui[0][2][3].leixing=101; 2403 yuanshipaidui[0][2][4].leixing=101; 2404 yuanshipaidui[0][2][5].leixing=101; 2405 yuanshipaidui[0][2][6].leixing=101; 2406 yuanshipaidui[0][2][7].leixing=101; 2407 yuanshipaidui[0][2][8].leixing=101; 2408 yuanshipaidui[0][2][9].leixing=101; 2409 yuanshipaidui[0][2][10].leixing=101; 2410 yuanshipaidui[0][2][11].leixing=205; 2411 yuanshipaidui[0][2][12].leixing=205; 2412 yuanshipaidui[0][3][0].leixing=204; 2413 yuanshipaidui[0][3][1].leixing=102; 2414 yuanshipaidui[0][3][2].leixing=102; 2415 yuanshipaidui[0][3][3].leixing=102; 2416 yuanshipaidui[0][3][4].leixing=102; 2417 yuanshipaidui[0][3][5].leixing=101; 2418 yuanshipaidui[0][3][6].leixing=101; 2419 yuanshipaidui[0][3][7].leixing=101; 2420 yuanshipaidui[0][3][8].leixing=101; 2421 yuanshipaidui[0][3][9].leixing=101; 2422 yuanshipaidui[0][3][10].leixing=102; 2423 yuanshipaidui[0][3][11].leixing=103; 2424 yuanshipaidui[0][3][12].leixing=101; 2425 yuanshipaidui[1][0][0].leixing=252; 2426 yuanshipaidui[1][0][1].leixing=302;yuanshipaidui[1][0][1].changdu=2; 2427 yuanshipaidui[1][0][2].leixing=202; 2428 yuanshipaidui[1][0][3].leixing=202; 2429 yuanshipaidui[1][0][4].leixing=383; 2430 yuanshipaidui[1][0][5].leixing=303;yuanshipaidui[1][0][5].changdu=2; 2431 yuanshipaidui[1][0][6].leixing=208; 2432 yuanshipaidui[1][0][7].leixing=101; 2433 yuanshipaidui[1][0][8].leixing=101; 2434 yuanshipaidui[1][0][9].leixing=101; 2435 yuanshipaidui[1][0][10].leixing=210; 2436 yuanshipaidui[1][0][11].leixing=305;yuanshipaidui[1][0][11].changdu=3; 2437 yuanshipaidui[1][0][12].leixing=362; 2438 yuanshipaidui[1][1][0].leixing=206; 2439 yuanshipaidui[1][1][1].leixing=102; 2440 yuanshipaidui[1][1][2].leixing=207; 2441 yuanshipaidui[1][1][3].leixing=207; 2442 yuanshipaidui[1][1][4].leixing=361; 2443 yuanshipaidui[1][1][5].leixing=251; 2444 yuanshipaidui[1][1][6].leixing=203; 2445 yuanshipaidui[1][1][7].leixing=203; 2446 yuanshipaidui[1][1][8].leixing=203; 2447 yuanshipaidui[1][1][9].leixing=101; 2448 yuanshipaidui[1][1][10].leixing=203; 2449 yuanshipaidui[1][1][11].leixing=201; 2450 yuanshipaidui[1][1][12].leixing=381; 2451 yuanshipaidui[1][2][0].leixing=301;yuanshipaidui[1][2][0].changdu=1; 2452 yuanshipaidui[1][2][1].leixing=331; 2453 yuanshipaidui[1][2][2].leixing=201; 2454 yuanshipaidui[1][2][3].leixing=201; 2455 yuanshipaidui[1][2][4].leixing=382; 2456 yuanshipaidui[1][2][5].leixing=251; 2457 yuanshipaidui[1][2][6].leixing=208; 2458 yuanshipaidui[1][2][7].leixing=101; 2459 yuanshipaidui[1][2][8].leixing=101; 2460 yuanshipaidui[1][2][9].leixing=101; 2461 yuanshipaidui[1][2][10].leixing=101; 2462 yuanshipaidui[1][2][11].leixing=210; 2463 yuanshipaidui[1][2][12].leixing=210; 2464 yuanshipaidui[1][3][0].leixing=301;yuanshipaidui[1][3][0].changdu=1; 2465 yuanshipaidui[1][3][1].leixing=102; 2466 yuanshipaidui[1][3][2].leixing=202; 2467 yuanshipaidui[1][3][3].leixing=202; 2468 yuanshipaidui[1][3][4].leixing=306;yuanshipaidui[1][3][4].changdu=3; 2469 yuanshipaidui[1][3][5].leixing=102; 2470 yuanshipaidui[1][3][6].leixing=102; 2471 yuanshipaidui[1][3][7].leixing=102; 2472 yuanshipaidui[1][3][8].leixing=102; 2473 yuanshipaidui[1][3][9].leixing=102; 2474 yuanshipaidui[1][3][10].leixing=102; 2475 yuanshipaidui[1][3][11].leixing=307;yuanshipaidui[1][3][11].changdu=4; 2476 yuanshipaidui[1][3][12].leixing=363; 2477 int paiduishu=104; 2478 int qipaishu=0; 2479 printf("游戏开始!\n"); 2480 Qishixipai(yuanshipaidui,paidui); 2481 Qishishoupai(&wanjia,paidui,&(paiduishu),qipaidui,&(qipaishu)); 2482 Qishishoupai(&com,paidui,&(paiduishu),qipaidui,&(qipaishu)); 2483 int i; 2484 for(;;) 2485 { 2486 i=Huihe(paidui,qipaidui,&paiduishu,&qipaishu,yuanshipaidui,&wanjia,&com); 2487 if(i==-1)break; 2488 i=Huihe(paidui,qipaidui,&paiduishu,&qipaishu,yuanshipaidui,&com,&wanjia); 2489 if(i==-1)break; 2490 } 2491 }