VC++MFC单机和网络版五子棋教程文件_第1页
VC++MFC单机和网络版五子棋教程文件_第2页
VC++MFC单机和网络版五子棋教程文件_第3页
VC++MFC单机和网络版五子棋教程文件_第4页
VC++MFC单机和网络版五子棋教程文件_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Good is good, but better carries it.精益求精,善益求善。VC+MFC单机和网络版五子棋-五子棋五子棋是一种很受人们喜爱的游戏,它的规则简单,但玩法变化多端,富有趣味性,适合人们消遣。这里我们就来设计一个五子棋游戏。(一)人对人游戏1.游戏实现人对人游戏,其实只是对游戏规则的实现,我们只是利用五子棋游戏的规则来编程,至于真正的游戏实现计算机的“智能”算法,我们将在后面讲述。五子棋的规则很简单:1,判断是否能放下棋子(是否已经有了棋子);2,判断是哪种颜色下棋;3,判断是否已经结束(是谁赢?)。这些规则,我们将用相应的函数来实现。其它,我们还将介绍其它一些功能的

2、实现。如鼠标的更换,工具栏和状态栏的编辑,类与类之间的相互调用。新建工程3_1,选择单文档,在Step4of6中先中WindowsSockets复选框。如下图:图3-1-12.资源编辑由于我们这个程序出现的关于资源编辑的内容太多,我们具体介绍如下:见下图3-1-2,我们需要添加的有:图3-1-2黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKIDB_WHITE黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1黑棋子IDC_CURSOR2白棋子说明:由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标

3、左键。图3-1-3黑白图标Icon以显示在状态栏供以提示:IDI_BLACKIDI_WHITE说明:由于我们的图标支持256色,按下下图(图3-1-4)最右边按扭,选择Device里面显示的选项。图3-1-4菜单以供操作:开始:ID_START保存:ID_SAVE打开:ID_OPEN工具栏:如上图所示。说明:工具栏一般都是根据菜单选项而产生的,它的ID一般都能从菜单的ID中找到。3.变量函数首先,为了实现状态栏的应用,我们必须更改它的变量:在MainFrm.h文件里面,把CStatusBarm_wndStatusBar为public接着是在3_1View.h文件里面添加变量函数:/两个鼠标HC

4、URSORhcursorwhite;HCURSORhcursorblack;/棋盘数组intwzq1919;/colorwhiteTRUE时白棋下,否则黑棋下boolcolorwhite;/棋子位图CBitmapm_bmblack;CBitmapm_bmwhite;/保存文件voidSave();/检查是否结束voidover(CPointpoint);/鼠标操作afx_msgvoidOnLButtonUp(UINTnFlags,CPointpoint);/鼠标图形更换afx_msgBOOLOnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage);/菜单的

