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

下載本文檔

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

文檔簡介

目錄TOC\o"1-5"\u第一章緒論 31.1課題背景 31.2開發(fā)目的 31.3開發(fā)意義 3第二章需求分析 32.1可行性研究 32.2需求分析 42.2.1功能需求 42.2.2環(huán)境需求 4第三章總體設(shè)計(jì) 43.1系統(tǒng)設(shè)計(jì)思想 43.2系統(tǒng)總體設(shè)計(jì) 53.3游戲截圖 5第四章程序源代碼 6第五章工作總結(jié) 18致謝 19參考文獻(xiàn) 19摘要目前,以計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)為核心的現(xiàn)代網(wǎng)絡(luò)技術(shù)已在現(xiàn)實(shí)生活和生產(chǎn)中得以廣泛的使用,休閑類網(wǎng)絡(luò)游戲集趣味性,娛樂性,互動(dòng)性和益智性于一體,已經(jīng)成為多數(shù)人群的休閑方式。本程序是VC平臺(tái)下的一個(gè)小程序,使用C++語言,基于MFC類庫,所有的類均繼承于MFC類庫,通過對(duì)Socket技術(shù)理解,實(shí)現(xiàn)在局域網(wǎng)內(nèi)客戶端和服務(wù)器之間的連接,通信,以及處理信息字段來獲取具體的信息類型和和內(nèi)容,以實(shí)現(xiàn)程序的聊天內(nèi)容,圖形加載,主機(jī)連接,以及五子棋核心進(jìn)程之間的通信。關(guān)鍵詞:MFC,Socket,客戶端,服務(wù)器第一章緒論1.1課題背景五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(FiveinaRow的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。1.2開發(fā)目的為了迎合廣大五子棋愛好者的需求和交流,設(shè)計(jì)出一款基于網(wǎng)絡(luò)版的五子棋游戲,玩家可以通過網(wǎng)絡(luò)挑選自己喜愛的對(duì)手并同其進(jìn)行比賽,比賽過程中可以進(jìn)行聊天,達(dá)到相互交流經(jīng)驗(yàn)的作用,使其不僅能夠進(jìn)行比賽,同時(shí)也能達(dá)到交友的功能。1.3開發(fā)意義五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深?yuàn)W的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。第二章需求分析2.1可行性研究在很早以前五子棋軟件就已經(jīng)被開發(fā)出來了,當(dāng)時(shí)的五子棋軟件僅提供了“人機(jī)模式”與“雙人模式”?!叭藱C(jī)模式”是指,人與計(jì)算機(jī)進(jìn)行對(duì)弈,計(jì)算機(jī)按照事先編寫好的算法程序來進(jìn)行下棋;“雙人模式”是指,兩個(gè)人通過交替使用同一臺(tái)計(jì)算機(jī)來進(jìn)行下棋。無論是選擇哪一種模式,所有的操作都必須在同一臺(tái)計(jì)算機(jī)上來往完成,棋局無法在異地計(jì)算機(jī)之間來進(jìn)行,故而也叫單機(jī)版五子棋軟件。2.2需求分析2.2.1功能需求能通過網(wǎng)絡(luò)進(jìn)行下棋符合五子棋的基本規(guī)則提供水平坐標(biāo)和垂直坐標(biāo)功能2.2.2環(huán)境需求10/10Mbps共享式HUB一臺(tái)裝有Windows95/98/NT/XP操作系統(tǒng)的計(jì)算機(jī)兩臺(tái)計(jì)算機(jī)的CPU不低于PII450,內(nèi)存不小于64M每臺(tái)計(jì)算機(jī)都應(yīng)配置有TCP/IP協(xié)議第三章總體設(shè)計(jì)3.1系統(tǒng)設(shè)計(jì)思想本系統(tǒng)的功能能夠?qū)崿F(xiàn)一個(gè)在網(wǎng)絡(luò)上供客戶進(jìn)行對(duì)戰(zhàn)的五子棋網(wǎng)絡(luò)游戲,客戶只要登陸到服務(wù)器上,就能選擇任何其它用戶已創(chuàng)建好的游戲,進(jìn)行五子棋對(duì)戰(zhàn)游戲,是C/S模式的網(wǎng)絡(luò)游戲。在C/S模式游戲中,Server一般提供所有用戶的全局信息,并能提供客戶之間的信息轉(zhuǎn)發(fā),客戶之間的通訊必須通過Server進(jìn)行。因?yàn)樵诙鄠€(gè)客戶能夠連接到同一臺(tái)Server上,所以Server必須用Thread負(fù)責(zé)每個(gè)用戶的通訊和消息處理。服務(wù)端程序通過一個(gè)Thread監(jiān)聽客戶端的連接,一旦客戶連接,為該客戶建立連接并啟動(dòng)一個(gè)特定的客戶thread,利用該連接不斷從客戶讀取數(shù)據(jù),實(shí)現(xiàn)客戶和服務(wù)器或者客戶與客戶之間的信息的交互。3.2系統(tǒng)總體設(shè)計(jì)系統(tǒng)使用Socket技術(shù)以及VC多線程機(jī)制結(jié)合在進(jìn)行客戶與服務(wù)端之間信息的交互,但一個(gè)真正實(shí)用程序必須針對(duì)具體應(yīng)用定制一套協(xié)議用于用戶程序之間進(jìn)行交互,而該協(xié)議的定制往往是編寫程序的關(guān)鍵也是核心內(nèi)容,該協(xié)議的完善決定程序是否能夠正常運(yùn)行。所謂協(xié)議就是程序之間交互的信息的格式規(guī)定,服務(wù)端和客戶端都遵循該協(xié)議才能夠進(jìn)行對(duì)話,通俗講是人類之間的語言。3.3游戲截圖圖1開始畫面圖2黑子贏了第四章程序源代碼packagewuziqi1;importjava.applet.*;importjava.applet.Applet;importjava.awt.*;importjava.awt.Color;importjava.awt.event.*;publicclasswuziqiextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{intcolor_Qizi=0;/////////////////////////////旗子的顏色標(biāo)識(shí)0:白子1:黑子intgamestart=0;///////////////////////////////游戲開始標(biāo)志0未開始1游戲中intgamebody[][]=newint[16][16];////設(shè)置棋盤棋子狀態(tài)0無子1白子2黑子Buttonb1=newButton("游戲開始");Buttonb2=newButton("重置游戲");Buttonb3=newButton("退出游戲");LabellblWin=newLabel("");////////////////////狀態(tài)標(biāo)簽CheckboxckbHB[]=newCheckbox[2];/////////////起始復(fù)選框CheckboxGroupckgHB=newCheckboxGroup();////////復(fù)選框組publicvoidinit(){resize(420,360);setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330,100,70,30);b1.addActionListener(this);add(b2);b2.setBounds(330,140,70,30);b2.addActionListener(this);add(b3);b3.setBounds(330,180,70,30);b3.addActionListener(this);ckbHB[0]=newCheckbox("白子先",ckgHB,false);ckbHB[0].setBounds(330,30,70,30);ckbHB[1]=newCheckbox("黑子先",ckgHB,false);ckbHB[1].setBounds(330,60,70,30);add(ckbHB[0]);add(ckbHB[1]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330,280,70,30);setBackground(Color.gray);setBounds(100,100,320,280);setVisible(true);start();}publicvoiditemStateChanged(ItemEvente){if(ckbHB[0].getState())////////////////////////判斷黑子先還是白子先{color_Qizi=0;}else{color_Qizi=1;}}if(x1%20>10){x1+=20;}if(y1%20>10){y1+=20;}x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);}publicvoidmousePressed(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseDragged(MouseEvente){}publicvoidmouseMoved(MouseEvente){}publicvoidpaint(Graphicsg){qipan(g);}publicvoidset_Qizi(intx,inty)/////////////////////////////落子{if(gamestart==0)///////////////////////////////////判斷游戲是否開始{return;}if(gamebody[x/20][y/20]!=0){return;}Graphicsg=getGraphics();if(color_Qizi==1)///////////////////////////////////判斷黑子還是白子{g.setColor(Color.black);color_Qizi=0;}else{g.setColor(Color.white);color_Qizi=1;}g.fillOval(x-10,y-10,20,20);gamebody[x/20][y/20]=color_Qizi+1;if(Game_win_1(x/20,y/20))////////////////////////////////判斷輸贏1橫向{lblWin.setText(Get_qizi_color(color_Qizi)+"贏了!");gamestart=0;}if(Game_win_2(x/20,y/20))////////////////////////////////判斷輸贏2豎向{lblWin.setText(Get_qizi_color(color_Qizi)+"贏了!");gamestart=0;}if(Game_win_3(x/20,y/20))////////////////////////////////判斷輸贏3左斜{lblWin.setText(Get_qizi_color(color_Qizi)+"贏了!");gamestart=0;}if(Game_win_4(x/20,y/20))////////////////////////////////判斷輸贏4右斜{lblWin.setText(Get_qizi_color(color_Qizi)+"贏了!");gamestart=0;}}publicStringGet_qizi_color(intx)///////////////////////返回棋子顏色{if(x==0){return"黑子";}else{return"白子";}}publicvoidqipan(GraphicsG)///////////////////////////畫棋盤15*15{G.setColor(Color.gray);G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(inti=1;i<16;i++){G.drawLine(20,20*i,300,20*i);G.drawLine(20*i,20,20*i,300);}}publicvoidGame_btn_enable(booleane)/////////////////設(shè)置組件初始狀態(tài){b1.setEnabled(e);b2.setEnabled(e);b3.setEnabled(e);ckbHB[0].setEnabled(e);ckbHB[1].setEnabled(e);}publicvoidstart()/////////////////////////////////////游戲開始初始化{gamestart=0;Game_btn_enable(true);b2.setEnabled(false);b3.setEnabled(false);ckbHB[0].setState(true);for(inti=0;i<16;i++){for(intj=0;j<16;j++){gamebody[i][j]=0;}}lblWin.setText("勝負(fù)狀態(tài)");}publicvoidGame_start()/////////////////////////////////////游戲開始{gamestart=1;Game_btn_enable(false);b2.setEnabled(true);b3.setEnabled(true);}publicvoidGame_re()////////////////////////////////////游戲重新開始{repaint();start();repaint();start();}publicvoidGame_stop()//////////////////////////////////////退出游戲{ newMyFrame(); }classMyFrameextendsFrameimplementsActionListener{ Buttonb4,b5,b6; MyFrame() { super("MYWINDOWS"); b4=newButton("\"退出\"將被判為\"輸\"是否繼續(xù)游戲?"); setLayout(newFlowLayout()); add(b4); b4.addActionListener(this); setLayout(newFlowLayout()); b5=newButton("是"); add(b5); b5.addActionListener(this); setLayout(newFlowLayout()); b6=newButton("否"); add(b6); b6.addActionListener(this); addWindowListener(newcloseWin()); setSize(220,100); setVisible(true); } publicvoidactionPerformed(ActionEvente) { if(e.getActionCommand()=="關(guān)閉") { dispose(); } if(e.getSource()==b5) { dispose(); } elseif(e.getSource()==b6) { dispose(); lblWin.setText(Get_qizi_color(color_Qizi)+"贏了!"); } else { return; } }}classcloseWinextendsWindowAdapter{ publicvoidwindowClosing(WindowEvente) { Windoww=e.getWindow(); w.dispose(); }}publicbooleanGame_win_1(intx,inty)/////////////////////////判斷輸贏橫{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_2(intx,inty)/////////////////////////判斷輸贏豎{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1][y1+i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1][y1-i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_3(intx,inty)////////////////////判斷輸贏左斜{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1-i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1+i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_4(intx,inty)////////////////////判斷輸贏右斜{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1+i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1-i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}e

溫馨提示

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

評(píng)論

0/150

提交評(píng)論