版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
年4月19日人員管理系統(tǒng)完整設(shè)計報告資料內(nèi)容僅供參考,如有不當(dāng)或者侵權(quán),請聯(lián)系本人改正或者刪除。江蘇師范大學(xué)科文學(xué)院本科生課程設(shè)計課程名稱:VisualC++題目:人員管理系統(tǒng)專業(yè)班級:11電信1學(xué)生姓名:劉海騰學(xué)生學(xué)號:日期:.12.28指導(dǎo)教師:姜芳艽科文學(xué)院教務(wù)部印制一、課程設(shè)計目的、任務(wù)和內(nèi)容要求:《計算機語言程序設(shè)計》是一門以編程實踐為主的專業(yè)課,目的在于培養(yǎng)學(xué)生利用計算機語言進行軟件開發(fā)所必須的基本思想和基本技能,進一步提高綜合應(yīng)用計算機語言的各種編程知識和技巧進行程序設(shè)計的能力,經(jīng)過本次課程設(shè)計,學(xué)生應(yīng)能達到具備設(shè)計功能較為復(fù)雜的應(yīng)用程序的能力,同時培養(yǎng)學(xué)生自主學(xué)習(xí)和獨立創(chuàng)新的精神。任務(wù)如下:1.進行需求分析和概要設(shè)計,給出流程圖。2.寫出詳細(xì)設(shè)計,熟悉其中采用的關(guān)鍵技術(shù)。3.給出具體的編碼實現(xiàn)并調(diào)試。4.寫課程設(shè)計報告提交源程序。內(nèi)容要求:設(shè)計并完成軟件系統(tǒng)。要求:1.應(yīng)具有簡潔友好的用戶界面。2.要求軟件系統(tǒng)的功能完整。3.要求程序具備正確性,可讀性和運行的高效性。二、進度安排:第1~3天:查找資料,進行需求分析和概要設(shè)計;第4~6天:各模塊的詳細(xì)設(shè)計;第7~12天:軟件實現(xiàn)與調(diào)試;第13~14天:寫課程設(shè)計報告并提交源程序。三、主要參考文獻:[1]四維科技,丁展,湯倩.VisualC++游戲開發(fā)技術(shù)與實例[M].北京:人民郵電出版社,[2]求是科技,張宏林.VisualC++6.0程序設(shè)計與開發(fā)技術(shù)大全[M].北京:人民郵電出版社,[3]汪翔,袁輝.VisualC++實踐與提高(網(wǎng)絡(luò)編程篇)[M].北京:中國鐵道出版社,[4]黃維通.VisualC++面向?qū)ο笈c可視化程序設(shè)計[M].北京:清華大學(xué)出版社,[5]謝希任.計算機網(wǎng)絡(luò)(第4版)[M].北京:電子工業(yè)出版社,[6](美)W.RichardStevens.TCP/IP詳解卷1:協(xié)議[M].北京:機械工業(yè)出版社,[7]北京現(xiàn)代富博科技有限公司,陳兵旗,孫明.北京:VisualC++實用圖象處理專業(yè)教程[M].清華大學(xué)出版社,[8]張靜.Windows多媒體編程基礎(chǔ)[M].北京:清化大學(xué)出版社,[9]劉振安,徐峰.Windows實用編程指南[M].北京:人民郵電出版社,1995[10]劉長明,楊工明.VisualC++實踐與提高(多媒體篇)[M].北京:中國鐵道出版社,指導(dǎo)教師簽字:年月日目錄摘要………………………IIAbstract…………………...II1緒論…….……..11.1課題背景…………...11.2課程設(shè)計的目的…………..…………12設(shè)計方案簡述………..…..22.1可行性分析………………..………….22.2需求分析…………………..………….23詳細(xì)設(shè)計……………..………………..33.1窗體設(shè)計………………..……………..33.2游戲項目開發(fā)………..…………………53.2.1棋牌設(shè)置…………..…53.2.2放置棋子功能的開發(fā)………………..63.3.3游戲獲勝決斷的開發(fā)…………………….……….123.2.4游戲的調(diào)試與運行………….……………204設(shè)計結(jié)果及分析………………..…….……………224.1程序的結(jié)果……….………………..224.2結(jié)果分析…………..………………..235總結(jié)……..…………………..………24參考文獻…….………………..………………..………25摘要網(wǎng)絡(luò)游戲的出現(xiàn)代表了一種全新娛樂方式的誕生。當(dāng)前網(wǎng)絡(luò)游戲正以其獨特的魅力吸引著眾多的玩家。隨著游戲產(chǎn)業(yè)的蓬勃發(fā)展,將需要越來越多的人加入到游戲開發(fā)中來。本畢業(yè)設(shè)計所完成的五子棋游戲(網(wǎng)絡(luò)版)是在WindowsXP下使用MicrosoftVisualC++6.0開發(fā)的C/S系統(tǒng),能夠?qū)崿F(xiàn)網(wǎng)絡(luò)間的雙人對戰(zhàn),而且能夠提供多媒體播放功能。系統(tǒng)的多媒體播放功能能夠播放MP3、WMA等主流格式的音樂。本論文從基本網(wǎng)絡(luò)套節(jié)字開始入手,介紹了一些本系統(tǒng)相關(guān)的理論知識,隨后詳細(xì)介紹了五子棋游戲(網(wǎng)絡(luò)版)的開發(fā)過程。包括服務(wù)器端、客戶端的socket編程,五子棋服務(wù)器和客戶端通信的實現(xiàn),五子棋判斷算法的實現(xiàn),主界面視圖,多媒體播放以及定時器等附加功能的實現(xiàn)。最后對系統(tǒng)進行測試并對所做工作進行總結(jié)。關(guān)鍵詞程序設(shè)計;Fivechess;MFC;AbstractAbstractOn-linegamesbringtoanewformofentertainment.Untilnow,on-linegamesischarmingmoreandmoreplayers.Asthedevelopmentofgameindustry,therewillbemoreandmoredevelopersjoininthegamedevelopmentteam.The
on-lineBlack&WhitegamewasdevelopedbyMicrosoftVisualC++6.0onWindowsXPplatform.Inthisgame,twopeoplecanplaythegameonline,andthegamealsoprovidesmultimediaplayerfunction.Thethesisstartwithintroductionofnetworksocketprogramming,thedevelopmentprocessingofthe
on-lineBlack&Whitegameareintroducedindetailasfollowed.Thethesishaveafulltouchonserverandclientsocketprogramming,thecommunicationbetweenserverandclientwasimplemented,thealgorithmofthefive-in-a-rowgame,themultimediaplaybackfunctions.Keywords:program;computer;MFC;Fivechess1課題背景中國民族原創(chuàng)網(wǎng)絡(luò)游戲為中國網(wǎng)絡(luò)游戲產(chǎn)業(yè)所做出了巨大貢獻,民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)成為產(chǎn)業(yè)發(fā)展的主導(dǎo)力量。同樣在中國自主研發(fā)的民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)真正成為中國游戲市場的主導(dǎo)力量。網(wǎng)絡(luò)游戲是經(jīng)過信息網(wǎng)絡(luò)傳播和實現(xiàn)的互動娛樂形式,是一種網(wǎng)絡(luò)與文化相結(jié)合的產(chǎn)業(yè)。近年來,網(wǎng)絡(luò)文化市場發(fā)展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,中國網(wǎng)絡(luò)游戲市場發(fā)展迅速并進入了一個高速增長期,并已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動了相關(guān)產(chǎn)業(yè)的發(fā)展,對促進中國網(wǎng)絡(luò)經(jīng)濟和娛樂業(yè)的發(fā)展、豐富互聯(lián)網(wǎng)時代人民群眾的文化娛樂生活起到了積極作用。1.1設(shè)計目的在程序設(shè)計中,經(jīng)過設(shè)計、編制、調(diào)試一個五子棋的程序,加深對語法及語義分析原理的理解,并實現(xiàn)對命令語句的靈活應(yīng)用。在程序設(shè)計中,能夠用兩種方法解決問題:一是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法,二是更先進的面向?qū)ο蟪绦蛟O(shè)計方法。由于多個函數(shù)均需要訪問某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計為全局變量。而在面向?qū)ο蟪绦蛟O(shè)計中關(guān)鍵是如何將問題域中的實體(即日常所見的概念)抽取出來,作為C++程序中的類,而屬性與行為作為類的兩類要素一般是必不可少的,甚至還應(yīng)考慮類必須滿足的約束。2設(shè)計方案簡述如下是描述整五子棋游戲的流程,開發(fā)一個五子棋游戲需要從兩方面入手。一是游戲規(guī)則,二是技術(shù)。其實,任何軟件開發(fā)都是這兩大類。根據(jù)項目的特點,將不相關(guān)的功能分塊份階段進行。大致流程如下:1.畫棋盤;2畫棋子;3增加下棋制約條件;4.每下一步,判斷輸贏;5.調(diào)試運行。2.1可行性分析游戲設(shè)計已經(jīng)成為現(xiàn)在社會的一種熱門行業(yè)。五子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。這里設(shè)計和實現(xiàn)了一個簡單的五子棋單機游戲。主要應(yīng)用了VisualC++編程來完成這個游戲的設(shè)計的。本文主要介紹了本游戲開發(fā)環(huán)境MicrosoftVisualC++6.0,使用當(dāng)前優(yōu)秀的開發(fā)工具VC++編程。包含了五子棋程序的棋盤初始化、游戲規(guī)則、勝負(fù)判斷。思路簡單明了,程序也較為簡單。能夠靈活運用一學(xué)過的c++知識來編寫程序。2.2需求分析近年來,隨著網(wǎng)絡(luò)的發(fā)展,游戲成為許多人關(guān)注的焦點。與傳統(tǒng)的影音產(chǎn)業(yè)一樣,游戲產(chǎn)業(yè)也是娛樂行業(yè)的一個重要組成部分,基于數(shù)字化的網(wǎng)絡(luò)游戲更讓人們找到了前所未有的感受,并已經(jīng)成為全球互聯(lián)產(chǎn)業(yè)的熱點。五子棋,亦稱”連五子”、”串珠”、”五目”、”五格”等等,日文稱之為”連珠”,英文則稱之為”Gobang”或”Renju”或”FIR(FiveInaRow)”,是起源于中國古代的傳統(tǒng)黑白棋種之一,是一種體現(xiàn)民族特色的休閑游戲,同時能較好的鍛煉人的思維。具有廣闊的開發(fā)前景。3詳細(xì)設(shè)計3.1窗體設(shè)計利用MFCAppWinzard生成五子棋游戲應(yīng)用程序框架具體步驟如下:(1)執(zhí)行VC程序,選擇File|New命令,彈出New對話框.單擊Projects標(biāo)簽,轉(zhuǎn)到Projects選項卡,選擇MFCAppWizard(exe)選項,然后在Projectname文本框中輸入Fivechess_44。Lacation文本框是指項目的本地路徑。(2)單擊按鈕,彈出MFCAppWinzard_Step1對話框。選中單選按鈕,如圖所示。(3)單擊完成按鈕,則建立一個單文檔應(yīng)用框架。3.2游戲項目開發(fā)(四號字黑體)3.2.1棋盤設(shè)計1.在已創(chuàng)立的工程Fivechess_44中添加畫棋盤的函數(shù)。首先在”Fivechess_44.h”頭文件中定義一個用于顯示棋盤的自定義公有函數(shù):voidCheckerboard(CDC*pDC);然后在”Fivechess_44View.cpp”源文件中實現(xiàn)該函數(shù)。代碼如下:voidCFivechess_44View::Checkerboard(CDC*pDC){ for(inti=0;i<20;i++)//連續(xù)畫20條豎線 { pDC->MoveTo(i*50,0);//畫筆移動到(i*50,0)點 pDC->LineTo(i*50,1000);//畫筆從(i*50,0)點到(i*50,1000)點 }for(i=0;i<20;i++)//連續(xù)畫20條橫線 { pDC->MoveTo(0,i*50); pDC->LineTo(1000,i*50); }}2.在應(yīng)用程序框架的OnDraw()函數(shù)中調(diào)用該畫棋盤函數(shù),將pDC對象作為實參傳遞給Checkerboard()函數(shù),代碼如下:voidCFivechess_44View::OnDraw(CDC*pDC){ CFivechess_44Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahereCheckerboard(pDC);//調(diào)用自定義的畫鍵盤函數(shù)}3.編譯運行得到如下效果:一個空棋盤3.2.2放置棋子功能的開發(fā)按照規(guī)劃,棋子使用鼠標(biāo)的左鍵和右鍵(分別用這兩鍵來表示下棋的雙方)來進行單機下棋,即是當(dāng)用戶單擊左鍵時,下黑色棋子,,用戶單擊右鍵時,下白色棋子。因此,必須為鼠標(biāo)添加鼠標(biāo)左鍵和鼠標(biāo)右鍵單擊的鼠標(biāo)消息處理函數(shù),步驟如下:1.右擊CFivechessView類,調(diào)用添加消息處理函數(shù)的對話框,選擇AddwindowsMessageHandler2.添加消息處理函數(shù)WM_LBUTTONDOWN和WM_RBUTTONDOWN這兩個消息處理函數(shù)。然后點擊EditExisiting退出對話框。并添加消息處理函數(shù)代碼。如下圖所示:添加鼠標(biāo)左鍵和右鍵的消息處理函數(shù):(1).左鍵消息voidCFivechess_44View::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault CBrush*brush=newCBrush(RGB(0,0,0));//定義黑色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該黑色畫刷 for(inti=0;i<1000;i+=50) {for(intj=0;j<1000;j+=50) {CRectrect(i,j,i+50,j+50);if(rect.PtInRect(point)){CPointtempPoint; tempPoint=rect.CenterPoint(); pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); } } }CView::OnLButtonDown(nFlags,point);}(2).右鍵消息voidCFivechess_44View::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultCBrush*brush=newCBrush(RGB(255,255,255));//定義白色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該白色畫刷 for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50);//每格都信定義一矩形if(rect.PtInRect(point))//如果鼠標(biāo)點在該矩形內(nèi){CPointtempPoint; tempPoint=rect.CenterPoint();//獲取矩形中心,用于畫棋子 pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); } } } CView::OnRButtonDown(nFlags,point);}到此便將畫棋盤和棋子的代碼編好,編譯運行如下:左擊鼠標(biāo)左鍵畫黑點,右擊鼠標(biāo)右鍵畫白點3.但程序至此尚有兩點未解決:其一,下棋子的約束條件,即雙方按順序一人下一次才可第二次落棋子。其二,同一方格不能重復(fù)下棋子;解決第一個問題,添加以下代碼:在CFivechess_44View中添加一個公有的整形變量intRightORLet;//定義保存左鍵或右鍵下棋的標(biāo)記變量構(gòu)造函數(shù)將下棋的順序初始化為左鍵先下CFivechess_44View::CFivechess_44View(){ //TODO:addconstructioncodehereRightORLet=0;//初始化默認(rèn)左鍵先下}修改鼠標(biāo)的左鍵和右鍵的單擊消息處理函數(shù),在畫棋子之前判斷輪到哪方下棋,代碼如下:左鍵代碼:voidCFivechess_44View::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultif(RightORLeft==0){ CBrush*brush=newCBrush(RGB(0,0,0));//定義黑色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該黑色畫刷 for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50);if(rect.PtInRect(point)){CPointtempPoint; tempPoint=rect.CenterPoint(); pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); } } }RightORLeft++;//鼠標(biāo)狀態(tài)變化為0}CView::OnLButtonDown(nFlags,point);}右鍵代碼:voidCFivechess_44View::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultif(RightORLeft==1){CBrush*brush=newCBrush(RGB(255,255,255));//定義白色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該白色畫刷 for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50);//每格都信定義一矩形if(rect.PtInRect(point))//如果鼠標(biāo)點在該矩形內(nèi){CPointtempPoint; tempPoint=rect.CenterPoint();//獲取矩形中心,用于畫棋子 pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); } } }RightORLeft--;//鼠標(biāo)狀態(tài)變化為1,鼠標(biāo)右鍵按下后,再次改變鼠標(biāo)狀態(tài) } CView::OnRButtonDown(nFlags,point);} 其二,解決第二個問題:在Fivechess_44View.h頭文件中加入3行公有代碼,而且在該頭文件中包含vector的頭文件,代碼如下:#include<vector>lassCFivechess_44View:publicCView{…………;std::vector<CPoint>chessVec;boolisLocation(CPointcp); voidLocation(CPointcp);………..;}(2)根據(jù)函數(shù)名在正確位置添加或修改以下函數(shù)<1>.添加實現(xiàn)放置棋子函數(shù)額判斷放置許可函數(shù):boolCFivechess_44View::isLocation(CPointcp){ boolisLoc=true; for(inti=0;i<chessVec.size();i++) { if(cp.x==chessVec[i].x&&cp.y==chessVec[i].y) { isLoc=false; } } returnisLoc;}voidCFivechess_44View::Location(CPointcp){ chessVec.push_back(cp);}<2>修改鼠標(biāo)左鍵和右鍵單擊的消息處理函數(shù)代碼如下,并注意為了消除該缺陷,”鼠標(biāo)消息標(biāo)志變量變化”的位置有所改變,代碼如下,該代碼已經(jīng)將下棋的全部約束條件全部實現(xiàn)了。voidCFivechess_44View::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault if(RightORLeft==0) { CBrush*brush=newCBrush(RGB(0,0,0));//定義黑色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該黑色畫刷 for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50); CPointtempPoint; tempPoint=rect.CenterPoint(); if(rect.PtInRect(point)&&isLocation(tempPoint)) {//判斷矩形中心點是否已經(jīng)存在 pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint);//畫了該點后,將該點插入到向量中RightORLeft++;//鼠標(biāo)消息標(biāo)志變量變化(注意) } }}} CView::OnLButtonDown(nFlags,point);}voidCFivechess_44View::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault if(RightORLeft==1) { CBrush*brush=newCBrush(RGB(255,255,255));//定義白色畫刷 CDC*pDC=this->GetDC();//選中該白色畫刷pDC->SelectObject(brush); for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50);//與鼠標(biāo)左鍵消息一樣 CPointtempPoint; tempPoint=rect.CenterPoint(); if(rect.PtInRect(point)&&isLocation(tempPoint)) { pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint); RightORLeft--;//鼠標(biāo)消息標(biāo)志變量變化(注意) } } } } CView::OnRButtonDown(nFlags,point);}3.2.3游戲獲勝決斷的開發(fā)1.該功能是棋牌游戲中較難的功能。因此編寫程序時要細(xì)心。游戲規(guī)則是這樣能夠的:如果某一方(黑棋或白棋)在同一行或同一列或同一斜線上具有5個同色的棋子,則該顏色的這一方就獲勝。因此能夠使用一個整形二維數(shù)組來記錄當(dāng)前的棋局情況,二維數(shù)組的值定義如下:0:表示該位子沒有棋子;1:表示該位置已經(jīng)放了黑色棋子;2:表示該位置已經(jīng)放了白色棋子;解決的問題:問題1:要在下每個棋子后,將數(shù)組變量對應(yīng)位置的數(shù)組元素值做改變,變?yōu)椤?”或”2”,這個只需要在鼠標(biāo)消息處理函數(shù)中調(diào)用Location()函數(shù)后改變數(shù)組元素值即可。問題2:下每個棋子后,判斷在這個棋子同一行同一列或同一斜線上是否具有連續(xù)5個同色的棋子,若有,則宣判該方勝利,并退出游戲,如果沒有,則繼續(xù)游戲,輪到下一方下棋。具體實施步驟如下;增加棋盤狀態(tài)記錄數(shù)組。在Fivechess_44View.h頭文件中定義一個公有的整形數(shù)組,如下代碼:intchessArr[20][20];并在視圖類的構(gòu)造函數(shù)中將整形數(shù)組初始化為0,代碼為:CFivechess_44View::CFivechess_44View(){ //TODO:addconstructioncodehereRightORLeft=0;//初始化棋盤,左鍵先下棋 for(inti=0;i<20;i++) { for(intj=0;j<20;j++) { chessArr[i][j]==0;//將棋盤初始化為空棋盤 } }}新增判斷輸贏的函數(shù)。在Fivechess_44View.h頭文件中添加該函數(shù)的定義:boolisWin(CPointcp);將該函數(shù)的代碼寫入Fivechess_44View.cpp源文件中,代碼如下:判斷下棋后棋盤輸贏的函數(shù):boolCFivechess_44View::isWin(CPointcp){ intcp_x=cp.x/50; intcp_y=cp.y/50; inti=cp_x; intj=cp_y; intcount=1; intnowChessColor=chessArr[cp_x][cp_y]; while(1) { if(i>0&&i<20) { i--; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } i=cp_x; while(1) { if(i>0&&i<20) { i++; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } i=cp_x; count=1; while(1) { if(j>0&&j<20) { j--; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y; while(1) { if(j>0&&j<20) { j++; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y; count=1; while(1) { if(j>0&&j<20&&i>0&&i<20) { j++; i++; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y; i=cp_x; while(1) { if(j>0&&j<20&&i>0&&i<20) { j--; i--; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y; i=cp_x; count=1; while(1) { if(j>0&&j<20&&i>0&&i<20) { j++; i--; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y;i=cp_x;while(1) { if(j>0&&j<20&&i>0&&i<20) { j--; i++; if(nowChessColor==chessArr[i][j]) { count++; if(count==5) { returntrue; } } else { break; } } else { break; } } j=cp_y;i=cp_x; count=1;returnfalse;}在鼠標(biāo)消息出來函數(shù)適當(dāng)?shù)奈恢貌迦肱袛嗍欠褛A棋函數(shù),設(shè)計思路是,每下一步棋子,都會以該棋子為基準(zhǔn),做出判斷。其中,鼠標(biāo)左鍵的消息處理函數(shù)修改代碼如下:鼠標(biāo)左鍵具有輸贏判斷的鼠標(biāo)消息處理函數(shù):voidCFivechess_44View::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault if(RightORLeft==0) { CBrush*brush=newCBrush(RGB(0,0,0));//定義黑色畫刷 CDC*pDC=this->GetDC();//獲取當(dāng)前的圖形設(shè)備指針 pDC->SelectObject(brush);//選中該黑色畫刷 for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50); CPointtempPoint; tempPoint=rect.CenterPoint(); if(rect.PtInRect(point)&&isLocation(tempPoint)) {//判斷矩形中心點是否已經(jīng)存在 pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint);//畫了該點后,將該點插入到向量中chessArr[tempPoint.x/50][tempPoint.y/50]=1; if(isWin(point)) { MessageBox("黑色棋子獲勝!"); } RightORLeft++; } } } } CView::OnLButtonDown(nFlags,point);}鼠標(biāo)右鍵具有輸贏判斷的鼠標(biāo)消息處理函數(shù)與左鍵類似,代碼如下:voidCFivechess_44View::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault if(RightORLeft==1) { CBrush*brush=newCBrush(RGB(255,255,255)); CDC*pDC=this->GetDC(); pDC->SelectObject(brush); for(inti=0;i<1000;i+=50) { for(intj=0;j<1000;j+=50) { CRectrect(i,j,i+50,j+50); CPointtempPoint; tempPoint=rect.CenterPoint(); if(rect.PtInRect(point)&&isLocation(tempPoint)) { pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint); chessArr[tempPoint.x/50][tempPoint.y/50]=2; if(isWin(point)) { MessageBox("白色棋子獲勝!"); } RightORLeft--; } } } } CView::OnRButtonDown(nFlags,point);}3.2.4游戲的調(diào)試與運行編譯程序:鼠標(biāo)點擊組建—>全部重建。編譯若出現(xiàn)錯誤提示,則根據(jù)提示修改程序,直至編譯無誤。然后運行。得到的結(jié)果如下未進行游戲時的結(jié)果:開始游戲后的結(jié)果:4設(shè)計結(jié)果及分析4.1程序的結(jié)果黑棋獲勝的結(jié)果為:白棋獲勝的結(jié)果為:4.2結(jié)果分析畫棋子的原理在于,讀取鼠標(biāo)點擊的坐標(biāo)來判斷點擊位所在的格子,然后求出該格子的中心位置坐標(biāo),以該中心位置為圓心畫黑色圓或白色圓。棋牌游戲中都有輪流下棋或出牌的一般性規(guī)則,這種情況下,都采用令牌變量,經(jīng)過令牌變量來判斷當(dāng)前誰有下棋或出牌的權(quán)利。5總結(jié)本畢業(yè)設(shè)計是一款休閑五子棋游戲,離真正意義上的廣域網(wǎng)網(wǎng)絡(luò)游戲還要差距??墒撬呀?jīng)擁有了局域上的連接進行游戲的功能,。在設(shè)計中確實遇到了不少的困難,可是經(jīng)過調(diào)試已經(jīng)解決了絕大多數(shù)問題。游戲設(shè)計已經(jīng)成為現(xiàn)在社會的一種熱門行業(yè)。五子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。這里設(shè)計和實現(xiàn)了一個雙人對下的五子棋單機游戲。主要應(yīng)用了VisualC++編程來完成這個游戲的設(shè)計的。本文主要介紹了本游戲開發(fā)環(huán)境MicrosoftVisualC++6.0,使用當(dāng)前優(yōu)秀的開發(fā)工具VC++編程。包含了五子棋程序的棋盤初始化、游戲規(guī)則、
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商業(yè)綜合體店鋪裝修一體化服務(wù)合同
- 2025年度草莓種植與深加工一體化項目合同3篇
- 課題申報參考:南嶺走廊瑤族傳統(tǒng)建筑壁畫圖像敘事及活化研究
- 課題申報參考:面向患者情緒體驗的大型醫(yī)療設(shè)備系統(tǒng)設(shè)計策略研究
- 課題申報參考:貿(mào)易面向型人工智能規(guī)則的發(fā)展及其特征研究
- 《短視頻編?。哼x題構(gòu)想+腳本制作+劇本策劃+鏡頭拍攝》課件全套 第1-11章 選題方向:從賬號定位出發(fā) - 綜合案例:短劇《錯過》
- 二零二五年度車輛抵押借款合同(含提前還款)4篇
- 二零二五版金融科技項目內(nèi)部股東轉(zhuǎn)讓合同4篇
- 二零二五年度工業(yè)級模具開模設(shè)計與制造合同3篇
- 2025年度新型個人汽車抵押借款合同范本
- 2025年人民教育出版社有限公司招聘筆試參考題庫含答案解析
- 康復(fù)醫(yī)學(xué)治療技術(shù)(士)復(fù)習(xí)題及答案
- 完整版100以內(nèi)加減法混合運算4000道100
- 2024年產(chǎn)權(quán)管理部年終工作總結(jié)例文(3篇)
- 《血管性血友病》課件
- 高三日語一輪復(fù)習(xí)日語助詞「に」和「を」的全部用法課件
- 機場地勤勞動合同三篇
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 《用銳角三角函數(shù)解決問題(3)》參考課件
- 訂婚協(xié)議書手寫模板攻略
- 風(fēng)水學(xué)的基礎(chǔ)知識培訓(xùn)
評論
0/150
提交評論