5、开始afx_msgvoidOnStart();/菜单的保存afx_msgvoidOnSave();/菜单的打开afx_msgvoidOnOpen();4.具体实现棋盘大小设置:由于我们的游戏的棋盘大小是一定的,不能改变大小的,是应该符合要求的。在如下函数添加设置窗口大小的语句:BOOLCMainFrame:PreCreateWindow(CREATESTRUCT&cs)if(!CFrameWnd:PreCreateWindow(cs)returnFALSE;/TODO:ModifytheWindowclassorstylesherebymodifying/theCREATESTRUCTcscs

6、.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;/cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;/;/设置窗口大小:400*340cs.cx=450;cs.cy=500;returnTRUE;初始化变量:在构造函数里添加初始代码:CMy3_1View:CMy3_1View()/TODO:addconstructioncodehere/Load鼠标图像和棋子位图hcursorblack=AfxGetApp()-LoadCursor(IDC_CURSOR1);hcursorwhite=AfxGetApp()-LoadC

7、ursor(IDC_CURSOR2);m_bmwhite.LoadBitmap(IDB_WHITE);m_bmblack.LoadBitmap(IDB_BLACK);/清理棋盘/数组值为0表示没有棋子for(inti=0;i19;i+)for(intj=0;jFillRect(myrect1,&mybrush1);/画棋盘框线CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,1,RGB(0,0,0);myoldPen=pDC-SelectObject(&mypen);for(inti=0;iMoveTo(40,40+i*20);pDC-LineT

8、o(400,40+i*20);pDC-MoveTo(40+i*20,40);pDC-LineTo(40+i*20,400);/重画时显示存在的棋子CDCDc;if(Dc.CreateCompatibleDC(pDC)=FALSE)AfxMessageBox(CantcreateDC);for(intn=0;n19;n+)for(intm=0;mBitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);elseif(wzqnm=-1)/显示黑棋Dc.SelectObject(m_bmblack);pDC-BitBlt(n*20+32,m*20+32,160,

9、160,&Dc,0,0,SRCCOPY);设置鼠标:棋盘画好了,接下来就是下棋了。但鼠标并没有像我们上面说的那样变成白棋,加函数如下:BOOLCMy3_1View:OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)/TODO:Addyourmessagehandlercodehereand/orcalldefaultif(nHitTest=HTCLIENT)/白棋下,显示白棋鼠标if(colorwhite)/调用主框架里面的状态栏CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBa

10、r*pStatus=&pFrm-m_wndStatusBar;if(pStatus)pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_WHITE);pStatus-SetPaneText(0,白棋下);SetCursor(hcursorwhite);/显示黑棋鼠标elseSetCursor(hcursorblack);CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBar*pStatus=&pFrm-m_wndStatusBar;if(pStatus)

11、/显示图像pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_BLACK);/显示文字pStatus-SetPaneText(0,黑棋下);return1;returnCView:OnSetCursor(pWnd,nHitTest,message);现在运行程序,怎样,鼠标变成白棋了,而且下面的状态栏也能够显示鼠标状态了,真是一举两得。可是,又该怎样把棋子放在棋盘上呢?下棋操作:这就涉及到OnLButtonDown(UINTnFlags,CPointpoint)和OnLButtonUp(UINTnFlags,CPointp

12、oint)两个函数了。要用哪一个或用两个?用Down函数时是在鼠标按下时放下棋子,可是,要是我们按下后意识到按错了怎么办;那就改用Up函数,表示当鼠标键松开时放下棋子。OK!添加函数如下:voidCMy3_1View:OnLButtonUp(UINTnFlags,CPointpoint)/TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)=FALSE)AfxMessageBox(CantcreateDC);/是否在棋盘内if(point.x3

13、0&point.x30&point.yBitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);/表示存在白棋wzqpxpy=1;/检查是否结束over(point);/换黑棋下colorwhite=false;elseif(wzqpxpy=0)Dc.SelectObject(m_bmblack);pDC-BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=-1;over(point);colorwhite=true;CView:OnLButtonUp(nFlags,point);由上面可

14、以看出,当鼠标键松开时判断,如果那个位置没有棋子,则放下,并把棋盘数组赋相应的值:1或-1。是否结束:接着是用一个over()函数判断是否结束,是则结束并重新开始;否则,接着把鼠标变成对方棋子,表示对方下棋。那over()函数又是怎样的呢?此函数是利用刚下棋的位置为中心,检查它各个方向上的连续五个棋子是否同色,是则结束并重新开始。然而,我们又是怎样判断一个方向上的五个棋子的同色的?这就涉及地为什么我要把五子棋数组赋值为1和-1的问题。因为这样有一个好处:利用连续五个棋子的值相加,如果它们的值的绝对值等于5,则说明是同色。当然,这只是这样赋值的一点作用,真正的作用将在后面介绍。添加如下:void

15、CMy3_1View:over(CPointpoint)/获取鼠标指向数组位置,即中心位置intx=(point.x-30)/20;inty=(point.y-30)/20;/计算开始判断的坐标xx,yyintxx,yy;if(x4)xx=0;elsexx=x-4;if(y4)yy=0;elseyy=y-4;inti,j,a;/横向判断for(i=xx;i15;i+)a=0;for(j=i;ji+5;j+)a=a+wzqjy;/五个都是白棋if(a=5)AfxMessageBox(白棋胜!);/重新开始OnStart();return;/五个都是黑棋if(a=-5)AfxMessageBox(

16、黑棋胜!);OnStart();return;/竖向判断for(i=yy;i15;i+)a=0;for(j=i;ji+5;j+)a=a+wzqxj;if(a=5)AfxMessageBox(白棋胜!);OnStart();return;if(a=-5)AfxMessageBox(黑棋胜!);OnStart();return;/向右下角/判断起点位置if(xy)if(xx=0)yy=y-x;elseif(yy=0)xx=x-y;/参数over=1时退出循环intover=0;doa=0;for(i=0;i5;i+)if(xx+i)19|(yy+i)(18-x)if(x13)yy=y-(18-x)

