![基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc_第1頁(yè)](http://file4.renrendoc.com/view/a30f9b963fc14bbfee97d6c808a964f7/a30f9b963fc14bbfee97d6c808a964f71.gif)
![基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc_第2頁(yè)](http://file4.renrendoc.com/view/a30f9b963fc14bbfee97d6c808a964f7/a30f9b963fc14bbfee97d6c808a964f72.gif)
![基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc_第3頁(yè)](http://file4.renrendoc.com/view/a30f9b963fc14bbfee97d6c808a964f7/a30f9b963fc14bbfee97d6c808a964f73.gif)
![基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc_第4頁(yè)](http://file4.renrendoc.com/view/a30f9b963fc14bbfee97d6c808a964f7/a30f9b963fc14bbfee97d6c808a964f74.gif)
![基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc_第5頁(yè)](http://file4.renrendoc.com/view/a30f9b963fc14bbfee97d6c808a964f7/a30f9b963fc14bbfee97d6c808a964f75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載
基于C#的五子棋游戲開發(fā)【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載青島理工大學(xué)琴島學(xué)院設(shè)計(jì)報(bào)告課題名稱:基于C#的五子棋游戲開發(fā)學(xué)院:計(jì)算機(jī)工程系專業(yè)班級(jí):計(jì)科(專升本)14-21學(xué)號(hào):20140371006學(xué)生:指導(dǎo)教師:青島理工大學(xué)琴島學(xué)院教務(wù)處2015年12月18日學(xué)生指導(dǎo)教師課題名稱基于C#的五子棋游戲開發(fā)設(shè)計(jì)時(shí)間2015。11.23—2015.12。18設(shè)計(jì)地點(diǎn)動(dòng)漫1設(shè)計(jì)目的課程設(shè)計(jì)的目的就是培養(yǎng)學(xué)生的理論聯(lián)系實(shí)際的能力。通過(guò)課程設(shè)計(jì),使得學(xué)生能夠加深對(duì)講授內(nèi)容的理解、累積經(jīng)驗(yàn)、學(xué)會(huì)獨(dú)立上機(jī)調(diào)試程序;并且逐步達(dá)到綜合運(yùn)用網(wǎng)頁(yè)相關(guān)知識(shí),真正掌握。NET技術(shù)的精華,從而達(dá)到熟練應(yīng)用程序設(shè)計(jì)語(yǔ)言的目的.也為將來(lái)做較大的系統(tǒng)打下堅(jiān)實(shí)基礎(chǔ)。通過(guò)本次課程設(shè)計(jì),應(yīng)該達(dá)到以下教學(xué)任務(wù):鞏固所學(xué)知識(shí),培養(yǎng)學(xué)生的上機(jī)實(shí)踐能力以及獨(dú)立調(diào)試程序的能力,更主要的是使學(xué)生了解做項(xiàng)目的大體流程.每一個(gè)小組制定一題,項(xiàng)目成員要在項(xiàng)目經(jīng)理的帶領(lǐng)下,完成項(xiàng)目的所有內(nèi)容.重點(diǎn)掌握ASP。NET網(wǎng)站設(shè)計(jì)開發(fā)流程,界面要友好,功能齊全,完成一個(gè)綜合項(xiàng)目。指導(dǎo)教師評(píng)語(yǔ)系部教研室意見一、需求分析1.選題:通過(guò)學(xué)習(xí)window窗體應(yīng)用程序的開發(fā)與實(shí)現(xiàn),對(duì)C#程序開發(fā)逐漸產(chǎn)生了濃厚的興趣,心中有了設(shè)計(jì)游戲的想法,通過(guò)學(xué)習(xí)和查資料慢慢對(duì)游戲制作有了一定的了解,后來(lái)通過(guò)深入學(xué)習(xí),對(duì)五子棋游戲設(shè)計(jì)有了進(jìn)一步了解,慢慢理清了其中的開發(fā)過(guò)程與原理,最終確定了基于C#五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)項(xiàng)目。2.界面:(1)通過(guò)上網(wǎng)學(xué)習(xí),對(duì)游戲界面風(fēng)格有了一定的認(rèn)知,于是決定走界面美觀風(fēng)。手游中的主界面給人一種簡(jiǎn)單明了的感覺,通常有模式關(guān)卡,讓玩家越玩越帶感,于是決定模仿它們,游戲主界面有四個(gè)模式,玩家可以選擇不同模式進(jìn)行對(duì)弈。如圖1所示:模式四模式三模式二模式一模式四模式三模式二模式一圖1。主界面(2)游戲模式一,雙人對(duì)戰(zhàn)模式。界面右側(cè)有悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕,點(diǎn)擊各按鈕,執(zhí)行各功能。如圖2所示:棋盤棋盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n圖2.模式一界面(3)游戲模式二,人機(jī)對(duì)戰(zhàn)模式。游戲界面中左部是棋盤,悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕,此模式實(shí)現(xiàn)了人和電腦的交互。如圖3所示:棋盤棋盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n圖3.模式二界面(4)游戲模式三,讓子挑戰(zhàn)模式。游戲界面中左部是棋盤,右部有悔棋、返回、排行榜、關(guān)于、重新開始功能選項(xiàng)按鈕。和模式二不同的地方是讓子,開局后棋盤中布好了讓給電腦的白子。正所謂有人的地方就會(huì)有爭(zhēng)斗,游戲中有菜鳥就會(huì)有高手.高手喜歡挑戰(zhàn),于是挑戰(zhàn)模式應(yīng)運(yùn)而生.此模式的界面和模式二界面相同,在此不再重畫。(5)游戲模式四,收拾殘局模式。游戲界面中左部是棋盤,右部有擺棋、對(duì)戰(zhàn)、悔棋、返回、再來(lái)一局功能選項(xiàng)按鈕。和模式二不同的地方是開局,開局后玩家需先擺放棋子,然后點(diǎn)擊對(duì)戰(zhàn)按鈕開始游戲。此模式界面設(shè)計(jì)參造模式二,不再重畫。3。功能劃分:通過(guò)對(duì)五子棋游戲的分析與了解,可知其基本功能有開始、保存、打開、悔棋、認(rèn)輸、和棋、返回、退出及聊天等功能.在這里,由于條件時(shí)間有限,僅實(shí)現(xiàn)悔棋、返回、重新開始及模式選擇等功能.(1)模式選擇功能:在打開游戲后,出現(xiàn)在玩家面前的是模式選擇窗口,即主窗口。玩家可通過(guò)點(diǎn)擊相應(yīng)按鈕進(jìn)入相應(yīng)模式進(jìn)行對(duì)弈。此功能參照手游及單機(jī)小游戲主界面簡(jiǎn)約美觀的特性制作的,多模式的增加符合廣大玩家的喜好。(2)悔棋功能:在每個(gè)模式中都有悔棋功能,在模式一中每次悔棋退后一子,模式二到模式四每次悔棋退后兩子,棋盤開局后就有的讓子的棋子悔棋無(wú)效.人無(wú)完人,誰(shuí)能不犯錯(cuò),根據(jù)玩家的棋藝高低程度難以把握,為了讓玩家不至于因電腦太強(qiáng)對(duì)開發(fā)者產(chǎn)生怨言,從而有了悔棋功能,進(jìn)而對(duì)五子棋菜鳥起引導(dǎo)作用,使其懷著開心的心情與保持興趣走向棋圣之路。對(duì)于高手而言,棋品也是要有的,悔棋功能形同虛設(shè)而已。(3)從新開始功能:此功能是菜鳥提升棋藝的首選功能,當(dāng)玩家進(jìn)行游戲到中途時(shí),因棋勢(shì)不明,或要敗時(shí),不能接受這一現(xiàn)狀,導(dǎo)致心情低落,怎么辦?只需輕輕一點(diǎn),一切回歸起點(diǎn),也就是初始化而已。(4)返回功能:此功能的作用是退出當(dāng)前模式,回到游戲主窗口,也就是模式選擇窗口。方便玩家在各個(gè)模式自由出入,盡情的展現(xiàn)自己的風(fēng)采。(5)人機(jī)對(duì)弈電腦下棋功能:在模式二到模式四中,玩家的對(duì)手都是電腦,電腦棋力取決于開發(fā)者,在某中意義上來(lái)說(shuō),玩家在和開發(fā)者對(duì)弈也是正確的。此功能是程序按照一定的算法循環(huán)掃描,算出己方和敵方最佳落子點(diǎn),再判斷出攻守,選出最終的落子點(diǎn),落子后等待玩家落子。(6)讓子功能:在模式三中,為了增加游戲難度,對(duì)棋藝大成者量身打造了讓子功能。開局后,一般都是黑棋先行,在這里玩家執(zhí)黑,讓電腦1子,棋盤上變成了電腦執(zhí)白先行1子,白棋落在天元位置上,難度一般.玩家贏后,挑戰(zhàn)難度+1,玩家讓電腦2子,棋盤上電腦執(zhí)白先行2子,白棋落在天元位置左右兩側(cè),難度適中,適合一段棋手挑戰(zhàn).玩家贏兩局后,挑戰(zhàn)難度+1,玩家讓電腦3子,棋盤上電腦執(zhí)白先行3子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤交叉線上,難度相對(duì)適中,適合一段及以上棋手挑戰(zhàn)。讓4子和5子也是一樣的原理,難度較高,適合二段及以上棋手挑戰(zhàn).對(duì)戰(zhàn)后,會(huì)在棋盤中部上方顯示讓子數(shù)目,為迎合玩家的虛榮心理而設(shè)計(jì)。(7)判斷勝負(fù)功能:在每個(gè)模式中都需要對(duì)對(duì)局進(jìn)行勝負(fù)判斷,進(jìn)而產(chǎn)生了勝負(fù)判斷功能。其功能原理是對(duì)玩家或電腦下的棋子進(jìn)行循環(huán)掃描,對(duì)各個(gè)方向掃描黑白子雙方是否形成五子連珠,根據(jù)形成五子連珠方判斷勝負(fù),根據(jù)判斷彈出對(duì)應(yīng)的勝負(fù)提示框。再根據(jù)所屬模式對(duì)勝負(fù)后的對(duì)局進(jìn)行參數(shù)修改,如:模式一和模式二,不論勝負(fù)只需對(duì)其進(jìn)行初始化;模式三,玩家勝出,讓子加一,難度增加,需對(duì)其讓子參數(shù)進(jìn)行修改,反之則不進(jìn)行任何處理操作;模式四,玩家勝出,對(duì)局勝出參數(shù)加一,呼應(yīng)必勝模式的讓子布局功能,玩家失敗則不進(jìn)行參數(shù)修改操作等。(8)初始化界面功能:在每個(gè)模式中都需對(duì)窗口界面進(jìn)行初始化,考錄到原有界面運(yùn)行后的效果略顯呆板,為增加美觀性,需要對(duì)各窗口進(jìn)行導(dǎo)入圖片處理,美化界面.根據(jù)對(duì)局情形,在棋盤中部上方顯示提示文字,并在棋盤上顯示存在的棋子,對(duì)各參數(shù)進(jìn)行初始化處理。4.自定義類描述、各類方法描述及添加的命令響應(yīng).如表1所示:表1。用到的類類名描述說(shuō)明Form3模式一游戲窗口類,該類主要對(duì)該模式下的窗口初始化并對(duì)鼠標(biāo)等事件消息進(jìn)行處理,實(shí)現(xiàn)悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能等。Form4模式二游戲窗口類,該類主要對(duì)該模式下的窗口進(jìn)行初始化并對(duì)鼠標(biāo)等事件消息進(jìn)行處理,實(shí)現(xiàn)人機(jī)對(duì)弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等.Form5模式三游戲窗口類,該類主要對(duì)該模式下的窗口進(jìn)行初始化并對(duì)鼠標(biāo)等事件消息進(jìn)行處理,實(shí)現(xiàn)讓子功能、人機(jī)對(duì)弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等。Form6模式四游戲窗口類,該類主要對(duì)該模式下的窗口進(jìn)行初始化并對(duì)鼠標(biāo)等事件消息進(jìn)行處理,實(shí)現(xiàn)擺棋功能、人機(jī)對(duì)弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等。二、總體設(shè)計(jì)1.游戲功能概述打開程序,游戲開始運(yùn)行,登錄進(jìn)入模式窗口,選擇游戲模式窗口彈出,窗口中有四個(gè)模式選擇按鈕,點(diǎn)擊按鈕,分別彈出對(duì)應(yīng)的模式一、二、三、四窗口,完成具體模式的跳轉(zhuǎn)。對(duì)于模式一,玩家點(diǎn)擊鼠標(biāo)進(jìn)行下棋操作,判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子時(shí),在點(diǎn)擊點(diǎn)畫出棋子;如果點(diǎn)擊點(diǎn)在棋盤外或有子時(shí),則不處理,返回等待鼠標(biāo)命令.然后判斷是否存在五子連珠,如果不存在五子連珠,則返回等待鼠標(biāo)命令;如果存在五子連珠,則進(jìn)行判斷勝負(fù)并提示勝負(fù)信息,再調(diào)用OnStart()函數(shù)初始化模式一窗口,重新開始游戲。玩家點(diǎn)擊悔棋按鈕,調(diào)用悔棋功能函數(shù)OnHuiqi(),在窗口中重畫棋盤,去掉最后下的一個(gè)棋子,把悔棋后存在的棋子重新畫在棋盤上。玩家點(diǎn)擊重新開始按鈕,程序調(diào)用OnStart()函數(shù),初始化模式一窗口,重新開始游戲.對(duì)于模式二、三、四,玩家點(diǎn)擊鼠標(biāo)進(jìn)行下棋操作,首先調(diào)用MouseMove函數(shù)。此函數(shù)的作用是判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子時(shí),在點(diǎn)擊點(diǎn)畫出棋子,如果點(diǎn)擊點(diǎn)在棋盤外或有子時(shí),則不處理,返回等待鼠標(biāo)命令。然后調(diào)用gameOver()函數(shù)判斷是否存在五子連珠,如果存在五子連珠,則進(jìn)行判斷勝負(fù)并提示勝負(fù)信息,再調(diào)用OnStart()函數(shù)初始化這一模式窗口,重新開始游戲;如果不存在五子連珠,則調(diào)用AiGo()函數(shù),進(jìn)行電腦掃描最佳落子點(diǎn)完成電腦下棋操作。再調(diào)用Over()函數(shù)判斷是否存在五子連珠,如果不存在五子連珠,則返回等待鼠標(biāo)命令;如果存在五子連珠,則進(jìn)行勝負(fù)判斷并提示勝負(fù)信息,再調(diào)用OnStart()函數(shù)初始化這一模式窗口,重新開始游戲.玩家點(diǎn)擊悔棋按鈕,程序調(diào)用悔棋功能函數(shù)OnHuiqi(),在窗口中重畫棋盤,去掉最后下的兩個(gè)棋子,把悔棋后存在的棋子重新畫在棋盤上。玩家點(diǎn)擊重新開始按鈕,程序調(diào)用OnStart()函數(shù),初始化模式一窗口,重新開始游戲。開始模式選擇窗口1。繪制游戲進(jìn)程圖,如圖4所示:開始模式選擇窗口模式四選擇按鈕模式三選擇按鈕模式二選擇按鈕模式一選擇按鈕模式四選擇按鈕模式三選擇按鈕模式二選擇按鈕模式一選擇按鈕模式四窗口模式三窗口模式二窗口模式一窗口模式四窗口模式三窗口模式二窗口模式一窗口退出退出排行榜排行榜是在點(diǎn)擊點(diǎn)畫出棋子鼠標(biāo)點(diǎn)擊彈起等待鼠標(biāo)命令否悔棋是在點(diǎn)擊點(diǎn)畫出棋子鼠標(biāo)點(diǎn)擊彈起等待鼠標(biāo)命令否悔棋關(guān)于關(guān)于從新開始從新開始等待鼠標(biāo)命令等待鼠標(biāo)命令判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子鼠標(biāo)點(diǎn)擊彈起鼠標(biāo)點(diǎn)擊彈起否否判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無(wú)子是否判斷是否存在五子連珠是否判斷是否存在五子連珠是是在點(diǎn)擊點(diǎn)畫出棋子在點(diǎn)擊點(diǎn)畫出棋子否彈出勝負(fù)提示框否彈出勝負(fù)提示框判斷是否存在五子連珠判斷是否存在五子連珠電腦掃描最佳落子點(diǎn)電腦掃描最佳落子點(diǎn)是是是是否否彈出勝負(fù)提示框判斷是否存在五子連珠彈出勝負(fù)提示框判斷是否存在五子連珠圖4。流程圖詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)1.悔棋功能的實(shí)現(xiàn):為悔棋按鈕添加類向?qū)?,再添加int變量bushu、qi[400]、wzq[19][19],用于記錄先后下棋的具體坐標(biāo),以便于悔棋功能的實(shí)現(xiàn)。bushu用于記錄下棋的落子數(shù),qi[400]用于記錄棋子的具體坐標(biāo),wzq[19][19]用于記錄棋盤上各點(diǎn)存在棋子的黑白及有無(wú)情況。悔棋功能的實(shí)現(xiàn)原理是重新畫出棋盤及悔棋后存在棋子。先判斷是否剛剛開局,bushu不為0,就執(zhí)行悔棋命令,把最后落下的第bushu個(gè)棋子的信息初始化,再畫出棋盤,重畫悔棋后存在的棋子。模式一與模式二、三、四的悔棋不同之處在于悔棋棋子數(shù)。具體代碼如下:privatevoidOnHuiqi(){if(bushu〉0&&star==true){if(colorwhite)colorwhite=false;elseb=newSolidBrush(Color。White);g。FillEllipse(b,20*i+20,20*j+30,20,20);b.Dispose();g.Dispose();}elseif(wzq[i,j]==-1){Graphicsg=this.pictureBox1.Creat(yī)eGraphics();Brushb;b=newSolidBrush(Color。Black);g.FillEllipse(b,20*i+20,20*j+30,20,20);b。Dispose();g.Dispose();}}}}悔棋功能的具體實(shí)現(xiàn)過(guò)程是先判斷是否剛開局,有無(wú)可悔棋的棋子,如果有,就在窗口中重新畫出棋盤,根據(jù)模式不同將最后落下的1個(gè)或2個(gè)棋子的信息初始化,再重新把悔棋后存在的棋子畫在棋盤上。2.鼠標(biāo)點(diǎn)擊落子功能的實(shí)現(xiàn):添加鼠標(biāo)事件處理函數(shù)MouseDown(),先獲取點(diǎn)擊點(diǎn)位置坐標(biāo),再判斷出點(diǎn)擊點(diǎn)是否在棋盤內(nèi)且無(wú)子,當(dāng)點(diǎn)擊點(diǎn)可落子時(shí),就在棋盤上畫出棋子,讓wzq[19][19]記錄該點(diǎn)棋子信息,把該手棋的具體坐標(biāo)交給qi[bushu],用于悔棋操作,后檢查游戲是否形成五子連珠,完成本次落子任務(wù)。具體代碼如下:privat(yī)evoidpictureBox1_MouseDown(objectsender,MouseEventArgse){intx,y;x=(e.X-20)/20;y=(e.Y—30)/20;if(star==true&&x〉=0&&x<19&&y〉=0&&y<19){if(wzq[x,y]==0){Graphicsg=this.pictureBox1.CreateGraphics();Brushb;bushu++;if(colorwhite){b=newSolidBrush(Color.White);wzq[x,y]=1;colorwhite=false;}else{b=newSolidBrush(Color.Black);wzq[x,y]=—1;colorwhite=true;}g.FillEllipse(b,20*x+20,20*y+30,20,20);b。Dispose();g.Dispose();gameOver(x,y);qi[bushu]=x*100+y;}}}鼠標(biāo)點(diǎn)擊落子功能的運(yùn)行過(guò)程是,獲取點(diǎn)擊點(diǎn)坐標(biāo)并進(jìn)行提取處理,方便棋子畫在交叉線上判斷點(diǎn)擊點(diǎn)是否在棋盤內(nèi),如果在棋盤內(nèi)。再判斷點(diǎn)擊點(diǎn)是否有棋子,如果沒有,就根據(jù)上一手棋的顏色在點(diǎn)擊點(diǎn)畫上相反顏色的棋子。調(diào)用gameOver(x,y)方法,判斷是否形成五子連珠,把落子點(diǎn)記錄到qi[bushu]數(shù)組中.3。檢查游戲是否形成五子連珠,判斷游戲是否結(jié)束功能:新建gameOver()函數(shù),進(jìn)行循環(huán)掃描橫豎撇捺四方向上有無(wú)黑子或白子形成五子連珠棋形,判斷游戲是否結(jié)束,是否彈出勝負(fù)提示框。具體代碼如下:privatevoidgameOver(intx,inty){intxx,yy;if(x〈4)xx=0;elsexx=x-4;if(y<4)yy=0;elseyy=y—4;inti,j,a;for(i=xx;i<15;i++){a=0;for(j=i;j<i+5;j++){a=a+wzq[j,y];if(a==5){MessageBox.Show(”白棋勝!”);star=false;return;}if(a==—5){MessageBox.Show(”黑棋勝!");star=false;return;}}}……}先獲取下棋點(diǎn)的坐標(biāo)并轉(zhuǎn)化為棋盤上對(duì)應(yīng)的棋子坐標(biāo),判斷棋子在棋盤上的位子是否在棋盤邊緣。如果是,就從棋盤(0,0)位置開始向后掃描;不是,則從點(diǎn)擊點(diǎn)棋子坐標(biāo)向左上方移動(dòng)四個(gè)交叉位,開始向后掃描。進(jìn)行循環(huán)掃描橫豎撇捺四方向上有無(wú)黑子或白子形成五子連珠棋形,進(jìn)而判斷游戲是否結(jié)束,根據(jù)情況決定是否彈出勝負(fù)提示框。4.讓子功能實(shí)現(xiàn):在模式三中,為了增加游戲難度,開發(fā)者首創(chuàng)讓子功能.開局后,先進(jìn)行讓子布局。一般都是黑棋先行,在這里玩家執(zhí)黑,讓電腦1子,棋盤上變成了電腦執(zhí)白先行1子,白棋落在天元位置上,難度一般.玩家贏后,挑戰(zhàn)難度+1,玩家讓電腦2子,棋盤上電腦執(zhí)白先行2子,白棋落在天元位置左右兩側(cè),難度適中,適合一段棋手挑戰(zhàn)。玩家贏兩局后,挑戰(zhàn)難度+1,玩家讓電腦3子,棋盤上電腦執(zhí)白先行3子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤交叉線上,難度相對(duì)適中,適合一段及以上棋手挑戰(zhàn)。讓4子和5子也是一樣的原理,難度較高,適合二段及以上棋手挑戰(zhàn)。具體代碼如下:privatevoidpictureBox1_MouseMove(objectsender,MouseEventArgse){if(jushu==1&&wzq[9,9]==0&&star==true){Graphicsg=this.pictureBox1.CreateGraphics();Brushb;b=newSolidBrush(Color.White);wzq[9,9]=1;colorwhite=false;g.FillEllipse(b,20*9+20,20*9+30,20,20);b.Dispose();g.Dispose();}……}鼠標(biāo)移動(dòng)讓子功能的運(yùn)行過(guò)程是,判斷是否剛剛開局,如果剛開局,就根據(jù)贏棋局?jǐn)?shù)進(jìn)行讓子布局,把讓電腦先下的棋子在棋盤上畫出來(lái)。如果不是剛開局,說(shuō)明已經(jīng)對(duì)讓子布局處理過(guò),則跳過(guò)不再處理。5。模式選擇窗口到各模式的跳轉(zhuǎn)功能實(shí)現(xiàn):新建四個(gè)window窗體,各自添加按鈕控件,為模式選擇窗口添加四個(gè)模式跳轉(zhuǎn)按鈕并對(duì)其建立點(diǎn)擊事件,完成模式窗口到各模式的跳轉(zhuǎn).具體函數(shù)代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){Form3f3=newForm3();this。Hide();DialogResultdr=f3.ShowDialog();if(dr==DialogResult.OK)this。Visible=true;}調(diào)用此函數(shù)后,會(huì)彈出模式一游戲窗口。其余跳轉(zhuǎn)按鈕代碼處理與此相似,只是彈出的窗體不同,進(jìn)入的模式窗口也就不同,也就實(shí)現(xiàn)了模式窗口的跳轉(zhuǎn)功能。6.人機(jī)對(duì)戰(zhàn)電腦下棋功能:添加電腦下棋方法AiGo(),循環(huán)掃描棋盤上的棋形,算出最優(yōu)下棋點(diǎn)坐標(biāo),處理代碼如下:privatevoidAiGo(){……for(i=0;i<19;i++)for(j=0;j<19;j++){if(a1[x1,y1]<a1[i,j]){y1=j(luò);x1=i;}}for(i=0;i<19;i++)for(j=0;j<19;j++){if(a2[x2,y2]<a2[i,j]){y2=j;x2=i;}}if(a2[x2,y2]>=a1[x1,y1]){px=x2;py=y2;}else{px=x1;py=y1;}}該算法先對(duì)棋盤上的棋子進(jìn)行循環(huán)掃描,分析橫豎撇捺四方向上的棋子分布情況,算出黑白棋子在棋盤上各點(diǎn)的棋形得分情況,分?jǐn)?shù)越高,該點(diǎn)越重要,此部分為函數(shù)中省略部分,由于代碼量龐大,不再闡述。接下來(lái)對(duì)是循環(huán)比較,分別找出黑白棋子在棋盤上的最高得分點(diǎn)坐標(biāo),進(jìn)而比較出二者中的得分最高點(diǎn)坐標(biāo),即最優(yōu)下棋點(diǎn)坐標(biāo)。7.初始化功能的實(shí)現(xiàn):privatevoidOnStart(){for(inti=0;i〈19;i++)for(intj=0;j〈19;j++)wzq[i,j]=0;colorwhite=false;star=true;bushu=0;pictureBox1。Refresh();}在每個(gè)模式中都需對(duì)窗口界面進(jìn)行初始化,對(duì)各參數(shù)進(jìn)行初始化處理。8.返回功能的實(shí)現(xiàn):privat(yī)evoidbutton1_Click(objectsender,EventArgse){this.DialogResult=DialogResult。OK;this.Close();}關(guān)閉子窗體,恢復(fù)隱藏的父窗體。遇到的問(wèn)題及解決方案問(wèn)題1:窗口間的跳轉(zhuǎn),實(shí)現(xiàn)不了。解決方法:查找資料,上網(wǎng)學(xué)習(xí),百度知道,當(dāng)然搜索到的答案不一定正確且不全面,需要反復(fù)嘗試,于是經(jīng)過(guò)慢慢嘗試,解決了窗口跳轉(zhuǎn)問(wèn)題。問(wèn)題2:在窗口中的棋盤上畫棋子,棋子有時(shí)不會(huì)落在交叉線上。解決方法:經(jīng)過(guò)仔細(xì)觀察,總結(jié)規(guī)律,發(fā)現(xiàn)畫棋子用的方法不對(duì),畫在棋盤上的棋子坐標(biāo)與棋盤上的交叉點(diǎn)有出入。經(jīng)過(guò)嘗試,找到了方法,于是改變了畫棋盤的方法,讓每一個(gè)交叉點(diǎn)都有具體的坐標(biāo),這樣,不管鼠標(biāo)點(diǎn)在哪里,想辦法在交叉點(diǎn)坐標(biāo)畫棋子就可以了。問(wèn)題3:實(shí)現(xiàn)悔棋功能時(shí),想著把最后下的棋子去掉,卻實(shí)現(xiàn)不了。解決方法:靜下心來(lái),仔細(xì)看自己編寫的代碼,模擬電腦運(yùn)行調(diào)用程序的先后順序看代碼,想象運(yùn)行的結(jié)果,于是發(fā)現(xiàn)悔棋的棋子信息是初始化了,但沒有在棋盤上表現(xiàn)出來(lái),沒想到好辦法,只好麻煩電腦再重新畫出棋盤,循環(huán)畫出悔棋后存在的棋子。問(wèn)題4:判斷游戲是否結(jié)束,掃描是否產(chǎn)生五子連珠,老是判斷出錯(cuò)誤。解決方法:經(jīng)過(guò)請(qǐng)教度娘后,借鑒了前輩們的方法,完成了游戲結(jié)果分析函數(shù)。問(wèn)題5:加載自己處理的圖片作為游戲棋盤背景,卻加載不進(jìn)去或圖片不管用。解決方法:直接在屬性中設(shè)置背景圖片.問(wèn)題6:人機(jī)對(duì)戰(zhàn),機(jī)器下棋功能的實(shí)現(xiàn),算法寫不出來(lái),沒有頭緒,不知道從何處下手。解決方法:經(jīng)過(guò)多次嘗試失敗后,決定借鑒前輩們的算法,于是搜索到了不少算法,心中的貪念讓人無(wú)法取舍,不知道用哪個(gè)好,看著這些算法不知道怎么用,更不清楚原理。幾經(jīng)波折終于意識(shí)到了自己的當(dāng)務(wù)之急是先理解,于是選了一個(gè)注釋全面的算法,深入理解,經(jīng)過(guò)嘗試學(xué)會(huì)了調(diào)用這個(gè)算法的工作過(guò)程,也實(shí)現(xiàn)了機(jī)器下棋的功能。問(wèn)題7:讓子對(duì)戰(zhàn)模式中讓電腦先下的棋子,怎樣畫在棋盤上,出現(xiàn)了問(wèn)題。解決方法:首先把這些棋子放在了OnPaint()函數(shù)中來(lái)繪制,結(jié)果有偏差,也沒弄懂原因,于是嘗試著在OnLButtonDown()函數(shù)中來(lái)繪制,運(yùn)行界面后棋盤上無(wú)棋子,結(jié)果鼠標(biāo)點(diǎn)擊的一瞬間出現(xiàn)了3顆棋子,這才意識(shí)到鼠標(biāo)事件產(chǎn)生了沖突,也想到了在點(diǎn)擊鼠標(biāo)時(shí),鼠標(biāo)的移動(dòng)事件先觸發(fā),然后點(diǎn)擊事件才被觸發(fā)。想到做到,馬上把這些棋子放在了OnMouseMove()中來(lái)繪制,運(yùn)行正確,讓子對(duì)戰(zhàn)功能完成了.問(wèn)題8:在模式二的制作中,發(fā)現(xiàn)模式一的一些功能模式二都有用到,于是想到了繼承,想讓模式二繼承模式一,嘗試后發(fā)現(xiàn),繼承后的模式二運(yùn)行界面和模式一很像,但是模式二中自建的按鈕卻不見了,變成了模式一中存在的按鈕,和設(shè)計(jì)計(jì)劃產(chǎn)生了誤差。實(shí)現(xiàn)不了。解決方法:經(jīng)過(guò)取舍,決定用笨方法,不怕麻煩,方法重寫一遍,雖然代碼存在冗余,但為了更好的完成設(shè)計(jì)計(jì)劃,先這樣處理,只能以后找機(jī)會(huì)來(lái)完善了??偨Y(jié)與體會(huì)通過(guò)本次課程設(shè)計(jì),學(xué)到了很多知識(shí),接觸了一些以前沒接觸過(guò)的領(lǐng)域,對(duì)C#編程有了深入的了解,也學(xué)會(huì)了很多解決問(wèn)題的方法,認(rèn)識(shí)到了自己的不足,同時(shí)發(fā)現(xiàn)原來(lái)自己也是可以做出小游戲的。在做這個(gè)項(xiàng)目之前,想到了自己會(huì)的和能實(shí)現(xiàn)的功能有哪些,自己會(huì)的也就窗口跳轉(zhuǎn)和鼠標(biāo)處理事件等.于是想著用到這些知識(shí)的項(xiàng)目有哪些是自認(rèn)為可以輕松實(shí)現(xiàn)的,經(jīng)過(guò)對(duì)比選擇了五子棋小游戲開發(fā),因?yàn)檫@個(gè)項(xiàng)目中的棋盤自己是能畫出來(lái)的。對(duì)于下棋而言,也就是一個(gè)鼠標(biāo)處理事件,也能實(shí)現(xiàn)。難點(diǎn)在于人機(jī)對(duì)戰(zhàn)的算法上。于是清楚了自己接下來(lái)要做的事情,對(duì)于未知的先不要去考慮了,自己有多大能耐還不清楚,先做會(huì)做的,能實(shí)現(xiàn)再說(shuō).不做不知道,一做嚇一跳,想著簡(jiǎn)單,做起來(lái)難,往往是在人最得意的時(shí)候來(lái)一記狠得,讓人都不知道怎么著程序突然就報(bào)錯(cuò)了。經(jīng)過(guò)慢慢嘗試,一步步做下來(lái),終于完成了基本功能的實(shí)現(xiàn).接下來(lái)就是一步一步的去完善這個(gè)游戲,如何設(shè)計(jì)的更加有難度與挑戰(zhàn)性,比如在游戲中玩家可以選擇不同的模式來(lái)進(jìn)行游戲,在讓子模式三中玩家可以讓電腦先下幾顆棋子,在玩家獲勝后會(huì)在棋盤中部上方顯示讓子數(shù)量滿足玩家的虛榮心與好勝心,激起玩家的挑戰(zhàn)欲望;如何設(shè)計(jì)的更加有趣味性,比如在模式四中玩家可以通過(guò)下殘局獲得榮譽(yù)稱號(hào),而且還是棋力評(píng)級(jí)稱號(hào),讓玩家對(duì)未知的棋局產(chǎn)生興趣。另外,對(duì)于這個(gè)游戲還有很多需要改進(jìn)的地方,比如讓子模式可以把固定的讓子位置做成隨機(jī)的,這樣給玩家一種未知的探險(xiǎn)感覺,讓玩家全身心的融入到游戲中。還可以在游戲中加入排行榜,得分記錄等功能。對(duì)于這些問(wèn)題,由于時(shí)間問(wèn)題只能在以后的進(jìn)一步學(xué)習(xí)過(guò)程中想辦法對(duì)其進(jìn)行解決與改進(jìn)。項(xiàng)目能夠按計(jì)劃完成,需要技術(shù)與知識(shí)的支持,也少不了個(gè)人的堅(jiān)持與努力,為了以后更好的完成項(xiàng)目,而時(shí)刻努力著。山東凱文科技職業(yè)學(xué)院2011屆畢業(yè)論文基于VisualC++的五子棋游戲設(shè)計(jì)——主要算法的設(shè)計(jì)與實(shí)現(xiàn)學(xué)院:信息學(xué)院學(xué)生姓名:XXX指導(dǎo)教師:張老師專業(yè):軟件技術(shù)班級(jí):08軟件1班完成時(shí)間:20摘要本論文主要闡述以面向?qū)ο蟮某绦蜷_發(fā)語(yǔ)言VC++為開發(fā)工具,設(shè)計(jì)一個(gè)五子棋游戲。本系統(tǒng)是個(gè)小型游戲,可以單機(jī)使用,也可以網(wǎng)絡(luò)兩個(gè)人游戲,也可以和電腦進(jìn)行游戲。論文首先介紹了開發(fā)背景及開發(fā)語(yǔ)言的介紹。然后介紹設(shè)計(jì)該游戲的框架結(jié)構(gòu),然后介紹了程序的設(shè)計(jì)過(guò)程,以及程序的相關(guān)算法。其中算法是我主要負(fù)責(zé)的,算法(Algorithm)是一系列解決問(wèn)題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問(wèn)題的策略機(jī)制。也就是說(shuō),能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出.如果一個(gè)算法有缺陷,或不適合于某個(gè)問(wèn)題,執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問(wèn)題。不同的算法可能用不同的時(shí)間、空間或效率來(lái)完成同樣的任務(wù)。關(guān)鍵詞:游戲,系統(tǒng),圖片,算法,VisualC++AbstractThispapermainlyexpoundsonobject-oriegramminglanguagefordevelopmenttools,designofvc++arenjugame。Thissystemisasmallgame,canusesingle,alsocannetworktwogame,canalsoandcomputergames。Itfirstlyintroducesthedevelopmentbackgroundanddevelopmentoflanguageisintroduced。Andthenintroducedthedesignframestructureofthegame,thenintroducesthedesignprocessoftheprogram,andtherelatedalgorithmprocedures.AmongthemisImainlyresponsiblefortheAlgorithm,theAlgorithm(done)isaseriesofthesolutiontotheproblemofclearinstructions,theAlgorithmrepresentsasystematicapproachdescribethesolvingstrategymechanism。Thatis,tosomeofthestandardinput,inlimitedtimegetrequiredoutput.Ifanalgorithmwithadefect,orisnotsuitableforaproblemis,carryoutthealgorithmwillnotsolvetheproblem。Differentalgorithmmayusedifferenttime,spaceorefficiencytocompletethesametask.Keywords:Thegame,thesystem,pictures,algorithm,VisualC++目錄TO(shè)C\o”1-3”\h\z\u1引言PAGEREF_Toc296063835\h1HYPERLINK\l"_Toc296063836"1。1五子棋介紹PAGEREF_Toc296063836\h11.2開發(fā)背景PAGEREF_Toc296063837\h11。3開發(fā)環(huán)境及運(yùn)行環(huán)境PAGEREF_Toc296063838\h1HYPERLINK\l”_Toc296063839”1.3.1開發(fā)環(huán)境PAGEREF_Toc296063839\h1HYPERLINK\l"_Toc296063840”1.3.2運(yùn)行環(huán)境PAGEREF_Toc296063840\h1HYPERLINK\l”_Toc296063841"2C++簡(jiǎn)介PAGEREF_Toc296063841\h2_Toc296063844"3.2游戲模式類PAGEREF_Toc296063844\h3HYPERLINK\l”_Toc296063845"4主要算法PAGEREF_Toc296063845\h44。1判斷勝負(fù)PAGEREF_Toc296063846\h4HYPERLINK\l"_Toc296063847”4.2人機(jī)對(duì)弈算法PAGEREF_Toc296063847\h6HYPERLINK\l”_Toc296063848"4.2.1獲勝組合PAGEREF_Toc296063848\h6HYPERLINK\l"_Toc296063849"4.2。2落子后處理PAGEREF_Toc296063849\h7HYPERLINK\l”_Toc296063850"4.2。3查找棋盤空位PAGEREF_Toc296063850\h74.2.4落子打分PAGEREF_Toc296063851\h8防守策略PAGEREF_Toc296063852\h10HYPERLINK\l”_Toc296063853"4.2.6選取最佳落子PAGEREF_Toc296063853\h11HYPERLINK\l"_Toc296063854"4.2。7統(tǒng)計(jì)數(shù)據(jù)PAGEREF_Toc296063854\h115幾點(diǎn)補(bǔ)充說(shuō)明PAGEREF_Toc296063855\h156心得體會(huì)PAGEREF_Toc296063856\h15HYPERLINK\l”_Toc296063857"參考文獻(xiàn)PAGEREF_Toc296063857\h16致謝161引言1。1五子棋介紹五子棋是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一.現(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(FiveinaRow的縮寫),亦有“連五子"、“五子連”、“串珠”、“五目”、“五目碰"、“五格"等多種稱謂.五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性.五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問(wèn)“陰陽(yáng)易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂見,又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)"的概念,亦有“點(diǎn)”的連接.它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶.1。2開發(fā)背景當(dāng)前網(wǎng)絡(luò)上流傳的五子棋游戲功能并不盡善盡美,其中最主要的問(wèn)題就是人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)不能夠一起實(shí)現(xiàn),所以我決定開發(fā)[1]一個(gè)既能夠人機(jī)對(duì)戰(zhàn),又能夠進(jìn)行網(wǎng)絡(luò)對(duì)戰(zhàn)的五子棋系統(tǒng).1.3開發(fā)環(huán)境及運(yùn)行環(huán)境1.3.1開發(fā)環(huán)境Intel?Pentium?Y450,2G內(nèi)存,320G硬盤Microsoft?Windows?XPProfessionalMicrosoft?VisualC++6.0Microsoft?DeveloperNetworkforVisualStudio。NET2003VisualAssistX10.1.1301。01。3.2運(yùn)行環(huán)境Intel?Pentium?2及以上處理器,32M以上內(nèi)存,4G以上硬盤Microsoft?Windows?9X/NT操作系統(tǒng)800*600或以上的屏幕分辨率2C++簡(jiǎn)介語(yǔ)言之所以要起名為“C”,是因?yàn)樗侵饕獏⒖寄莻€(gè)時(shí)候的一門叫B的語(yǔ)言,它的設(shè)計(jì)者認(rèn)為C語(yǔ)言是B語(yǔ)言的進(jìn)步,所以就起名為C語(yǔ)言;但是B語(yǔ)言并不是因?yàn)橹斑€有個(gè)A語(yǔ)言,而是B語(yǔ)言的作者為了紀(jì)念他的妻子,他的妻子名字的第一個(gè)字母是B;當(dāng)C語(yǔ)言發(fā)展到頂峰的時(shí)刻,出現(xiàn)了一個(gè)版本叫CwithClass,那就是C++最早的版本,在C語(yǔ)言中增加class關(guān)鍵字和類,那個(gè)時(shí)候有很多版本的C都希望在C語(yǔ)言中增加類的概念;后來(lái)C標(biāo)準(zhǔn)委員會(huì)決定為這個(gè)版本的C起個(gè)新的名字,那個(gè)時(shí)候征集了很多種名字,最后采納了其中一個(gè)人的意見,以C語(yǔ)言中的++運(yùn)算符來(lái)體現(xiàn)它是C語(yǔ)言的進(jìn)步,故而叫C++,成立了C++標(biāo)準(zhǔn)委員會(huì)。C++是一種語(yǔ)言,僅僅是它的語(yǔ)法、特性、標(biāo)準(zhǔn)類庫(kù)就已經(jīng)是一門非常高深的課程,C++設(shè)計(jì)成靜態(tài)類型、和C同樣高效且可移植的多用途程序設(shè)計(jì)語(yǔ)言。設(shè)計(jì)成直接的和廣泛的支援多種程序設(shè)計(jì)風(fēng)格(程序化程序設(shè)計(jì)、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)).設(shè)計(jì)成給程序設(shè)計(jì)者更多的選擇,即使可能導(dǎo)致程序設(shè)計(jì)者選擇錯(cuò)誤。設(shè)計(jì)成盡可能與C兼容,籍此提供一個(gè)從C到C++的平滑過(guò)渡。避免平臺(tái)限定或沒有普遍用途的特性。不使用會(huì)帶來(lái)額外開銷的特性.設(shè)計(jì)成無(wú)需復(fù)雜的程序設(shè)計(jì)環(huán)境。C++標(biāo)準(zhǔn)演變了許多年。C++模板是近幾年來(lái)對(duì)此語(yǔ)言的一種擴(kuò)展,模板是根據(jù)類型參數(shù)來(lái)產(chǎn)生函數(shù)和類的機(jī)制,有時(shí)也稱模板為“參數(shù)化的類型”。使用模板,可以設(shè)計(jì)一個(gè)對(duì)許多類型的數(shù)據(jù)進(jìn)行操作的類,而不需要為每個(gè)類型的數(shù)據(jù)建立一個(gè)單獨(dú)的類。標(biāo)準(zhǔn)模板庫(kù)(StandardTempalteLibrary,STL)和微軟的活動(dòng)模板庫(kù)(ActiveTempalteLibrary,ATL)都基于這個(gè)C++語(yǔ)言擴(kuò)展。C++標(biāo)準(zhǔn)可分為兩部分,C++語(yǔ)言本身和C++標(biāo)準(zhǔn)庫(kù)。C++標(biāo)準(zhǔn)庫(kù)對(duì)于VisualC++是相當(dāng)新的,實(shí)際上微軟只是在發(fā)布VisualC++5.0時(shí)去除了一些“bug”。標(biāo)準(zhǔn)庫(kù)提供了標(biāo)準(zhǔn)的輸入/輸出、字符串、容器(如矢量、列表和映射等)、非數(shù)值運(yùn)算(如排序、搜索和合并等)和對(duì)數(shù)值計(jì)算的支持。應(yīng)該說(shuō),C/C++包含了相對(duì)少的關(guān)鍵字,而且很多最有用的函數(shù)都來(lái)源于庫(kù),C++標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)容器和算法的部分就是STL。??
STL是數(shù)據(jù)結(jié)構(gòu)和算法的一個(gè)框架,數(shù)據(jù)結(jié)構(gòu)包括矢量、列表和映射等,算法包括這些數(shù)據(jù)結(jié)構(gòu)的查找、拷貝和排序等。1994年7月,ANSI/ISOC++標(biāo)準(zhǔn)委員會(huì)投票決定接受STL為C++標(biāo)準(zhǔn)庫(kù)的一部分,這個(gè)建議是根據(jù)AlexStepanov、MengLee和DavidMusser這三人的編程和軟件庫(kù)研究提出的.STL的產(chǎn)生是為了滿足通用性的設(shè)計(jì)目標(biāo),而不是為了提高性能。3軟件架構(gòu)軟件的總體架構(gòu)如圖3.1:二人游戲類二人游戲類一人游戲類一人游戲類游戲類指針游戲類指針棋盤類主界面用戶棋盤類主界面用戶圖3.1軟件架構(gòu)考慮到整個(gè)的下棋過(guò)程(無(wú)論對(duì)方是電腦抑或其他網(wǎng)絡(luò)玩家)可以分為:己方落子、等待對(duì)方落子、對(duì)方落子、設(shè)置己方棋盤數(shù)據(jù)這一系列過(guò)程,因此一人游戲類、二人游戲類和棋盤類之間的關(guān)系參考了AbstractFactory(抽象工廠)模式,以實(shí)現(xiàn)對(duì)兩個(gè)不同模塊進(jìn)行一般化的控制。[2]3.1棋盤類整個(gè)架構(gòu)的核心部分,類名為CTable。封裝了棋盤的各種可能用到的功能[3],如保存棋盤數(shù)據(jù)、初始化、判斷勝負(fù)等。用戶操作主界面,主界面與CTable進(jìn)行交互來(lái)完成對(duì)游戲的操作。3.2游戲模式類用來(lái)管理人機(jī)對(duì)弈/網(wǎng)絡(luò)對(duì)弈兩種游戲模式,類名為CGame.CGame是一個(gè)抽象類,經(jīng)由它派生出一人游戲類COneGame和網(wǎng)絡(luò)游戲類CTwoGame,如圖3.2:抽象類抽象類CGameCOneGameCTwoGameCOneGameCTwoGame圖3。2CGame類派生關(guān)系這樣,CTable類就可以通過(guò)一個(gè)CGame類的指針[4],在游戲初始化的時(shí)候根據(jù)具體游戲模式的要求實(shí)例化COneGame或CTwoGame類的對(duì)象;然后利用多態(tài)性[5],使用CGame類提供的公有接口就可以完成不同游戲模式下的不同功能了。4主要算法五子棋游戲中,有相當(dāng)?shù)钠撬惴ǖ牟糠帧o(wú)論是人機(jī)對(duì)弈,還是網(wǎng)絡(luò)對(duì)弈,都需要合理算法的支持,本節(jié)中將詳細(xì)介紹五子棋中使用的算法。[13]4。1判斷勝負(fù)五子棋的勝負(fù),在于判斷棋盤上是否有一個(gè)點(diǎn),從這個(gè)點(diǎn)開始的右、下、右下、左下四個(gè)方向是否有連續(xù)的五個(gè)同色棋子出現(xiàn),如圖4.1:圖4.1判斷勝負(fù)方向這個(gè)算法也就是CTable的Win成員函數(shù).從設(shè)計(jì)的思想上,需要它接受一個(gè)棋子顏色的參數(shù),然后返回一個(gè)布爾值,這個(gè)值來(lái)指示是否勝利,代碼如下:BOOLCTable::Win(intcolor)const{intx,y;//判斷橫向for(y=0;y<15;y++){for(x=0;x<11;x++){if(color==m_dat(yī)a[x][y]&&color==m_data[x+1][y]&&color==m_data[x+2][y]&&color==m_data[x+3][y]&&color==m_data[x+4][y]){returnTRUE;}}}//判斷縱向for(y=0;y<11;y++){for(x=0;x〈15;x++){if(color==m_data[x][y]&&color==m_data[x][y+1]&&color==m_data[x][y+2]&&color==m_dat(yī)a[x][y+3]&&color==m_dat(yī)a[x][y+4]){returnTRUE;}}}//判斷“\”方向for(y=0;y〈11;y++){for(x=0;x<11;x++){if(color==m_data[x][y]&&color==m_data[x+1][y+1]&&color==m_data[x+2][y+2]&&color==m_data[x+3][y+3]&&color==m_dat(yī)a[x+4][y+4]){returnTRUE;}}}//判斷“/”方向for(y=0;y<11;y++){for(x=4;x〈15;x++){if(color==m_data[x][y]&&color==m_data[x-1][y+1]&&color==m_data[x-2][y+2]&&color==m_data[x-3][y+3]&&color==m_dat(yī)a[x-4][y+4]){returnTRUE;}}}//不滿足勝利條件returnFALSE;}需要說(shuō)明的一點(diǎn)是,由于這個(gè)算法所遵循的搜索順序是從左到右、自上而下,因此在每次循環(huán)的時(shí)候,都有一些坐標(biāo)無(wú)需納入考慮范圍。例如對(duì)于橫向判斷而言,由于右邊界所限,因而所有橫坐標(biāo)大于等于11的點(diǎn),都構(gòu)不成達(dá)到五子連的條件,所以橫坐標(biāo)的循環(huán)上界也就定為11,這樣也就提高了搜索的速度.4.2人機(jī)對(duì)弈算法人機(jī)對(duì)弈算法完全按照CGame基類定義的接口標(biāo)準(zhǔn),封裝在了COneGame派生類之中。下面將對(duì)這個(gè)算法進(jìn)行詳細(xì)地介紹。[14]4.2.1獲勝組合獲勝組合是一個(gè)三維數(shù)組,它記錄了所有取勝的情況。也就是說(shuō),參考于CTable::Win中的情況,對(duì)于每一個(gè)落子坐標(biāo),獲勝的組合一共有15*11*2+11*11*2=572種。而對(duì)于每個(gè)坐標(biāo)的獲勝組合,應(yīng)該設(shè)置一個(gè)[15][15][572]大小的三維數(shù)組。在擁有了這些獲勝組合之后,就可以參照每個(gè)坐標(biāo)的572種組合給自己的局面和玩家的局面進(jìn)行打分,也就是根據(jù)當(dāng)前盤面中某一方所擁有的獲勝組合多少進(jìn)行權(quán)值的估算,給出最有利于自己的一步落子坐標(biāo)。由于是雙方對(duì)弈,所以游戲的雙方都需要一份獲勝組合,也就是:boolm_Computer[15][15][572];//電腦獲勝組合boolm_Pl(wèi)ayer[15][15][572];//玩家獲勝組合在每次游戲初始化(COneGame::Init)的時(shí)候,需要將每個(gè)坐標(biāo)下可能的獲勝組合都置為true。此外,還需要設(shè)置計(jì)算機(jī)和玩家在各個(gè)獲勝組合中所填入的棋子數(shù):intm_Win[2][572];在初始化的時(shí)候,將每個(gè)棋子數(shù)置為0。4.2.2落子后處理每當(dāng)一方落子后,都需要作如下處理:如果己方此坐標(biāo)的獲勝組合仍為true,且仍有可能在此獲勝組合處添加棋子,則將此獲勝組合添加棋子數(shù)加1;如果對(duì)方此坐標(biāo)的獲勝組合仍為true,則將對(duì)方此坐標(biāo)的獲勝組合置為false,并將對(duì)方此獲勝組合添加棋子數(shù)置為-1(不可能靠此組合獲勝)。以玩家落子為例,代碼為:for(i=0;i〈572;i++){//修改狀態(tài)變化if(m_Player[stepPut.x][stepPut。y][i]&&m_Win[0][i]!=—1)m_Win[0][i]++;if(m_Computer[stepPut.x][stepPut.y][i]){m_Computer[stepPut。x][stepPut。y][i]=false;m_Win[1][i]=-1;}}4。2.3查找棋盤空位在計(jì)算機(jī)落子之前,需要查找棋盤的空位,所以需要一個(gè)SearchBlank成員函數(shù)完成此項(xiàng)工作,此函數(shù)需要進(jìn)行不重復(fù)的查找,也就是說(shuō),對(duì)已查找過(guò)的空位進(jìn)行標(biāo)記,并返回找到空位的坐標(biāo),其代碼如下:boolCOneGame::SearchBlank(int&i,int&j,intnowTable[][15]){intx,y;for(x=0;x〈15;x++){for(y=0;y〈15;y++){if(nowTable[x][y]==-1&&nowTable[x][y]?。?){i=x;j=y(tǒng);returntrue;}}}returnfalse;}4.2。4落子打分找到空位后,需要對(duì)這個(gè)點(diǎn)的落子進(jìn)行打分,這個(gè)分?jǐn)?shù)也就是這個(gè)坐標(biāo)重要性的體現(xiàn),代碼如下:intCOneGame::GiveScore(constSTEP&stepPut){inti,nScore=0;for(i=0;i<572;i++){if(m_pTable—>GetColor()==stepPut。color){//玩家下if(m_Pl(wèi)ayer[stepPut.x][stepPut.y][i]){switch(m_Win[0][i]){case1:nScore-=5;break;case2:nScore-=50;break;case3:nScore—=500;break;case4:nScore—=5000;break;default:break;}}}else{//計(jì)算機(jī)下if(m_Computer[stepPut.x][stepPut。y][i]){switch(m_Win[1][i]){case1:nScore+=5;break;case2:nScore+=50;break;case3:nScore+=100;break;case4:nScore+=10000;break;default:break;}}}}returnnScore;}如代碼所示,考慮到攻守兩方面的需要,所以將玩家落子給的分?jǐn)?shù)置為負(fù)值。4.2.5防守策略落子的考慮不單單要從進(jìn)攻考慮,還要從防守考慮.這一細(xì)節(jié)的實(shí)現(xiàn)其實(shí)就是讓計(jì)算機(jī)從玩家棋盤布局分析戰(zhàn)況,然后找出對(duì)玩家最有利的落子位置.整個(gè)過(guò)程如下:for(m=0;m<572;m++){//暫時(shí)更改玩家信息if(m_Player[i][j][m]){temp1[n]=m;m_Pl(wèi)ayer[i][j][m]=false;temp2[n]=m_Win[0][m];m_Win[0][m]=—1;n++;}}ptempTable[i][j]=0;pi=i;pj=j;while(SearchBlank(i,j,ptempTable)){ptempTable[i][j]=2;//標(biāo)記已被查找step.color=m_pTable—>GetColor();step。x=i;step.y=j;ptemp=GiveScore(step);if(pscore>ptemp)//此時(shí)為玩家下子,運(yùn)用極小極大法時(shí)應(yīng)選取最小值pscore=ptemp;}for(m=0;m<n;m++){//恢復(fù)玩家信息m_Player[pi][pj][temp1[m]]=true;m_Win[0][temp1[m]]=temp2[m];}4.2。6選取最佳落子在循環(huán)結(jié)束的時(shí)候,就可以根據(jù)攻、守兩方面的打分綜合地考慮落子位置了.代碼如下:if(ctemp+pscore>cscore){cscore=ctemp+pscore;bestx=pi;besty=pj;}在這之后,重新改變一下棋盤的狀態(tài)(4。2。24.2.7統(tǒng)計(jì)數(shù)據(jù)在對(duì)戰(zhàn)結(jié)束的時(shí)候我們可以查詢一下我們的勝率和一些別的戰(zhàn)斗情況。代碼如下:CStatDlg::CStat(yī)Dlg(CWnd*pParent/*=NULL*/) :CDialog(CStatDlg::IDD,pParent){ //{{AFX_DATA_INIT(CStatDlg) //NOTE:theClassWizardwilladdmemberinitializationhere //}}AFX_DATA_INIT}voidCStatDlg::DoDataExchange(CDat(yī)aExchange*pDX){?CDialog::DoDataExchange(pDX);?//{{AFX_DATA_MAP(CStatDlg) ?//NOTE:theClassWizardwilladdDDXandDDVcallshere //}}AFX_DATA_M(jìn)AP}BEGIN_MESSAGE_MAP(CStatDlg,CDialog)?//{{AFX_M(jìn)SG_MAP(CStat(yī)Dlg) ON_BN_CLICKED(IDC_BTN_RESET,OnBtnReset) //}}AFX_MSG_MAPEND_MESSAGE_(tái)MAP()//CStat(yī)DlgmessagehandlersBOOLCStatDlg::OnI(lǐng)nitDialog(){?CDialog::OnInitDialog();?//TODO:Addextrainitializationhere//讀取姓名CTable*pTable=(CTable*)GetParent()->GetDlgItem(IDC_TABLE);SetDlgItemText(IDC_ST_NAME,pTable-〉m_strMe);ShowStat(yī)();?returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCStatDlg::OnOK(){?//TODO:AddextravalidationhereCFiveApp*pApp=(CFiveApp*)AfxGetApp();//寫入戰(zhàn)績(jī)統(tǒng)計(jì)TCHARstr[10];wsprintf(str,_T("%d"),pApp->m_nWin);::WritePrivateProfileString(_T(”Stats"),_T(”Win”),str,pApp—>m_szIni);wsprintf(str,_T("%d"),pApp—〉m_nDraw);::WritePrivateProfileString(_T("Stats"),_T("Draw"),str,pApp-〉m_szIni);wsprintf(str,_T("%d"),pApp—>m_nLost);::WritePrivateProfileString(_T(”Stats”),_T(”Lost"),str,pApp—>m_szIni);?CDialog::OnOK();}voidCStatDlg::OnBtnReset(){ //TODO:AddyourcontrolnotificationhandlercodehereCFiveApp*pApp=(CFiveApp*)AfxGetApp();pApp—〉m_nWin=0;pApp->m_nDraw=0;pApp-〉m_nLost=0;ShowStat();}voidCStatDlg::ShowStat(){CFiveApp*pApp=(CFiveApp*)AfxGetApp();CStringstr;str.Format(_T(”%d"),pApp->m_nWin);SetDlgItemText(IDC_ST_WIN,str);str.Format(_T("%d”),pApp->m_nDraw);SetDlgItemText(IDC_ST_DRAW,str);str.Format(_T(”%d”),pApp->m_nLost);SetDlgItemText(IDC_ST_LOST,str);//計(jì)算勝率if(0==pApp-〉m_nWin){str=_T(”勝率:0%");}else{str。Format(_T("勝率:%d%%”),pApp->m_nWin*100/(pApp—〉m_nWin+pApp—>m_nDraw+pApp->m_nLost));}SetDlgItemText(IDC_ST_PERCENT,str);}代碼執(zhí)行后的效果圖如下:圖4.2效果圖5幾點(diǎn)補(bǔ)充說(shuō)明考慮到程序的響應(yīng)速度,人機(jī)對(duì)弈算法只對(duì)玩家的棋子進(jìn)行了一步的推測(cè)。由于計(jì)算機(jī)在落子時(shí)選取的是得分最高的一步落子,所以如果玩家在開局的時(shí)候不改變落子步驟,那么將會(huì)獲得從頭至尾相同的棋局。考慮到下棋同時(shí)還要聊天,所以并未對(duì)落子時(shí)間加入任何限制,同樣如果玩家離開游戲也不會(huì)判負(fù)。對(duì)于人機(jī)對(duì)弈的悔棋處理,由于這個(gè)算法的開銷相當(dāng)大,每一步落子都會(huì)存在不同的棋盤布局,所以實(shí)現(xiàn)從頭到尾的悔棋不是很現(xiàn)實(shí)(將會(huì)存在過(guò)多的空間保存棋盤布局),因而在人機(jī)對(duì)弈模式下,只允許玩家悔最近的兩步落子.6心得體會(huì)經(jīng)過(guò)這段時(shí)間的緊張忙碌,這次的畢業(yè)設(shè)計(jì)已制作了一個(gè)較完整的五子棋游戲,從各方面來(lái)講,都有比較大的收獲,同時(shí)也大大提高了實(shí)際操作的能力,當(dāng)然,期間遇到的困難也是層出不窮.由于對(duì)游戲的概念比較模糊,在前期的編程設(shè)計(jì)過(guò)程中腦海中僅僅有一個(gè)框架,而很多卻細(xì)節(jié)沒有考慮到,結(jié)果一度走入一邊編程,一邊改模版的尷尬境地,進(jìn)度緩慢,思路不清。后來(lái),在艱難進(jìn)展的過(guò)程中漸漸領(lǐng)悟到了一些編程的方法和系統(tǒng)設(shè)計(jì)的思想,所謂眼過(guò)千遍不如手過(guò)一遍,在自己實(shí)際操作中暴露出來(lái)的問(wèn)題自己的體會(huì)最深刻,也就更有想法去克服他。在困境中摸索,總結(jié),轉(zhuǎn)變思路,繼續(xù)前進(jìn),這是對(duì)我制作本游戲過(guò)程的一個(gè)概括。在不斷的學(xué)習(xí)與改進(jìn)中我體會(huì)到:1.做畢業(yè)設(shè)計(jì)本身也是一個(gè)學(xué)習(xí)新鮮事物的過(guò)程,從設(shè)計(jì)初的不懂到最后順利完成設(shè)計(jì),我體會(huì)到在實(shí)踐中學(xué)習(xí)的重要性,我想這對(duì)于我以后的工作受益匪淺。2.設(shè)計(jì)的過(guò)程是漫長(zhǎng)而困難重重的,設(shè)計(jì)過(guò)程中需要理論與實(shí)際的結(jié)合,這就要求有扎實(shí)的理論知識(shí),靈活的頭腦,我本身所做的設(shè)計(jì)并不算十分復(fù)雜,但由于以前沒有獨(dú)立做過(guò)系統(tǒng)所以剛開始時(shí)有點(diǎn)亂,好在有老師的幫助,我很快理清了思路,找到了自己的出發(fā)點(diǎn)。3.由于前期工作的不徹底,對(duì)系統(tǒng)的需求分析的要求認(rèn)識(shí)不夠清楚,使得后續(xù)的工作不得不經(jīng)常返回去修改個(gè)別代碼。使我體會(huì)到在設(shè)計(jì)中的每一步的重要性,如果上一個(gè)步驟不能很好的完成,在后續(xù)的設(shè)計(jì)將會(huì)付出幾倍的代價(jià).總之,經(jīng)過(guò)這么長(zhǎng)時(shí)間的設(shè)計(jì),我與我的同學(xué)完成了這個(gè)一個(gè)功能比較完善的五子棋游戲。我深刻體會(huì)到要做好一個(gè)完整的事情,需要有系統(tǒng)的思維方式和方法,還要有一個(gè)團(tuán)隊(duì)合作的精神。對(duì)待一個(gè)新的問(wèn)題,要耐心、要細(xì)心,也要有很好的團(tuán)結(jié),共同努力的團(tuán)隊(duì)協(xié)作精神。參考文獻(xiàn)MSDNforVisualStudio6.0設(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ),ErichGamma/RichardHelm/RalphJohnson/JohnVlissides著,李英軍/馬曉星/蔡敏/劉建中等譯,機(jī)械工業(yè)出版社深入淺出MFC(第2版),侯俊杰著,華中科技大學(xué)出版社Microsoft?VisualC++。NET技術(shù)內(nèi)幕(第6版),GeorgeShepherd/DavidKruglinski著,潘愛民譯,清華大學(xué)出版社VisualC++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn),汪曉平/鐘軍等編著,人民郵電出版社C++編程思想,BruceEckel著,劉宗田/邢大紅/孫慧杰等譯,機(jī)械工業(yè)出版社21天學(xué)通C++,JesseLiberty著,康博創(chuàng)作室譯,人民郵電出版社C++標(biāo)準(zhǔn)程序庫(kù),NicolaiM。Josuttis著,侯捷/孟巖譯,華中科技大學(xué)出版社Windows程序設(shè)計(jì),CharlesPetzold著,北京博彥科技發(fā)展有限公司譯,北京大學(xué)出版社VisualC++.NET網(wǎng)絡(luò)編程,易君編著,中國(guó)鐵道出版社五子棋的核心算法,蟈蟈俊。nethttp://blog.joycode.com/ghj/articles/12727.aspx致謝本設(shè)計(jì)的完成是在我們的導(dǎo)師張老師的細(xì)心指導(dǎo)下進(jìn)行的。在每次設(shè)計(jì)遇到問(wèn)題時(shí)老師不辭辛苦的講解才使得我的設(shè)計(jì)順利的進(jìn)行。從設(shè)計(jì)的選題到資料的搜集直至最后設(shè)計(jì)的修改的整個(gè)過(guò)程中,花費(fèi)了張老師很多的寶貴時(shí)間和精力,在此向?qū)煴硎局孕牡馗兄x!導(dǎo)師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,開拓進(jìn)取的精神和高度的責(zé)任心都將使學(xué)生受益終生!基于C#、SQL的學(xué)生成績(jī)管理系統(tǒng)項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn)摘要成績(jī)管理是任何一個(gè)教育單位不可或缺的重要組成部分之一,它的職責(zé)對(duì)于學(xué)校的教務(wù)管理工作人員來(lái)說(shuō)是至關(guān)重要的,隨著電子信息技術(shù)的飛速發(fā)展,利用在計(jì)算機(jī)中實(shí)現(xiàn)管理是勢(shì)在必行。本文介紹了學(xué)生成績(jī)管理系統(tǒng)從分析――>設(shè)計(jì)――〉開發(fā)的全過(guò)程,在開發(fā)過(guò)程中,主要用MicrosoftVisualStudio2010設(shè)計(jì)窗體及代碼,MicrosoftSQLServer2005建立數(shù)據(jù)庫(kù),實(shí)現(xiàn)了學(xué)生信息查詢、學(xué)生信息修改、學(xué)生成績(jī)錄入等基本功能。學(xué)生成績(jī)管理系統(tǒng)具有查找方便、檢索迅速、存儲(chǔ)量大、可靠性高、成本低等優(yōu)點(diǎn),學(xué)生成績(jī)管理系統(tǒng)的使用,提高了學(xué)生成績(jī)管理的工作效率與便捷。本論文敘述了我校學(xué)成績(jī)管理的現(xiàn)狀。重點(diǎn)介紹了學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)過(guò)程:包括系統(tǒng)分析、系統(tǒng)調(diào)查、數(shù)據(jù)流程分析、功能設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)物理配置方案、系統(tǒng)實(shí)現(xiàn)、系統(tǒng)測(cè)試和調(diào)試。本系統(tǒng)主要功能有用戶管理、學(xué)生注冊(cè)、班級(jí)信息錄入、學(xué)生信息錄入、班級(jí)課程錄入、學(xué)校專業(yè)信息錄入、課程信息錄入、學(xué)生成績(jī)錄入、教師信息錄入、數(shù)據(jù)更新。包括功能需求描述、數(shù)據(jù)庫(kù)設(shè)計(jì)等內(nèi)容,介紹了本系統(tǒng)的具體實(shí)現(xiàn),開發(fā)過(guò)程中的結(jié)論及體會(huì)。1.緒論本畢業(yè)論文是以學(xué)校學(xué)生管理信息系統(tǒng)建設(shè)中的成績(jī)管理系統(tǒng)的開發(fā)為背景,論述了管理信息系統(tǒng)的概念、結(jié)構(gòu)及系統(tǒng)開發(fā)的基本原理和方法,全文共分為緒論、系統(tǒng)分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、開發(fā)總結(jié)等1。1引言在現(xiàn)代,高科技的飛躍發(fā)展,計(jì)算機(jī)的大量普及,使得人們生活節(jié)奏越來(lái)越快。因此對(duì)教育行業(yè)的多元信息進(jìn)行有效的管理工作,也成為教育行業(yè)中的重中之重.目前,學(xué)校工作繁雜、資料重多,雖然各類管理信息系統(tǒng)已進(jìn)入高校,但還未普及,而對(duì)于學(xué)生成績(jī)管理來(lái)說(shuō),目前還沒有一套完整的、統(tǒng)一的系統(tǒng)。為各高校教務(wù)工作人員減輕負(fù),提高工作效率,所以制作了學(xué)生成績(jī)管理系統(tǒng)。學(xué)生成績(jī)管理系統(tǒng)依據(jù)開發(fā)要求主要應(yīng)用于教育系統(tǒng),完成對(duì)日常的教育工作中學(xué)生成績(jī)檔案的數(shù)字化管理.比較系統(tǒng)地對(duì)教務(wù)、教學(xué)上的各項(xiàng)服務(wù)和信息進(jìn)行管理,使數(shù)據(jù)管理更現(xiàn)代化、自動(dòng)化、智能化、人性化.同時(shí),減輕了學(xué)院教務(wù)人員管理的工作量,縮小開支,提高工作效率和準(zhǔn)確率,使其變得更具有條理性,科學(xué)性,為教育行業(yè)做出了巨大的貢獻(xiàn),也為今天的民辦教育在未來(lái)市場(chǎng)的競(jìng)爭(zhēng)力有所提高。學(xué)生成績(jī)管理系統(tǒng)使用了全新的成績(jī)管理理念,系統(tǒng)從完善的基礎(chǔ)信息管理,和對(duì)創(chuàng)建新用戶、已創(chuàng)建的成績(jī)數(shù)據(jù)的錄入,修改,瀏覽,統(tǒng)計(jì)等功能操作,基本能夠滿足各高校教師的需要。隨著計(jì)算機(jī)技術(shù)的發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,使用人們的生活與工
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路建筑材料質(zhì)檢合同范例
- 北京出租合同范例
- 財(cái)產(chǎn)抵押擔(dān)保借款合同范本
- 冷庫(kù)安裝合同范例
- 公廁維修施工合同范本
- 公司工程裝修合同范例
- 個(gè)人廣告采購(gòu)合同范本
- 全屋定制套餐合同范例
- 2025年度工傷事故責(zé)任認(rèn)定與賠償金支付協(xié)議書
- 包子配送合同范本
- 《消防機(jī)器人相關(guān)技術(shù)研究》
- 2024年考研政治真題及答案
- 【直播薪資考核】短視頻直播電商部門崗位職責(zé)及績(jī)效考核指標(biāo)管理實(shí)施辦法-市場(chǎng)營(yíng)銷策劃-直播公司團(tuán)隊(duì)管理
- 項(xiàng)目設(shè)計(jì)報(bào)告范文高中
- 《千年古村上甘棠》課件
- 部編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)電子課文《小馬過(guò)河》
- 《醫(yī)療機(jī)構(gòu)工作人員廉潔從業(yè)九項(xiàng)準(zhǔn)則》專題解讀
- 愛車講堂 課件
- 成立商會(huì)的可行性報(bào)告5則范文
- 市場(chǎng)監(jiān)督管理局反電信網(wǎng)絡(luò)詐騙工作總結(jié)
- 2024-2030年中國(guó)免疫細(xì)胞存儲(chǔ)行業(yè)發(fā)展模式及投資戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論