wzq.cpp
上传用户:sjsmail
上传日期:2009-08-28
资源大小:260k
文件大小:19k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "7.h"
  3. #include "wzq.h"
  4. #include "dim.h"
  5. #ifdef _DEBUG
  6. #undef THIS_FILE
  7. static char THIS_FILE[]=__FILE__;
  8. #define new DEBUG_NEW
  9. #endif
  10. wzq::wzq(CDC2*tqp,CDC2*tqzh,CDC2*tqzb,CDC2*tmask,CDC2*dead,CDC*dc)
  11. {
  12. SetDc(tqp,tqzh,tqzb,tmask,dead,dc);
  13. }
  14. /*___________________________________________________________________________________________*/
  15. wzq::~wzq(){}
  16. /*___________________________________________________________________________________________*/
  17. wzq::wzq()
  18. { wzq::dcseted=false; }
  19. /*___________________________________________________________________________________________*/
  20. void wzq::DrawQZ(int nx,int ny,bool style)//画棋子
  21. {
  22. if (wzq::dcseted==false)return;
  23. if (nx>15||ny>15) return;
  24. if (style==false ) 
  25. {
  26. dc->BitBlt(nx*29+7,ny*29+7,28,28,mask,0,0,MERGEPAINT);
  27. dc->BitBlt(nx*29+7,ny*29+7,28,28,qzb,0,0,SRCAND);
  28. }
  29. else
  30. {
  31. dc->BitBlt(nx*29+7,ny*29+7,28,28,mask,0,0,MERGEPAINT);
  32. dc->BitBlt(nx*29+7,ny*29+7,28,28,qzh,0,0,SRCAND);
  33. }
  34. }
  35. /*___________________________________________________________________________________________*/
  36. void wzq::SetDc(CDC2*tqp,CDC2*tqzh,CDC2*tqzb,CDC2*tmask,CDC2*dead,CDC*dc)//设置DC
  37. {
  38. wzq::mask =tmask;
  39. wzq::qp =tqp;
  40. wzq::qzb =tqzb;
  41. wzq::qzh =tqzh;
  42. wzq::dc =dc;
  43. wzq::dead=dead; 
  44. wzq::dcseted=true; 
  45. }
  46. /*___________________________________________________________________________________________*/
  47. void wzq::NewGame()//新游戏
  48. {
  49. if (wzq::dcseted==false)return;
  50. for(int i1=0 ; i1<=14;i1++)
  51. {
  52. for(int i2=0 ; i2<=14;i2++)
  53. {
  54. map[i1][i2]=0;
  55. for(int i3=0 ; i3<=3;i3++)
  56. {
  57. user[i1][i2][i3]=255;
  58. pc[i1][i2][i3]=255;
  59. }
  60. }
  61. }
  62. for (int ix=0;ix<225;ix++)
  63. {
  64. wzq::wzs[ix].used=false; 
  65. }
  66. CSize x=qp->GetSize();
  67. dc->BitBlt(0, 0,x.cx,x.cy,qp,0,0,SRCCOPY);//画棋盘
  68. wzq::twinner.winner=0;  
  69. wzq::nturn=0; 
  70. wzq::nowd2 =0;
  71. if (wzq::Model==1)
  72. {
  73. userBd(7,7);
  74. }
  75. /*___________________________________________________________________________________________*/
  76. void wzq::draw()//重画
  77. {
  78. if (wzq::dcseted==false)return;
  79. CSize x=qp->GetSize() ;
  80. dc->BitBlt(0, 0,x.cx,x.cy,qp,0,0,SRCCOPY);//画棋盘
  81. for(int i1=0 ; i1<15;i1++)
  82. {
  83. for(int i2=0 ; i2<15;i2++)
  84. {
  85. if (map[i1][i2]==1){this->DrawQZ(i1,i2,false);}
  86. else{if (map[i1][i2]==2){this->DrawQZ(i1,i2,true);}}
  87. }
  88. }
  89. if (wzq::twinner.winner!=0)
  90. {
  91. int x1=wzq::twinner.nx1  , y1=wzq::twinner.ny1; 
  92. int xj,yj;
  93. if(wzq::twinner.nx2-wzq::twinner.nx1>0)
  94. {
  95. xj=1;
  96. }
  97. else
  98. {
  99. if (wzq::twinner.nx2-wzq::twinner.nx1==0)
  100. {
  101. xj=0;
  102. }
  103. else
  104. {
  105. xj=-1;
  106. }
  107. }
  108. if(wzq::twinner.ny2-wzq::twinner.ny1>0)
  109. {
  110. yj=1;
  111. }
  112. else
  113. {
  114. if (wzq::twinner.ny2-wzq::twinner.ny1==0)
  115. {
  116. yj=0;
  117. }
  118. else
  119. {
  120. yj=-1;
  121. }
  122. }
  123. if (wzq::twinner.winner!=0)
  124. {
  125. for (int ii=1 ; ii<=5 ; ii++)
  126. {
  127. dc->BitBlt(x1*29+7,y1*29+7,28,28,mask,0,0,MERGEPAINT);
  128. dc->BitBlt(x1*29+7,y1*29+7,28,28,dead,0,0,SRCAND);
  129. x1+=xj;
  130. y1+=yj;
  131. }
  132. }
  133. }
  134. }  
  135. /*___________________________________________________________________________________________*/
  136. bool wzq::userAd(int nx,int ny)//黑色下子
  137. {
  138. if (wzq::dcseted==false)return false;
  139. if (map[nx][ny]==0)
  140. {
  141. map[nx][ny]=1;
  142. DrawQZ(nx,ny,false);
  143. return true;
  144. }
  145. else 
  146. {
  147. return false;
  148. }
  149. wzq::DrawQZ(nx,ny,true); 
  150. }
  151. /*___________________________________________________________________________________________*/
  152. bool wzq::userBd(int nx,int ny)//白色下子
  153. {
  154. if (wzq::dcseted==false)return false;
  155. if (map[nx][ny]==0)
  156. {
  157. map[nx][ny]=2;
  158. DrawQZ(nx,ny,true);
  159. return true;
  160. }
  161. else
  162. {
  163. return false;
  164. }
  165. wzq::DrawQZ(nx,ny,false); 
  166. }
  167. /*__________________________________________________________________________________________*/
  168. bool wzq::bewinner2(bool style,int nx,int ny)//胜败
  169. {
  170. int tx1=0,tx2=0,ty1=0,ty2=0;
  171. int yx1=0,yx2=0,yy1=0,yy2=0;
  172. int st=(int)style+1;
  173. for (int x1=-5 ; x1<= 5 ; x1++)
  174. {
  175. if (map[nx+x1][ny]==st)
  176. {
  177. tx1++;
  178. if (tx1==1) yx1=x1;
  179. if (tx1>=5)
  180. {
  181. twinner.winner =st;
  182. twinner.nx1= nx+yx1;
  183. twinner.nx2 =nx+yx1+5;
  184. twinner.ny1 =ny;
  185. twinner.ny2 =ny;
  186. return true;
  187. }
  188. }
  189. else 
  190. {
  191. tx1=0;
  192. }
  193. if (map[nx][ny+x1]==st)
  194. {
  195. ty1++;
  196. if (ty1==1) yy1=x1;
  197. if (ty1>=5)
  198. {
  199. twinner.winner =st;
  200. twinner.nx1= nx;
  201. twinner.nx2 =nx;
  202. twinner.ny1 =ny+yy1;
  203. twinner.ny2 =ny+yy1+5;
  204. return true;
  205. }
  206. }
  207. else 
  208. {
  209. ty1=0;
  210. }
  211. if (map[nx+x1][ny+x1]==st)
  212. {
  213. tx2++;
  214. if (tx2==1) yx2=x1;
  215. if (tx2>=5)
  216. {
  217. twinner.winner =st;
  218. twinner.nx1= nx+yx2;
  219. twinner.nx2 =nx+yx2+5;
  220. twinner.ny1 =ny+yx2;
  221. twinner.ny2 =ny+yx2+5;
  222. return true;
  223. }
  224. }
  225. else
  226. {
  227. tx2=0;
  228. }
  229. if (map[nx+x1][ny-x1]==st)
  230. {
  231. ty2++;
  232. if (ty2==1) yy2=x1;
  233. if (ty2>=5)
  234. {
  235. twinner.winner =st;
  236. twinner.nx1= nx+yy2;
  237. twinner.nx2 =nx+yy2+5;
  238. twinner.ny1 =ny-yy2;
  239. twinner.ny2 =ny-yy2-5;
  240. return true;
  241. }
  242. }
  243. else 
  244. {
  245. ty2=0;
  246. }
  247. }
  248. return false;
  249. }
  250. /*__________________________________________________________________________________________*/
  251. bool wzq::downzi(int nx,int ny)//外部调用此函数下子
  252. {
  253. bool turnback;
  254. if (nx<0||nx>14||ny<0||nx>14) return false;
  255. if (wzq::nturn==-1)return false;
  256. if (wzq::Model==2 )
  257. {
  258. if (wzq::nturn==1)
  259. {
  260. turnback=userAd(nx,ny);
  261. if (bewinner2(false,nx,ny)==true)wzq::nturn=-1; 
  262. wzq::nturn =turnback?0:1;
  263. setback(nx,ny,false);
  264. }
  265. else
  266. {
  267. turnback=userBd(nx,ny);
  268. if(bewinner2(true,nx,ny)==true)wzq::nturn =-1;
  269. wzq::nturn =turnback?1:0;
  270. setback(nx,ny,true);
  271. }
  272. }
  273. else
  274. {
  275. if (wzq::Model==1)
  276. {
  277. if (userAd(nx,ny)==false)return false;
  278. if(bewinner2(false,nx,ny)==true)wzq::nturn =-1;
  279. CPoint aigo=wzq::AiGo(true);
  280. setback(nx,ny,false);
  281. userBd(aigo.x,aigo.y);
  282. setback(aigo.x,aigo.y,true);
  283. if(bewinner2(true,aigo.x,aigo.y)==true)wzq::nturn =-1;
  284. }
  285. else
  286. {
  287. if (wzq::Model==0) 
  288. {
  289. if (userBd(nx,ny)==false)return false;
  290. if(bewinner2(true,nx,ny)==true)wzq::nturn =-1;
  291. CPoint aigo=wzq::AiGo(false);
  292. setback(nx,ny,true);
  293. userAd(aigo.x,aigo.y);
  294. setback(aigo.x,aigo.y,false);
  295. if(bewinner2(false,aigo.x,aigo.y)==true)wzq::nturn =-1;
  296. }
  297. }}
  298. return turnback;
  299. }
  300. /*____________________________________________________________________________________*/
  301. bool wzq::goback()//悔棋
  302. { if (wzq::getbackble==false) return false; 
  303. wzq::nowd2--;
  304. if (wzq::Model==2)
  305. {
  306. map[wzq::wzs[nowd2].ix][wzq::wzs[nowd2].iy]=0;
  307. wzq::nturn= wzq::wzs[nowd2].color ;
  308. wzq::wzs[nowd2].used=false;
  309. wzq::dc->BitBlt(wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,28,28,wzq::qp,wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,SRCCOPY);
  310. }
  311. else
  312. {
  313. map[wzq::wzs[nowd2].ix][wzq::wzs[nowd2].iy]=0;
  314. wzq::wzs[nowd2].used=false;
  315. wzq::dc->BitBlt(wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,28,28,wzq::qp,wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,SRCCOPY);
  316. wzq::nowd2--;
  317. map[wzq::wzs[nowd2].ix][wzq::wzs[nowd2].iy]=0;
  318. wzq::wzs[nowd2].used=false;
  319. wzq::dc->BitBlt(wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,28,28,wzq::qp,wzq::wzs[nowd2].ix*29+7,wzq::wzs[nowd2].iy*29+7,SRCCOPY);
  320. }
  321. if (wzq::twinner.winner!=0) 
  322. {
  323. wzq::twinner.winner =0; 
  324. wzq::draw();
  325. }
  326. return false;
  327. }
  328. /*__________________________________________________________________________________________*/
  329. bool wzq::bejs(int nx,int ny)
  330. {
  331. /*++此处添加禁手控制++*/
  332. //因为我不熟悉五子棋的规则,所以没有设置禁手
  333. return false;
  334. }
  335. /*__________________________________________________________________________________________*/
  336. void wzq::fillin(bool color,bool player,bool type)
  337. {
  338. int ix,iy;
  339. for (ix=0 ;ix<=14;ix++)
  340. {
  341. for (iy=0 ;iy<=14;iy++)
  342. {
  343. if (map[ix][iy]==0)
  344. {
  345. for (int im=0 ; im<=3 ; im++)
  346. {
  347.   setqx(ix,iy,color,player,im,type);
  348. }
  349. }
  350. }
  351. }
  352. }
  353. /*__________________________________________________________________________________________*/
  354. void wzq::setqx(int nx ,int ny,bool style,bool player,int st,bool type)
  355. {
  356. bool ok=true;
  357. int ia,ib;
  358. int ix,iy;
  359. int i2,i2j;
  360. int tem1,tem2;
  361. int x;
  362. int i3;
  363. int m1,m3;
  364. int i;
  365. int wx=nx,wy=ny,tem3=0;
  366. switch (st)
  367. {
  368. case 0:
  369. i2=1,i2j=0;break;
  370. case 1:
  371. i2=0,i2j=1;break;
  372. case 2:
  373. i2=1,i2j=1;break;
  374. case 3:
  375. i2=1,i2j=-1;break;
  376. }
  377. unsigned char temp3[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  378. unsigned char temp4[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  379. begin:
  380. if (map[wx][wy]!=0)return;
  381. i3=0;
  382. ix=i2;
  383. iy=i2j;
  384. ia=1,ib=1;
  385. //right==========================================================================================//
  386. x=map[wx-ix][wy-iy];
  387. while(!(x!=(int)style+1||wx-ix<0||wy-iy<0))
  388. {
  389. ia++;
  390. ix+=i2;
  391. iy+=i2j;
  392. x=map[wx-ix][wy-iy];
  393. ix=i2,iy=i2j;
  394. //left====================================================================================//
  395. x=map[wx+ix][wy+iy];
  396. while(!(x!=(int)style+1||wx+ix>14||wy+iy>14))
  397. {
  398. ix+=i2;
  399. iy+=i2j;
  400. ib++;
  401. x=map[wx+ix][wy+iy];
  402. //偏移=======================================================================================//
  403. if (ib==1&&ia==1)
  404. {
  405. if (tem3==0)
  406. {
  407. wx+=i2,wy+=i2j;
  408. tem3=1;
  409. goto begin;
  410. }
  411. else
  412. {
  413. if (tem3==1)
  414. {
  415. wx-=i2*2,wy-=i2j*2;
  416. tem3=2;
  417. goto begin;
  418. }
  419. else
  420. {
  421. if (tem3==2)return;
  422. }
  423. }
  424. }
  425. ix=0,iy=0;
  426. switch (st)
  427. {
  428. case 0:
  429. {
  430. m1=(ia!=1&&ib==1),m3=(ib!=1&&ia==1);
  431. for(i=0; i<1+ia+ib;i++)
  432. {
  433. tem1=wx-ia+ix-m1;
  434. if (tem1<0||tem1>14){ix+=1;continue;}
  435. x=map[tem1][wy];
  436. temp3[i3]=ntoc(x,type,style);
  437. ix+=1;
  438. i3++;
  439. }
  440. ix=0,i3=0;
  441. for (i=0 ; i<1+ia+ib;i++)
  442. {
  443. tem1=wx+ib-ix+m3;
  444. if (tem1<0||tem1>14){ix+=1;continue;}
  445. x=map[tem1][wy];
  446. temp4[i3]=ntoc(x,type,style);
  447. ix+=1;
  448. i3++;
  449. }
  450. break;
  451. }
  452. case 1:
  453. {
  454. m1=(ia!=1&&ib==1),m3=(ib!=1&&ia==1);
  455. for(i=0; i<1+ia+ib;i++)
  456. {
  457. tem1=wy-ia+iy-m1;
  458. if (tem1<0||tem1>14){iy+=1;continue;}
  459. x=map[wx][tem1];
  460. temp3[i3]=ntoc(x,type,style);
  461. iy+=1;
  462. i3++;
  463. }
  464. iy=0,i3=0;
  465. for (i=0 ; i<1+ia+ib;i++)
  466. {
  467. tem1=wy+ib-iy+m3;
  468. if (tem1<0||tem1>14){iy+=1;continue;}
  469. x=map[wx][tem1];
  470. temp4[i3]=ntoc(x,type,style);
  471. iy+=1;
  472. i3++;
  473. }
  474. break;
  475. }
  476. break;
  477. case 2:
  478. {
  479. m1=(ia!=1&&ib==1),m3=(ib!=1&&ia==1);
  480. for (i=0 ; i<1+ia+ib ; i++)
  481. {
  482. tem1=wx-ia+ix-m1;
  483. tem2=wy-ia+iy-m1;
  484. if (tem1<0||tem1>14||tem2<0||tem2>14){ix+=1,iy+=1;continue;}
  485. x=map[tem1][tem2];
  486. temp3[i3]=ntoc(x,type,style);
  487. iy+=1;
  488. ix+=1;
  489. i3++;
  490. }
  491. iy=0,ix=0,i3=0;
  492. for (i=0 ; i<1+ia+ib ; i++)
  493. {
  494. tem1=wx+ib-ix+m3;
  495. tem2=wy+ib-iy+m3;
  496. if (tem1<0||tem1>14||tem2<0||tem2>14){ix+=1,iy+=1;continue;}
  497. x=map[tem1][tem2];
  498. temp4[i3]=ntoc(x,type,style);
  499. iy+=1;
  500. ix+=1;
  501. i3++;
  502. }
  503. break;
  504. }
  505. case 3:
  506. {
  507. m1=(ia!=1&&ib==1),m3=(ib!=1&&ia==1);
  508. for (i=0 ; i<1+ia+ib ; i++)
  509. {
  510. tem1=wx-ia+ix-m1;
  511. tem2=wy+ia+iy+m1;
  512. if (tem1<0||tem1>14||tem2<0||tem2>14){ix+=1,iy-=1;continue;}
  513. x=map[tem1][tem2];
  514. temp3[i3]=ntoc(x,type,style);
  515. iy-=1;
  516. ix+=1;
  517. i3++;
  518. }
  519. iy=0,ix=0,i3=0;
  520. for (i=0 ; i<1+ia+ib ; i++)
  521. {
  522. tem1=wx+ib-ix+m3;
  523. tem2=wy-ib-iy-m3;
  524. if (tem1<0||tem1>14||tem2<0||tem2>14){ix+=1,iy+=1;continue;}
  525. x=map[tem1][tem2];
  526. temp4[i3]=ntoc(x,type,style);
  527. iy-=1;
  528. ix+=1;
  529. i3++;
  530. }
  531. break;
  532. }
  533. };
  534. //tj===================================================//
  535. if ( (strcmp("00H0",(const char *)&temp3[1])==0 || strcmp("00H0",(const char *)&temp4[1])==0 || strcmp("00H0",(const char *)&temp3[0])==0 || strcmp("00H0",(const char *)&temp4[0])==0)&&tem3!=0)return;
  536. if ( (strcmp("00B0",(const char *)&temp3[1])==0 || strcmp("00B0",(const char *)&temp4[1])==0 || strcmp("00B0",(const char *)&temp3[0])==0 || strcmp("00B0",(const char *)&temp4[0])==0)&&tem3!=0)return;
  537. if ( (strcmp("00HHHB",(const char *)&temp3[1])==0 || strcmp("00HHHB",(const char *)&temp4[1])==0 || strcmp("00HHHB",(const char *)&temp3[0])==0 || strcmp("00HHHB",(const char *)&temp4[0])==0)&&tem3!=0)return;
  538. /*++此处添加更多的屏蔽++*/
  539. if (tem3==0)
  540. {for (i=0 ; i<=61 ; i++)
  541. {
  542. if (strcmp(wds[i],(const char *)&temp3[1])==0||strcmp(wds[i],(const char *)&temp4[1])==0||strcmp(wds[i],(const char *)&temp3[0])==0||strcmp(wds[i],(const char *)&temp4[0])==0)
  543. {
  544. if (player==false)
  545. {
  546. pc[nx][ny][st]=i;
  547. return;
  548. }
  549. else
  550. {
  551. user[nx][ny][st]=i;
  552. return;
  553. }
  554. }
  555. }
  556. }
  557. else
  558. {
  559. for (i=0 ; i<=61 ; i++)
  560. {
  561. if (strcmp(wds[i],(const char *)&temp3[0])==0||strcmp(wds[i],(const char *)&temp4[0])==0)
  562. {
  563. if (player==false)
  564. {
  565. pc[nx][ny][st]=i;
  566. return;
  567. }
  568. else
  569. {
  570. user[nx][ny][st]=i;
  571. return;
  572. }
  573. }
  574. }
  575. }
  576. }
  577. /*__________________________________________________________________________________________*/
  578. CPoint wzq::AiGo(bool color)
  579. {
  580. CPoint turnback(-1,-1);
  581. clear(false);
  582. fillin(color,false,true);
  583. fillin(!color,false,false);
  584. wzq::aitype2 =getaitype();
  585. unsigned char found=255;
  586. for (int ix=0 ;ix<=14;ix++)
  587. {
  588. for (int iy=0 ;iy<=14;iy++)
  589. {
  590. for (int im=0 ; im<=3 ; im++)
  591. {
  592. if (pc[ix][iy][im]<=found)
  593. {
  594. found=pc[ix][iy][im];
  595. turnback.x=ix,turnback.y=iy;
  596. }
  597. }
  598. }
  599. }
  600. if (found<=23)
  601. return turnback;
  602. else
  603. return getmax(color);
  604. }
  605. /*__________________________________________________________________________________________*/
  606. void wzq::setall()
  607. {
  608. for (int ix=0 ;ix<=14;ix++)
  609. {
  610. for (int iy=0 ;iy<=14;iy++)
  611. {
  612. wzq::nicest2[ix][iy]=0; 
  613. }
  614. }
  615. }
  616. /*____________________________________________________________________________________*/
  617. char wzq::ntoc(char num,bool type,bool style)
  618. {
  619. if (num==0)
  620. return '0';
  621. else
  622. if (type==true)
  623. {
  624. if (num==(int)style+1)
  625. return 'H';
  626. else 
  627. return 'B';
  628. }
  629. else
  630. {
  631. if (num!=(int)style+1)
  632. return 'H';
  633. else 
  634. return 'B';
  635. }
  636. }
  637. /*_____________________________________________________________________________________*/
  638. void wzq::checkgo(int x,int y,bool color,int nu,int inx,int iny)//预测函数 
  639. {
  640. wzq::trygo[x][y]=(char)color+1;
  641. clear(true);
  642. fillin(color,true,true);
  643. fillin(!color,true,false);
  644. CPoint temp=getbg(true);
  645. bool four1=false,four2=false,three1=false,three2=false;
  646. bool four3=false,four4=false,three3=false,three4=false;
  647. for (int i=0 ; i<=3 ; i++)
  648. {
  649. if (user[temp.x][temp.y][i]>=3&&user[temp.x][temp.y][i]<=5)
  650. {
  651. wzq::nicest2[inx][iny]=2;//lose 
  652. return;
  653. }
  654. else
  655. {
  656. if (user[temp.x][temp.y][i]<3)//win
  657. {
  658. wzq::nicest2[inx][iny]=1;
  659. return;
  660. }
  661. else
  662. {
  663. if (user[temp.x][temp.y][i]>=6&&user[temp.x][temp.y][i]<=14)
  664. {
  665. if(four1==true)four2=true;else four1=true;
  666. }
  667. else
  668. {
  669. if (user[temp.x][temp.y][i]>=15&&user[temp.x][temp.y][i]<=23)
  670. {
  671. if(four3==true)four4=true;else four3=true;
  672. }
  673. else
  674. {
  675. if (user[temp.x][temp.y][i]==24||user[temp.x][temp.y][i]==25)
  676. {
  677. if(three1==true)three2=true;else three1=true;
  678. }
  679. else
  680. {
  681. if (user[temp.x][temp.y][i]==26||user[temp.x][temp.y][i]==27)
  682. {
  683. if(three3==true)three4=true;else three3=true;
  684. }
  685. }
  686. }
  687. }
  688. }
  689. }
  690. }/*++此处添加更多的胜败判断++*/
  691. if (three1+three2+four1+four2>=2)
  692. {
  693. wzq::nicest2[inx][iny]=1;//lose
  694. return;
  695. }
  696. else
  697. {
  698. if (three3+three4+four3+four4>=2)
  699. {wzq::nicest2[inx][iny]=2;//win
  700. return;
  701. }
  702. }
  703. if (nu>=wzq::aitype2)
  704. {
  705. wzq::nicest2[inx][iny]=3;
  706. return;
  707. }
  708. int xxx=nu+1;
  709. checkgo(temp.x ,temp.y ,!color,xxx,inx,iny);
  710. }
  711. /*_____________________________________________________________________________________*/
  712. CPoint wzq::getmax(bool color)
  713. {
  714. CPoint turnback(0,0);
  715. setall();
  716. begin:
  717. bool x=0;
  718. int fx=0,fy=1;
  719. for (int ix=0 ;ix<=14;ix++)
  720. {
  721. for (int iy=0;iy<=14;iy++)
  722. {
  723. if (wzq::nicest2[ix][iy]==0)
  724. {
  725. if (bj2(ix,iy,fx,fy,false)==true)
  726. fx=ix,fy=iy,x=1;
  727. }
  728. }
  729. }
  730. //找最大
  731. //if (x==-1){turnback.x=7,turnback.y=7;return turnback;}//如果第一步返回7,7
  732. if (x==0)
  733. {x=0;
  734. for (int ix=0 ;ix<=14;ix++)
  735. {
  736. for (int iy=0 ;iy<=14;iy++)
  737. {
  738. if (wzq::nicest2[ix][iy]!=1/*不输*/)
  739. {
  740. if (bj2(ix,iy,turnback.x,turnback.y,false)==true)turnback.x=ix,turnback.y=iy,x=1;
  741. }
  742. }
  743. }
  744. if (x==0)
  745. {x=0;
  746. for (int ix=0 ;ix<=14;ix++)
  747. {
  748. for (int iy=0 ;iy<=14;iy++)
  749. {
  750. if (bj2(ix,iy,turnback.x,turnback.y,false)==true)turnback.x=ix,turnback.y=iy,x=1;
  751. }
  752. }
  753. }
  754. if (x==0)turnback.x =7,turnback.y =7;
  755. return turnback;
  756. }//找完
  757. for (ix=0 ;ix<=14;ix++)
  758. {
  759. for (int iy=0 ;iy<=14;iy++)
  760. {
  761. wzq::trygo[ix][iy]=wzq::map[ix][iy];
  762. }
  763. }
  764. //填
  765. wzq::checkgo(fx,fy, color,1,fx,fy);
  766. //预测
  767. if (nicest2[fx][fy]==2)//win
  768. {
  769. turnback.x=fx,turnback.y=fy;
  770. return turnback;
  771. }
  772. else
  773. {
  774. goto begin;//重来一次
  775. }
  776. //判断
  777. }
  778. /*_____________________________________________________________________________________*/
  779. CPoint wzq::getbg(bool style )
  780. {
  781. CPoint turnback;
  782. int ix1=0,iy1=0;
  783. for (int ix=0 ;ix<=14;ix++)
  784. {
  785. for (int iy=0 ;iy<=14;iy++)
  786. {
  787. if (bj2(ix,iy,ix1,iy1,style)==true)
  788. {
  789. ix1=ix,iy1=iy;
  790. }
  791. }
  792. }
  793. turnback.x=ix1;
  794. turnback.y=iy1;
  795. return turnback;
  796. }
  797. /*_____________________________________________________________________________________*/
  798. bool wzq::bj2(int x1,int y1,int x2,int y2,bool style)
  799. {
  800. unsigned char a[4];
  801. unsigned char b[4];
  802. unsigned char temp1;
  803. int i;
  804. if (style==false)
  805. {
  806. for (i=0 ; i<=3 ;i++)
  807. {a[i]=1;
  808. a[i]=pc[x1][y1][i];
  809. b[i]=pc[x2][y2][i];
  810. }
  811. }
  812. else
  813. {
  814. for (i=0 ; i<=3 ;i++)
  815. {a[i]=1;
  816. a[i]=user[x1][y1][i];
  817. b[i]=user[x2][y2][i];
  818. }
  819. }
  820. //...
  821. for (i=0 ; i<=3 ; i++)
  822. {
  823. for (int i2=0 ; i2<=2-i; i2++)
  824. {
  825. if (a[i2]>a[i2+1])
  826. {
  827. temp1=a[i2];
  828. a[i2]=a[i2+1];
  829. a[i2+1]=temp1;
  830. }
  831. if (b[i2]>b[i2+1])
  832. {
  833. temp1=b[i2];
  834. b[i2]=b[i2+1];
  835. b[i2+1]=temp1;
  836. }
  837. }
  838. }
  839. //冒泡排序
  840. for (i=0 ; i<=3 ; i++)
  841. {
  842. if (a[i]<b[i])
  843. {
  844. return true;
  845. }
  846. else
  847. {
  848. if (a[i]>b[i])
  849. {
  850. return false;
  851. }
  852. }
  853. }
  854. return false;
  855. }
  856. void wzq::clear(bool style)
  857. {
  858. int ix,iy;
  859. if (style==false)
  860. for ( ix=0 ;ix<=14;ix++)
  861. {
  862. for (iy=0 ;iy<=14;iy++)
  863. {
  864. for (int im=0 ; im<=3 ; im++)
  865. {
  866. wzq::pc[ix][iy][im]=255; 
  867. }
  868. }
  869. }
  870. else
  871. {
  872. for (ix=0 ;ix<=14;ix++)
  873. {
  874. for (iy=0 ;iy<=14;iy++)
  875. {
  876. for (int im=0 ; im<=3 ; im++)
  877. {
  878. wzq::user[ix][iy][im]=255; 
  879. }
  880. }
  881. }
  882. }
  883. }
  884. int wzq::getaitype()
  885. {
  886. if (wzq::AItype==0)
  887. return 6;
  888. else
  889. if (wzq::AItype==1)
  890. return 10;
  891. else
  892. if (wzq::AItype==2 )
  893. return 20;
  894. else
  895. return 10;
  896. }
  897. void wzq::setback(int nx,int ny,bool style)
  898. {
  899. wzq::wzs[wzq::nowd2].used=true;
  900. wzq::wzs[wzq::nowd2].color=style;
  901. wzq::wzs[wzq::nowd2].ix =nx;
  902. wzq::wzs[wzq::nowd2].iy =ny;
  903. wzq::nowd2++; 
  904. }