五子棋 課程設(shè)計(jì)完整報(bào)告 C++版_第1頁
五子棋 課程設(shè)計(jì)完整報(bào)告 C++版_第2頁
五子棋 課程設(shè)計(jì)完整報(bào)告 C++版_第3頁
五子棋 課程設(shè)計(jì)完整報(bào)告 C++版_第4頁
五子棋 課程設(shè)計(jì)完整報(bào)告 C++版_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

課程設(shè)計(jì)的目的計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)是計(jì)算機(jī)網(wǎng)絡(luò)原理課程之后的實(shí)踐加強(qiáng)環(huán)節(jié),通過本設(shè)計(jì)的訓(xùn)練使學(xué)生加深對網(wǎng)絡(luò)協(xié)議的理解,并實(shí)踐制定通信規(guī)則,同時(shí)通過實(shí)踐,進(jìn)一步掌握套接字編程方法,為大型網(wǎng)絡(luò)編程打下堅(jiān)實(shí)基礎(chǔ)。通過本次課程設(shè)計(jì)的學(xué)習(xí)與實(shí)踐,使學(xué)生能達(dá)到知識與技能兩方面結(jié)合的目標(biāo)。1.熟練掌握網(wǎng)絡(luò)的基本概念和原理。2.熟練掌握網(wǎng)絡(luò)編程接口Winsock概念及編程原理3.掌握基于TCP/IP的Internet編程技術(shù)。4.掌握軟件開發(fā)的過程及思想。二.課程設(shè)計(jì)內(nèi)容本課程設(shè)計(jì)的內(nèi)容是通過對傳輸層協(xié)議TCP和UDP和客戶/服務(wù)器數(shù)據(jù)通信的原理及方式的掌握,實(shí)現(xiàn)五子棋的局域網(wǎng)對戰(zhàn)。(一)TCP連接的套接字的使用(1).服務(wù)器端套接字的實(shí)現(xiàn)1.創(chuàng)建socket2.綁定3.監(jiān)聽4.接受連接5.發(fā)送和接受數(shù)據(jù)6.關(guān)閉(2)客戶端套接字的實(shí)現(xiàn)1.創(chuàng)建socket2.連接到服務(wù)器3.發(fā)送和接受數(shù)據(jù)4.斷開連接(二)游戲規(guī)則:一、陽線和陰線1、陽線:棋盤上可見的橫縱直線。