17、;xx=18;elseyy=y-4;xx=x+4;elseif(y5)xx=x+y;yy=0;elseyy=y-4;xx=x+4;over=0;doa=0;for(i=0;i=0|(yy+i)19)a=a+wzqxx-iyy+i;if(a=5)AfxMessageBox(白棋胜!);OnStart();return;if(a=-5)AfxMessageBox(黑棋胜!);OnStart();return;/到了边界elseover=1;xx-=1;yy+=1;while(over=0);现在,我们的人对人游戏就完成了。下面介绍附加内容。5.附加内容理论上,这个游戏并无须保存,因为它确实太小了。

18、事实上,这个游戏有保存的功能,由于我们学习的需要。这个游戏的保存,与其说是学习文件的保存,不如说是我们学习字符串的操作。另外,这个附加的内容并不是为了当前的学习而添加的,而是为了后面的学习和应用而铺垫的。保存文件:保存文件函数是一个菜单选项。它的作用就是保存当前游戏的状态。首先,我们应该为我们自己的文件定义一个后缀名:.wzq;接着是打开保存文件的公共对话框,如果确定,则表示保存,那么就先获取文件名,然后按照一定的顺序保存各个点的数组的值,最后保存当前是哪种颜色下棋。voidCMy3_1View:OnSave()/TODO:Addyourcommandhandlercodehere/设置保存的

19、文件,后缀名wzqCFileDialogdlg(FALSE,wzq,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(*.WZQ)|*.wzq|AllFiles|*.*|,this);/如果公共类对话框为确定if(dlg.DoModal()=IDOK)/获取文件名dlg.GetFileName();/否则,退出elsereturn;/字符串变量CStringstr;inti,j;CStdioFilefile;/如果有问题,退出if(file.Open(dlg.GetFileName(),CFile:modeCreate|CFile:modeWrite|CFi

20、le:typeText)=0)AfxMessageBox(saveerror!);return;/循环把棋盘数组的值写进文件for(i=0;i19;i+)for(j=0;j19;j+)if(wzqij=-1)file.WriteString(-1n);if(wzqij=0)file.WriteString(0n);if(wzqij=1)file.WriteString(1n);/保存当前下棋颜色if(colorwhite=true)file.WriteString(1n);elsefile.WriteString(0n);/关闭文件file.Close();读取文件:读文件就是把我们以前保存的