2、陰線:棋盤上無實(shí)線連接的隱形斜線。二、連:在棋陽線和陰線的任意一條線上形成的有5個或5個以上的同色棋子不間隔地緊緊相連。五連:在棋盤上形成的5個同色棋子的“連”。三、開發(fā)環(huán)境及實(shí)現(xiàn)所用語言開發(fā)環(huán)境:MicrosoftVisualC++6.0語言:C++四、程序流程圖五、主要代碼套接字的使用方法1)服務(wù)器端套接字的實(shí)現(xiàn)#include"stdafx.h"#include"FiveChess.h"#include"ServerSocket.h"#include"FiveChessView.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CServerSocketCServerSocket::CServerSocket(){}CServerSocket::~CServerSocket(){}//Donoteditthefollowinglines,whichareneededbyClassWizard.#if0BEGIN_MESSAGE_MAP(CServerSocket,CSocket) //{{AFX_MSG_MAP(CServerSocket) //}}AFX_MSG_MAPEND_MESSAGE_MAP()#endif //0///////////////////////////////////////////////////////////////////////////////CServerSocketmemberfunctionsBOOLCServerSocket::Init(UINTport,CFiveChessView*view){ m_uPort=port; m_view=view; if(Create(m_uPort)==FALSE)//創(chuàng)建socket { AfxMessageBox("ServerSocketCreateError"); returnFALSE; } if(this->Listen()==FALSE)//監(jiān)聽socket { AfxMessageBox("ServerListenError"); returnFALSE; } returnTRUE;}voidCServerSocket::OnAccept(intnErrorCode)//接受客戶端連接的消息{ CSocket::OnAccept(nErrorCode); m_view->ProcessPendingAccept();//調(diào)用視圖類中的接受連接處理函數(shù)}2)客戶端套接字的實(shí)現(xiàn)#include"stdafx.h"#include"FiveChess.h"#include"ClientSocket.h"#include"FiveChessView.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CClientSocketCClientSocket::CClientSocket(){ m_aSessionIn=NULL; m_aSessionOut=NULL; m_sfSocketFile=NULL; m_bInit=false; m_bClose=false;}CClientSocket::~CClientSocket(){ if(m_aSessionIn) deletem_aSessionIn; if(m_aSessionOut) deletem_aSessionOut; if(m_sfSocketFile) deletem_sfSocketFile;}//Donoteditthefollowinglines,whichareneededbyClassWizard.#if0BEGIN_MESSAGE_MAP(CClientSocket,CSocket) //{{AFX_MSG_MAP(CClientSocket) //}}AFX_MSG_MAPEND_MESSAGE_MAP()#endif //0///////////////////////////////////////////////////////////////////////////////CClientSocketmemberfunctionsvoidCClientSocket::OnReceive(intnErrorCode)//數(shù)據(jù)接收消息的處理函數(shù){ CSocket::OnReceive(nErrorCode); do { CMessgtemp; temp.Serialize(*m_aSessionIn);//輸入數(shù)據(jù)的串行化 m_view->m_sMsgList+=temp.m_strText+"\r\n";//加入新的對話內(nèi)容 //把新的對話內(nèi)容顯示在主視圖窗口的一個edit控件中。 m_view->m_outputedit.SetWindowText(m_view->m_sMsgList); //把Edit窗口中顯示的內(nèi)容滾到當(dāng)前的位置 m_view->m_iLineCurrentPos=m_view->m_outputedit.GetLineCount(); m_view->m_outputedit.LineScroll(m_view->m_iLineCurrentPos); //判斷對方發(fā)送過來的數(shù)據(jù)是否是落子的位置 if(m_view->m_match.CanDown(temp.m_x,temp.m_y,m_view->m_who%2+1)) { //是對方發(fā)送的落子信息 m_view->m_turn=temp.m_turn;//該輪到我走棋了 m_view->Invalidate(FALSE);//刷新視圖,顯示對方的走子位置 //對方是否贏了 if(m_view->m_match.IsWin(m_view->m_who%2+1,temp.m_x,temp.m_y)) { m_view->m_bWin=TRUE;//對方贏了 m_view->m_bOver=TRUE; m_view->Invalidate(FALSE); AfxMessageBox("你輸了");//顯示輸棋的對話框 m_view->m_outputedit.SetWindowText(m_view->m_sMsgList); m_view->m_iLineCurrentPos=m_view->m_outputedit.GetLineCount(); m_view->m_outputedit.LineScroll(m_view->m_iLineCurrentPos); } } } while(!m_aSessionIn->IsBufferEmpty());}voidCClientSocket::Init(CFiveChessView*view)//socket串行化數(shù)據(jù)的初始工作{ m_sfSocketFile=newCSocketFile(this); m_aSessionIn=newCArchive(m_sfSocketFile,CArchive::load); m_aSessionOut=newCArchive(m_sfSocketFile,CArchive::store); m_bClose=false; this->m_view=view;}BOOLCClientSocket::SendMessage(CMessg*msg)//發(fā)送數(shù)據(jù)到對方{ if(m_aSessionOut!=NULL) {msg->Serialize(*m_aSessionOut);//輸出串行化m_aSessionOut->Flush();//直接發(fā)送returnTRUE; } else {//對方關(guān)閉了連接m_bClose=true;CloseSocket(); //m_view->CloseSessionSocket();returnFALSE; }}voidCClientSocket::CloseSocket(){ if(m_aSessionIn) { deletem_aSessionOut; m_aSessionIn=NULL; } if(m_sfSocketFile) { deletem_aSessionOut; m_sfSocketFile=NULL; } Close(); m_bInit=false; m_bClose=true;}voidCClientSocket::OnClose(intnErrorCode)//對方關(guān)閉了Socket的消息處理{ m_bClose=true; CloseSocket(); CSocket::OnClose(nErrorCode);}intCClientSocket::GetLocalHostName(CString&sHostName)//獲得本地計(jì)算機(jī)名稱{ charszHostName[256]; intnRetCode; nRetCode=gethostname(szHostName,sizeof(szHostName)); if(nRetCode!=0) { //產(chǎn)生錯誤 sHostName=_T("沒有取得"); returnGetLastError(); } sHostName=szHostName; return0;}intCClientSocket::GetIPAddress(constCString&sHostName,CString&slpAddress)//獲得本地ip{ structhostentFAR*lpHostEnt=gethostbyname(sHostName); if(lpHostEnt==NULL) { //產(chǎn)生錯誤 slpAddress=_T(""); returnGetLastError(); } //獲取IP LPSTRlpAddr=lpHostEnt->h_addr_list[0]; if(lpAddr) { structin_addrinAddr; memmove(&inAddr,lpAddr,4); //轉(zhuǎn)換為標(biāo)準(zhǔn)格式 slpAddress=inet_ntoa(inAddr); if(slpAddress.IsEmpty()) slpAddress=_T("沒有取得"); } return0;}intCClientSocket::GetIPAddress(constCString&sHostName,BYTE&f0,BYTE&f1,BYTE&f2,BYTE&f3)//獲得本地IP{ structhostentFAR*lpHostEnt=gethostbyname(sHostName); if(lpHostEnt==NULL) { //產(chǎn)生錯誤 f0=f1=f2=f3=0; returnGetLastError(); } //獲取IP LPSTRlpAddr=lpHostEnt->h_addr_list[0]; if(lpAddr) { structin_addrinAddr; memmove(&inAddr,lpAddr,4); f0=inAddr.S_un.S_un_b.s_b1; f1=inAddr.S_un.S_un_b.s_b2; f2=inAddr.S_un.S_un_b.s_b3; f3=inAddr.S_un.S_un_b.s_b4; } return0;}棋盤、棋子畫法及服務(wù)器端、客戶端處理函數(shù)的實(shí)現(xiàn)#include"stdafx.h"#include"FiveChess.h"#include"FiveChessDoc.h"#include"FiveChessView.h"#include"ClientSocket.h"#include"ClientDlg.h"#include"ServerDlg.h"#include"MsgEdit.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CFiveChessViewIMPLEMENT_DYNCREATE(CFiveChessView,CView)BEGIN_MESSAGE_MAP(CFiveChessView,CView) //{{AFX_MSG_MAP(CFiveChessView) ON_COMMAND(ID_Setclient,OnSetclient) ON_COMMAND(ID_Setserver,OnSetserver) ON_WM_LBUTTONDOWN() ON_WM_SIZE() ON_WM_DESTROY() //}}AFX_MSG_MAP //Standardprintingcommands ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CFiveChessViewconstruction/destructionCFiveChessView::CFiveChessView(){ //TODO:addconstructioncodehere m_bIsClient=FALSE; m_bIsInit=FALSE; m_bOver=FALSE; m_bWin=FALSE; m_turn=1;//服務(wù)器先走,黑棋 gridHeight=gridWid=30; this->m_inputedit.SetParent(this);}CFiveChessView::~CFiveChessView(){}BOOLCFiveChessView::PreCreateWindow(CREATESTRUCT&cs){ //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs returnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CFiveChessViewdrawing///////////////////////////////////////////////////////////////////////////////CFiveChessViewprintingBOOLCFiveChessView::OnPreparePrinting(CPrintInfo*pInfo){ //defaultpreparation returnDoPreparePrinting(pInfo);}voidCFiveChessView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addextrainitializationbeforeprinting}voidCFiveChessView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CFiveChessViewdiagnostics#ifdef_DEBUGvoidCFiveChessView::AssertValid()const{ CView::AssertValid();}voidCFiveChessView::Dump(CDumpContext&dc)const{ CView::Dump(dc);}CFiveChessDoc*CFiveChessView::GetDocument()//non-debugversionisinline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFiveChessDoc))); return(CFiveChessDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CFiveChessViewmessagehandlersvoidCFiveChessView::OnDraw(CDC*pDC){CFiveChessDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); CBrushback(RGB(125,125,20));//繪制棋盤的刷子 pDC->SelectObject((CBrush*)&back); CRectrect; rect.left=LEFTDIS; rect.right=LEFTDIS+(LW-1)*gridWid; rect.top=TOPDIS; rect.bottom=TOPDIS+(LW-1)*gridWid; pDC->FillRect(&rect,&back);//繪制棋盤 CPenpen(PS_SOLID,2,RGB(25,25,255));////繪制網(wǎng)格線的筆 pDC->SelectObject((CPen*)&pen); inti,j; CPointpos; for(i=0;i<LW;i++)//豎值的線 { pos.x=LEFTDIS+gridWid*i; pos.y=TOPDIS; pDC->MoveTo(pos); pos.y=TOPDIS+(LW-1)*gridWid; pDC->LineTo(pos); } for(i=0;i<LW;i++)//水平的線 { pos.x=LEFTDIS; pos.y=TOPDIS+gridWid*i; pDC->MoveTo(pos); pos.x=LEFTDIS+(LW-1)*gridWid; pDC->LineTo(pos); } CBrushwhitebrush(RGB(255,255,255));//繪制黑棋的刷子 CBrushblackbrush(RGB(0,0,0));//繪制白棋的刷子 for(i=0;i<LW;i++)//掃描整個棋盤 for(j=0;j<LW;j++) { if(m_match.chessboard[i][j]==1)//黑棋 { pDC->SelectObject((CBrush*)&blackbrush); pDC->Ellipse( j*gridWid+LEFTDIS-gridWid/2, i*gridWid+TOPDIS-gridWid/2, j*gridWid+LEFTDIS+gridWid/2, i*gridWid+TOPDIS+gridWid/2); } elseif(m_match.chessboard[i][j]==2)//白棋{pDC->SelectObject((CBrush*)&whitebrush); pDC->Ellipse( j*gridWid+LEFTDIS-gridWid/2, i*gridWid+TOPDIS-gridWid/2, j*gridWid+LEFTDIS+gridWid/2, i*gridWid+TOPDIS+gridWid/2); } elseif(m_match.chessboard[i][j]==3) { CBrushredbrush(RGB(255,0,0));//用紅色的刷子顯示關(guān)鍵的5個棋子 pDC->SelectObject((CBrush*)&redbrush); pDC->Ellipse( j*gridWid+LEFTDIS-gridWid/2, i*gridWid+TOPDIS-gridWid/2, j*gridWid+LEFTDIS+gridWid/2, i*gridWid+TOPDIS+gridWid/2); } } CRectdst; this->GetWindowRect(rect); //移動兩個動態(tài)的CEdit控件,作為輸入對話框和顯示對話框 m_outputedit.MoveWindow(CRect(10,rect.bottom-200,rect.right-10,rect.bottom-140),false); m_inputedit.MoveWindow(CRect(10,rect.bottom-140,rect.right-10,rect.bottom-100),false);}voidCFiveChessView::OnSetserver()//菜單項(xiàng)"開啟服務(wù)器"的消息處理函數(shù){ CServerDlgdlg; if(dlg.DoModal()==IDOK)//服務(wù)器端口設(shè)置對話框 { m_bIsClient=FALSE;//做游戲的服務(wù)器端 m_bIsInit=TRUE;//已經(jīng)初始化 m_port=dlg.m_iPort;//得到輸入的端口號 m_ListenSocket.Init(m_port,this);//開始監(jiān)聽端口 }}voidCFiveChessView::OnSetclient()//菜單項(xiàng)"連接服務(wù)器"的消息處理函數(shù){CClientDlgdlg;intret=dlg.DoModal();//設(shè)置服務(wù)器的IP和端口if(ret==IDOK)//用戶點(diǎn)擊了"確定"{ m_bIsClient=TRUE;//做游戲的服務(wù)器端 m_bIsInit=TRUE;//已經(jīng)初始化 m_port=dlg.m_iPort;//得到用戶輸入的服務(wù)器端的端口 for(inti=0;i<4;i++) m_bIP[i]=dlg.m_bIP[i];//得到用戶輸入的服務(wù)器端的IP地址 this->m_ip.Format("%d.%d.%d.%d",dlg.m_bIP[0],dlg.m_bIP[1],dlg.m_bIP[2],dlg.m_bIP[3]); m_ClientSocket.Create();//創(chuàng)建會話socket if(m_ClientSocket.Connect(LPCSTR(m_ip),m_port))//連接到服務(wù)器端 { m_ClientSocket.Init(this);//初始化會話socket m_who=2;//客戶端用白子 AfxMessageBox("成功的連接到服務(wù)器,可以開始游戲了"); } else { m_ClientSocket.Close();//連接失敗 AfxMessageBox("clientconnectionfailed"); } }}voidCFiveChessView::ProcessPendingAccept()//處理客戶端socket連接的函數(shù){if(m_ListenSocket.Accept(m_ClientSocket)==FALSE)//分配一個會話socket{ AfxMessageBox("SeverListenSocketError"); return;}else{ m_who=1;//服務(wù)器端用黑棋,黑棋先行 m_ClientSocket.Init(this);//初始化會話socket m_outputedit.SetWindowText("有人進(jìn)來了"); AfxMessageBox("有人進(jìn)來了"); }}voidCFiveChessView::GetLocalIP()//得到本機(jī)的IP地址,調(diào)用CClientSocket中的靜態(tài)函數(shù){ staticBOOLfirst=TRUE; if(first==TRUE) {CClientSocket::GetLocalHostName(m_sLocalName);CClientSocket::GetIPAddress(m_sLocalName,m_bIP[0],m_bIP[1],m_bIP[2],m_bIP[3]);m_ip.Format("%d.%d.%d.%d",m_bIP[0],m_bIP[1],m_bIP[2],m_bIP[3]); first=FALSE; }}voidCFiveChessView::SendInputMsg(CStringin)//在聊天輸入框中輸入對話的消息函數(shù){// AfxMessageBox("InputEdit"); if(!m_bIsInit)//如果網(wǎng)絡(luò)還沒有連接好則不準(zhǔn)輸入 { //AfxMessageBox("NOConnection"); return; } CMessgmsg; in.TrimRight(""); m_inputedit.SetWindowText(""); if(in.GetLength()>2) { m_sMsgList+=in+"\r\n";//添加聊天的內(nèi)容 m_outputedit.SetWindowText(m_sMsgList);//輸出到聊天顯示框 m_iLineCurrentPos=m_outputedit.GetLineCount(); m_outputedit.LineScroll(m_iLineCurrentPos);//滾動到當(dāng)前的位置 msg.m_strText=in; m_ClientSocket.SendMessage(&msg);//發(fā)送聊天的內(nèi)容到另外一端 } }voidCFiveChessView::OnInitialUpdate()//初始化{ CView::OnInitialUpdate(); staticbooloninitialupdatchaving=false;//只需要初始化調(diào)用一次 if(oninitialupdatchaving==false) { if(::AfxSocketInit()==FALSE)//winsock初始化 { AfxMessageBox("socketiniterror"); } GetLocalIP();//得到本機(jī)的IP地址 CRectrect; this->GetWindowRect(rect); //創(chuàng)建兩個動態(tài)的CEdit控件,作為輸入對話框和顯示對話框 m_outputedit.Create(ES_MULTILINE|WS_CHILD|WS_VISIBLE|WS_TABSTOP| WS_BORDER|ES_READONLY,CRect(10,rect.bottom-200,rect.right-10,rect.bottom-140),this,1); m_inputedit.Create(ES_MULTILINE|WS_CHILD|WS_VISIBLE|WS_TABSTOP| WS_BORDER|ES_AUTOVSCROLL,CRect(10,rect.bottom-140,rect.right-10,rect.bottom-100),this,2); }}voidCFiveChessView::OnLButtonDown(UINTnFlags,CPointpoint)//處理鼠標(biāo)左鍵按下的消息{ if(m_bOver==TRUE)//比賽是否已經(jīng)結(jié)束 { if(AfxMessageBox("你想要重新開始游戲嗎",MB_YESNO)==IDYES) { //重新開始游戲 m_bIsClient=FALSE; m_bIsInit=FALSE; m_turn=1; m_bOver=false; m_match.Clear(); m_bWin=FALSE; Invalidate(FALSE); return; } } if(m_turn==m_who)//輪到本機(jī)走棋 { m_POS[0]=(int)((point.y-TOPDIS)/30.0+0.5); m_POS[1]=(int)((point.x-LEFTDIS)/30.0+0.5); if(m_match.CanDown(m_POS[1],m_POS[0],m_who)==TRUE)//這個位置是否可以落子 { Invalidate(FALSE);//重新繪制棋子和棋盤 m_turn=m_who%2+1;//輪到對方走棋 CMessgmsg; msg.m_turn=m_turn; msg.m_x=m_POS[1]; msg.m_y=m_POS[0]; m_ClientSocket.SendMessage(&msg);//發(fā)送落子的位置 if(m_match.IsWin(m_who,m_POS[1],m_POS[0]))//判斷是否贏棋 { m_bWin=TRUE; m_bOver=TRUE; Invalidate(FALSE); AfxMessageBox("你贏了!"); m_sMsgList+="你贏了!"; m_outputedit.SetWindowText(m_sMsgList+"\r\n"); } } } else { m_sMsgList+="不該你走棋\r\n";m_outputedit.SetWindowText(m_sMsgList);}CView::OnLButtonDown(nFlags,point);}voidCFiveChessView::OnSize(UINTnType,intcx,intcy){ CView::OnSize(nType,cx,cy); //TODO:Addyourmessagehandlercodehere}3、游戲規(guī)則及勝負(fù)判定#include"stdafx.h"#include"FiveChess.h"#include"Match.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////Match::Match(){ for(inti=0;i<LW;i++) for(intj=0;j<LW;j++) { chessboard[i][j]=0; }}Match::~Match(){}voidMatch::Clear(){ for(inti=0;i<LW;i++) for(intj=0;j<LW;j++) { chessboard[i][j]=0; }}BOOLMatch::CanDown(intx,inty,intwho)//判斷在x,y位置是否能落子{ CStringstr;// str.Format("x:%dy:%dchessboard:%d",x,y,chessboard[]);// AfxMessageBox(str); if(x<0||x>=LW||y<0||y>=LW) returnFALSE; if(chessboard[y][x]!=0) returnFALSE; chessboard[y][x]=who; returnTRUE;}BOOLMatch::IsWin(intwho,intx,inty){ inti=0; intj=0; //水平方向 for(i=y,j=(x-4>=0?x-4:0);j<(x+4>=LW?LW-1:x+4);j++) { while(i>=0&&i<LW&&j>=0&&j<LW&&chessboard[i][j]!=who) j++; intcount=0; while(i>=0&&i<LW&&j>=0&&j<LW&&chessboard[i][j++]==who) count++; if(count>=5) { j--;j--; while(count--) chessboard[i][j--]=3;//標(biāo)記勝出的幾顆棋子 returntrue; } } //垂直方向 for(j=x,i=(y-4>=0?y-4:0);i<(y+4>=LW?LW-1:y+4);i++)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論