21、文件打开,读取当前打开文件的内容,并给数组赋值使和文件内容相同,然后可以继续进行游戏。/与保存文件相反voidCMy3_1View:OnOpen()/TODO:AddyourcommandhandlercodehereCFileDialogdlg(TRUE,wzq,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(*.WZQ)|*.wzq|AllFiles|*.*|,this);if(dlg.DoModal()=IDOK)dlg.GetFileName();elsereturn;CStringstr;inti,j,m;CStdioFilefile;if(fi

22、le.Open(dlg.GetFileName(),CFile:modeRead)=0)AfxMessageBox(saveerror!);return;CArchivear(&file,CArchive:load);for(i=0;i19;i+)for(j=0;j30&point.x30&point.yBitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=1;over(point);colorwhite=false;/保存白棋位置vspoint=point;/计算机下棋computerdown();/人对人if(vscompute

23、r=2)if(point.x30&point.x30&point.yBitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=1;over(point);colorwhite=false;elseif(wzqpxpy=0)Dc.SelectObject(m_bmblack);pDC-BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=-1;over(point);colorwhite=true;CView:OnLButtonUp(nFlags,point);由上面可知,我们

24、对人对机游戏的方法是采用:人下完了之后,检查是否胜利,是则结束游戏,重新开始,并改为黑棋(即计算机)先下;如果人没有胜利,也改为计算机下。而对于计算机怎么下棋,我们只是用了一个函数computerdown()表示。但是现在我们并不能运行程序,因为有一个没有定义的函数,怎么办呢?程序扩展思想:添加一个空函数!仔细看程序的话,你还会发现一个变量Cpointvspoint,这是后来添加的它的用处是保存刚才白棋下的位置,有利于黑棋下棋时的定位。接着,我们的主要问题就是实现computerdown()函数,让计算机能够自动下棋!计算机下棋:计算机是怎样下棋?这就是定位的问题了。即搜索棋盘,找出一个最佳点

25、,放下黑棋。我们实现的方法是:全盘搜索,并把搜索到的位置,保存在变量。由于有多种情况,我们定义变量如下:CPointbpointcan4,/这个位置空,它旁边有四个黑棋wpointcan4,/这个位置空,它旁边有四个白棋bpointcan3,/这个位置空,它的旁边有三个黑棋wpointcan3,/这个位置空,它的旁边有三个白棋bpointcan2,/这个位置空,它的旁边有两个黑棋wpointcan2,/这个位置空,它的旁边有两个白棋bpointcan1;/不是以上情况,这个位置空并在搜索之前都赋值为(-1,-1),然后,进行搜索,并把相应的值保存在相应变量里面,而如果前面已经对变量赋值,我们依

26、然赋值,用新值代替旧值。注意:我们只保存最后一个值,这样的一个好处是,避免了每次都从左上角开始,并且它的随机性比随机函数还随机。全盘搜索完之后,由于上面的变量中至少有一个已经被赋值,即不是(-1,-1),我们可以采用多数优先的方法,让已经有多个同色棋子的位置先下棋。其原理是,如果已经有四个黑棋,计算机再下一个黑棋就赢了;否则,如果人已经有四个白棋,那么计算机就必须放下一个黑棋,阻止白棋下一步赢;如果已经有三个黑棋,再下一个黑棋,变成四个;否则,如果已经有三个白棋,下一个黑棋,破坏它;两个棋子的同理;否则,在刚才白棋下的地方,顺便找一个位置,下棋。computerdown()函数如下:/轮到计算

27、机下棋voidCMy3_1View:computerdown()/把各种情形赋值为如下bpointcan4=(-1,-1);wpointcan4=(-1,-1);bpointcan3=(-1,-1);wpointcan3=(-1,-1);bpointcan2=(-1,-1);wpointcan2=(-1,-1);bpointcan1=(-1,-1);/搜索最好的落棋点for(inti=0;i19;i+)for(intj=0;jBitBlt(point.x*20+32,point.y*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpoint.xpoint.y=-1;/由于原

28、来我们检查是否结束时用的是鼠标点下的坐标,而现在/putdown(CPointpoint)函数用的是数组棋盘的坐标,所以必须转换CPointoverpoint;overpoint.x=point.x*20+30;overpoint.y=point.y*20+30;over(overpoint);colorwhite=true;搜索最佳落棋点:现在就剩下voidbestputdown(inti,intj)函数没有定义了(虽然前面的变量函数已经说明了,当时我们这里是用程序扩展的思路进行的,故如此说明)。它的实现原理是:在四个方向上,各自计算那个方向上棋子的状态,我们的思路是利用原来定义的白棋为1,

29、黑棋为-1,的思想,让同个方向上的五个棋子的值相加,取绝对值并赋值给为这个方向定义的局部变量numi。为什么要用五个棋子的值相加呢?因为,如果几个棋子是同色的,无论黑白,它的绝对值必然大,而对于几个棋子中有黑棋和白棋的,其值必然相加而抵消变小。所以我们可以利用这种方法来寻找旁边有多个同色棋子的空位置(前面已经具体说明)。在每一个棋盘位置,计算以它为起点的四个方向(横、竖、撇、捺),再比较这四个方向中哪个值最大,然后在这个方向上寻找落棋点。我们添加函数如下:/检查四个方向,各算出五个棋子的和并赋值voidCMy3_1View:bestputdown(inti,intj)/四个方向的值intnum

30、4;inta,k;/num0-a=0;if(i15)for(k=0;k5;k+)a=a+wzqi+kj;num0=abs(a);/num1|a=0;if(j15)for(k=0;k5;k+)a=a+wzqij+k;num1=abs(a);/num2a=0;if(i15&j15)for(k=0;k4)&(j15)for(k=0;k=b)point.x=0;point.y=a;elsepoint.x=1;point.y=b;if(cpoint.y)point.x=2;point.y=c;if(dpoint.y)point.x=3;point.y=d;returnpoint;而另外的四个函数,有其相

31、似性,分别介绍如下:voidsearchcandown4(inti,intj,intn)函数:如果最大值是四,它必然有一个空位置;我们可以这样计算,如果第一个是空,那我们把它赋值给相应变量;否则,先找那个空位置,然后判断第一个棋子的颜色,并赋相应的值。/由于相似,下面代码只解释第一个方向/有四个同色棋voidCMy3_1View:searchcandown4(inti,intj,intn)intk;/num0-if(n=0)for(k=0;k5;k+)/如果第一个是空if(wzqij=0)/如果下面有白棋if(wzqi+1j=1)/下面位置可以下棋,已经有四个白棋wpointcan4.x=i;

32、wpointcan4.y=j;break;else/下面位置可以下棋,已经有四个黑棋bpointcan4.x=i;bpointcan4.y=j;break;/如果找到下棋位置,一定能找到!elseif(wzqi+kj=0)/如果第一个是白棋if(wzqjj=1)wpointcan4.x=i+k;wpointcan4.y=j;break;/否则第一个是黑棋elsebpointcan4.x=i+k;bpointcan4.y=j;break;/num1|if(n=1)for(k=0;k5;k+)if(wzqij=0)if(wzqij+1=1)wpointcan4.x=i;wpointcan4.y=j

33、;break;elsebpointcan4.x=i;bpointcan4.y=j;break;elseif(wzqij+k=0)if(wzqij=1)wpointcan4.x=i;wpointcan4.y=j+k;break;elsebpointcan4.x=i;bpointcan4.y=j+k;break;/num2if(n=2)for(k=0;k5;k+)if(wzqij=0)if(wzqi+1j+1=1)wpointcan4.x=i;wpointcan4.y=j;break;elsebpointcan4.x=i;bpointcan4.y=j;break;elseif(wzqi+kj+k=

34、0)if(wzqij=1)wpointcan4.x=i+k;wpointcan4.y=j+k;break;elsebpointcan4.x=i+k;bpointcan4.y=j+k;break;/num3/if(n=3)for(k=0;k5;k+)if(wzqij=0)if(wzqi-1j+1=1)wpointcan4.x=i;wpointcan4.y=j;break;elsebpointcan4.x=i;bpointcan4.y=j;break;elseif(wzqi-kj+k=0)if(wzqij=1)wpointcan4.x=i-k;wpointcan4.y=j+k;break;else

35、bpointcan4.x=i-k;bpointcan4.y=j+k;break;voidsearchcandown3(inti,intj,intn)函数:如果最大值是三,它有两种情况,一种是三个同色和两个空;一种是四个同色和一个异色。前一种必定能找到一个空位置,赋值;后一种必定找不到空位置,不赋值。所以我们的想法很简单,先找到空位置,证明有三个同色,这对于玩五子棋来说三个同色是很重要的,再判断是哪种颜色,赋相应的值。/最多有三个同色voidCMy3_1View:searchcandown3(inti,intj,intn)intk=0;/num0-if(n=0)for(k=0;k5;k+)/找到

36、位置if(wzqi+kj=0)/下一个是白棋if(wzqi+k+1j=1)/下面位置可以下棋,已经有三个白棋wpointcan3.x=i+k;wpointcan3.y=j;/下一个是黑棋elseif(wzqi+k+1j=-1)bpointcan3.x=i+k;bpointcan3.y=j;/num1|if(n=1)for(k=0;k5;k+)if(wzqij+k=0)if(wzqij+k-1=1)wpointcan3.x=i;wpointcan3.y=j+k;elseif(wzqij+k+1=-1)bpointcan3.x=i;bpointcan3.y=j+k;/num2if(n=2)for(

37、k=0;k5;k+)if(wzqi+kj+k=0)if(wzqi+k+1j+k+1=1)wpointcan3.x=i+k;wpointcan3.y=j+k;elseif(wzqi+k+1j+k+1=-1)bpointcan3.x=i+k;bpointcan3.y=j+k;/num3/if(n=3)for(k=0;k5;k+)if(wzqi-kj+k=0)if(wzqi-k-1j+k+1=1)wpointcan3.x=i-k;wpointcan3.y=j+k;elseif(wzqi-k-1j+k+1=-1)bpointcan3.x=i-k;bpointcan3.y=j+k;voidsearchc

38、andown2(inti,intj,intn)函数:如果最大值是二,也有两种情况:一种是有两个同色和三个空位置;一种是有三个同色和一个异色和一个空位置,并且只算三个同色不连在一起的情况(因为如果有三个连续的情况,重全盘搜索的角度看,必然会被另外的情况所代替)。分两种算法:一种是有一个空位置,一种是有三个空位置。前者先找到空位置,再判断它下面两个是否同色,同色则赋值给相应变量,异色则不赋值,因为意义不大;后者只要找到一个空位置就行了。/最多有两个同色voidCMy3_1View:searchcandown2(inti,intj,intn)intk=0,m=0,a=0,b=0;/num0-if(n

39、=0)/判断有多少个空位置for(k=0;k5;k+)if(wzqi+kj=0)m+=1;/如果只有一个空位置if(m=1)for(a=0;a5;a+)/找到空位置if(wzqi+aj=0)/下面两个棋子值的和b=wzqi+a+1j+wzqi+a+2j;/都是黑棋if(b=-2)/下面位置可以下棋,旁边有两个黑棋bpointcan2.x=i+a;bpointcan2.y=j;/都是白棋if(b=2)wpointcan2.x=i+a;wpointcan2.y=j;/如果有三个空位置,说明另外两个同色if(m=3)for(a=0;a5;a+)/如果两个是黑棋if(wzqi+aj=-1)for(b=

40、0;b5;b+)/如果找到空位置if(wzqi+bj=0)/下面位置可以下棋,旁边有两个黑棋bpointcan2.x=i+b;bpointcan2.y=j;break;else/如果两个是白棋if(wzqi+aj=1)for(b=0;b5;b+)if(wzqi+bj=0)wpointcan2.x=i+b;wpointcan2.y=j;break;/num1|m=0;if(n=1)for(k=0;k5;k+)if(wzqij+k=0)m+;if(m=1)for(a=0;a5;a+)if(wzqij+a=0)b=wzqij+a+1+wzqij+a+2;if(b=-2)bpointcan2.x=i;

41、bpointcan2.y=j+a;if(b=2)wpointcan2.x=i;wpointcan2.y=j+a;if(m=3)for(a=0;a5;a+)if(wzqij+a=-1)for(b=0;b5;b+)if(wzqij+b=0)bpointcan2.x=i;bpointcan2.y=j+b;break;elseif(wzqij+a=1)for(b=0;b5;b+)if(wzqij+b=0)wpointcan2.x=i;wpointcan2.y=j+b;break;/num2m=0;if(n=2)for(k=0;k5;k+)if(wzqi+kj+k=0)m+;if(m=1)for(a=0

42、;a5;a+)if(wzqi+aj+a=0)b=wzqi+a+1j+a+1+wzqi+a+2j+a+2;if(b=-2)bpointcan2.x=i+a;bpointcan2.y=j+a;if(b=2)wpointcan2.x=i+a;wpointcan2.y=j+a;if(m=3)for(a=0;a5;a+)if(wzqi+aj+a=-1)for(b=0;b5;b+)if(wzqi+bj+b=0)bpointcan2.x=i+b;bpointcan2.y=j+b;break;elseif(wzqi+aj+a=1)for(b=0;b5;b+)if(wzqi+bj+b=0)wpointcan2.x=i+b;wpointcan2.y=j+b;break;/num

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论