![五子棋VCE嵌入式設(shè)計_第1頁](http://file4.renrendoc.com/view/5ca7131365b6df47d9f0efb62073c5b9/5ca7131365b6df47d9f0efb62073c5b91.gif)
![五子棋VCE嵌入式設(shè)計_第2頁](http://file4.renrendoc.com/view/5ca7131365b6df47d9f0efb62073c5b9/5ca7131365b6df47d9f0efb62073c5b92.gif)
![五子棋VCE嵌入式設(shè)計_第3頁](http://file4.renrendoc.com/view/5ca7131365b6df47d9f0efb62073c5b9/5ca7131365b6df47d9f0efb62073c5b93.gif)
![五子棋VCE嵌入式設(shè)計_第4頁](http://file4.renrendoc.com/view/5ca7131365b6df47d9f0efb62073c5b9/5ca7131365b6df47d9f0efb62073c5b94.gif)
![五子棋VCE嵌入式設(shè)計_第5頁](http://file4.renrendoc.com/view/5ca7131365b6df47d9f0efb62073c5b9/5ca7131365b6df47d9f0efb62073c5b95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式系統(tǒng)原理與應(yīng)用課程設(shè)計嵌入式系統(tǒng)原理與應(yīng)用課程設(shè)計—五子棋游戲設(shè)計題目:五子棋游戲設(shè)計姓名:學(xué)號:專業(yè):指導(dǎo)老師:2013年11月15日目錄TOC\o"1-3"\h\u16762一、系統(tǒng)分析與總體設(shè)計 393681.1選題的意義 348761.2理解需求 3304541.2.1功能需求 364871.2.2界面設(shè)計需求 4297081.3EVC的各組成部分的構(gòu)成和作用 4229961.4五子棋游戲的基本要求 5216201.4.1開發(fā)環(huán)境描述 5306171.4.2系統(tǒng)總體功能: 6205551.4.3每個功能的詳細(xì)說明: 6200351.5開發(fā)工具的選用及介紹 64323二、設(shè)計內(nèi)容及要求 8218502.1系統(tǒng)總體功能設(shè)計 8238362.2總體設(shè)計 861012.3主要模塊功能設(shè)計流程圖 10103952.4算法實現(xiàn) 13318822.4.1使用到的主要數(shù)據(jù)結(jié)構(gòu) 1310822.4.2使用到的主要函數(shù) 13218592.4.3搜索算法實現(xiàn)描述:
144395三、系統(tǒng)實現(xiàn)與調(diào)試 16225833.1運行程序結(jié)果圖 16151933.2調(diào)試過程中錯誤信息和解決方法 18130073.3調(diào)試過程:程序時間流程中的解決方法 18196593.4系統(tǒng)運行的結(jié)果 195363結(jié)論 2129846參考文獻(xiàn) 2132265附:設(shè)計程序代碼 22
一、系統(tǒng)分析與總體設(shè)計1.1選題的意義五子棋是一種兩人對弈的純策略型棋類游戲,棋具與圍棋通用,是起源于中國古代的傳統(tǒng)黑白棋種之一。相傳中華民族的祖先軒轅黃帝無意之中畫下了十七條橫線十條豎線,這無意中的發(fā)明造就出了五子棋。后來,中國古代的五子棋先由中國傳到高麗(今朝鮮),然后傳到日本。20世紀(jì)初傳統(tǒng)五子棋及連珠從日本傳入歐洲。許多國家的人對五子棋都有不同的愛稱,例如,韓國人把五子棋稱為“情侶棋”;歐洲人稱其為“紳士棋”,代表下五子棋的君子風(fēng)度勝似紳士;日本人則稱其為“中老年棋”,說明五子棋適合中老年人的生理特點和思維方式;美國人喜歡將五子棋稱為“商業(yè)棋”,也就是說,商人談生意時可邊下棋邊談生意,棋下完了生意也談成了。由于五子棋游戲規(guī)則簡單易懂,老少皆宜,而且趣味橫生,引人入勝;不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。已在各個游戲平臺有應(yīng)用?;赪indows的游戲設(shè)計方式很多,如基于Java的跨平臺設(shè)計,基于.net平臺的設(shè)計,基于JAVA的設(shè)計由于運行在虛擬機上運行,等等。嵌入式系統(tǒng)根據(jù)應(yīng)用需求滿足應(yīng)用系統(tǒng)的功能、可靠性、成本、體積等要求,提高了運行效率。本文采用EVC在ARM平臺上進(jìn)行設(shè)計來完成五子棋游戲。1.2理解需求1.2.1功能需求實現(xiàn)游戲界面的顯示;顯示用戶行程,提示用戶下子;查看用戶的輸入是否出界;實現(xiàn)悔棋功能;實現(xiàn)新一局游戲開始功能;判斷每局游戲輸贏;用戶選擇是否開始新一盤五子棋游戲;退出游戲。1.2.2界面設(shè)計需求顯示游戲運行界面,棋盤大小規(guī)格為15*15;根據(jù)功能需求,顯示新游戲和悔棋按鈕;系統(tǒng)和用戶需要用不同的顏色的棋子,最后以紅色棋子顯示贏家。◆EVC4.0軟件界面的組成六大組成部分:標(biāo)題欄、菜單欄、工具欄、工作區(qū)、活動窗口區(qū)、輸出窗口1.3EVC的各組成部分的構(gòu)成和作用◆標(biāo)題欄顯示當(dāng)前的工程名,活動窗口中當(dāng)前打開的文件名。當(dāng)當(dāng)前活動窗口中沒有打開任何文件,則該欄只顯示當(dāng)前的工程名◆菜單欄●由“File”、“Edit”、”View”等共9個菜單項組成●幾乎囊括了EVC4.0下可以進(jìn)行的所有操作◆工具欄●在EVC4.0主界面的空白區(qū)右單擊鼠標(biāo),彈出的菜單中列出了所有可視的菜單項●常用的有“Standard”、”WCEConfiguration”等◆工作區(qū)●三個選項卡:“ClassView”、“ResourceView”、 “FileView”●ClassView選項卡用來觀察當(dāng)前工作區(qū)中已有工程名以及工程的個數(shù),每個工程用到的類、結(jié)構(gòu)體、函數(shù)、全局變量?!馬esourceView選項卡用來觀察所有工程用到的資源●FileView選項卡用來觀察工作區(qū)中所有工程中包含哪些源代碼文件,如:.C、.cpp等◆活動窗口區(qū)●EVC4.0軟件中最大的用于顯示和編輯的區(qū)域●用于顯示工程中的資源文件和源代碼文件●用于編輯資源文件●用于編輯源代碼文件●在程序調(diào)試時,提供可視化界面用作斷點設(shè)置和程序執(zhí)行時跟蹤觀察1.4五子棋游戲的基本要求1.4.1開發(fā)環(huán)境描述隨著個人掌上電腦PocketPC、智能手機及工業(yè)控制器等各種嵌入式產(chǎn)品的不斷發(fā)展,人們對MicrosoftWindowsCE也越發(fā)關(guān)注起來,使用WinCE可以成為新一代智能設(shè)備設(shè)計高性能的應(yīng)用程序。五子棋游戲軟件基于ARM的wince5.0平臺,利用PXA270RP實驗箱模擬仿真器,利用EVC編程來具體實現(xiàn),在實驗箱的觸摸屏上進(jìn)行游戲。嵌入式系統(tǒng)作為芯片和軟件的集成體,在科學(xué)研究、工業(yè)控制、軍事技術(shù)、醫(yī)療衛(wèi)生、消費電子等方面有著普遍的應(yīng)用,此軟件基于ARM處理器和windowsCE的研究平臺,windowsCE是由優(yōu)先級的多任務(wù)操作系統(tǒng)它允許多重功能、進(jìn)程,在相同的時間系統(tǒng)中運行WindownsCE支持最大的32位同步進(jìn)程,微軟WindownsCE被設(shè)計成針對小型設(shè)備的通用操作系統(tǒng),它可以通過設(shè)計一層位于內(nèi)核和硬件之間代碼來設(shè)定硬件平臺。嵌入式工具包包括設(shè)備驅(qū)動器(DDK)和軟件開發(fā)包(SDK),DDK提供了關(guān)于寫驅(qū)動器的附加文本,SDK提供庫、頭文件、樣本代碼、文本以允許,開發(fā)者對基于WindownsCE的平臺進(jìn)行寫操作,WindownsCE提供了相同的程序界面,以用來為其他的視窗操作系統(tǒng)開發(fā)功能。=1\*GB3①技術(shù)可行性運用Windows2000/XP以上的操作系統(tǒng),SQLSERVER2000的數(shù)據(jù)庫技術(shù),開發(fā)以WindowsXP為用戶的操作平臺,界面友善、功能齊全的《五子棋雙人對戰(zhàn)小游戲》。=2\*GB3②經(jīng)濟(jì)可行性 一方面,新系統(tǒng)中棋盤界面和更強勁的功能支持,不僅增加了游戲的趣味性,而且使游戲者更盡興;另一方面系統(tǒng)開發(fā)成本低,現(xiàn)有PC機即可提供該系統(tǒng)開發(fā)工作需要的所有硬件設(shè)備環(huán)境。=3\*GB3③操作可行性操作上是鍵盤的使用,主要憑借輸入坐標(biāo)確定棋子落子位置,方便簡單。使用前只要看明白游戲規(guī)則及其方法即可。1.4.2系統(tǒng)總體功能:通過判斷棋盤上的所有相同顏色的子能否五個相連來判斷游戲是否結(jié)束。
實際上,是根據(jù)當(dāng)前最后一個落子的情況來判斷勝負(fù)的。實際上需要從四個位置判斷,以該子為出發(fā)點的水平,豎直和兩條分別為
45度角和135度角的線,目的是看在這四個方向是否最后落子的一方構(gòu)成連續(xù)五個的棋子,如果是的話,就表示該盤棋局已經(jīng)分出勝負(fù)。1.4.3每個功能的詳細(xì)說明:=1\*GB3①游戲開始:打開游戲,用戶可以直接進(jìn)入游戲,由用戶首先開始下棋。②游戲進(jìn)悔棋操作:用戶可以點擊“悔棋”按鈕,取消前一步所下的棋子,重新落子。=3\*GB3③游戲開始新游戲操作:用戶可以點擊“新游戲”按鈕,重新開始新一輪的游戲。=4\*GB3④游戲結(jié)束操作:游戲結(jié)束時,用戶可以選擇是否開始新一輪游戲。1.5開發(fā)工具的選用及介紹EVC++是C++語言嵌入式設(shè)備應(yīng)用程序的編譯器,該編譯器編譯的程序可以運行在便攜式電腦的微軟系列的操作系統(tǒng)中,如WinCE、WindowsMobile。目前市面上最常見的導(dǎo)航軟件,都是用C++語言編寫、在EVC++上編譯出來的。EVC是微軟公司推出的可視化開發(fā)工具,主要用來開發(fā)基于WindowsCE的應(yīng)用程序。EVC的主要特性如下:
智能化的開發(fā)環(huán)境、支持MFC類庫和ATL、COM組件、更快速的編譯與輸出、支持C/C++、匯編混合編程、支持組件的更新和擴展等等。平臺模擬器是一個在PC下模擬出來的操作系統(tǒng)軟件。平臺模擬器它的運行速度比運行在實際的物理平臺上的操作系統(tǒng)要慢。WindowsCE模擬器在Windows桌面系統(tǒng)上以窗口應(yīng)用程序的形式運行,并且可以直接訪問CPU以及系統(tǒng)內(nèi)存。從運行效率的角度來看,運行在模擬器上的應(yīng)用程序的效率只有在實際硬件環(huán)境上運行效率的80%左右。WindowsCE5.0之前版本中,模擬器只支持X86的結(jié)構(gòu)。如果開發(fā)者使用嵌套匯編編程,程序的編寫和執(zhí)行效果就會因CPU結(jié)構(gòu)的不同而產(chǎn)生比較大的差異。開發(fā)WindowsCE設(shè)備上的應(yīng)用程序時,開發(fā)平臺和程序運行平臺是兩個獨立的操作系統(tǒng),即開發(fā)機和目標(biāo)機是獨立的。用戶經(jīng)常需要在開發(fā)機端查看目標(biāo)平臺的信息,或在兩者之間傳輸文件。微軟公司在EVC中集成了遠(yuǎn)程管理工具PlatformManager,提供開發(fā)機和目標(biāo)平臺的遠(yuǎn)程連接。建立遠(yuǎn)程連接需要通過PlatformManage來實現(xiàn),開發(fā)機是通過TCP/IP協(xié)議來實現(xiàn)與模擬器的遠(yuǎn)程連接的。啟動模擬器的過程其實就是在遠(yuǎn)程連接建立的基礎(chǔ)上進(jìn)行的,即模擬器成功啟動,就已經(jīng)在開發(fā)機和目標(biāo)機(即模擬器)之間成功建立了遠(yuǎn)程連接。在使用實際的WindowsCE設(shè)備時,需要在設(shè)備啟動后手動建立遠(yuǎn)程連接。遠(yuǎn)程連接工具的功能如下:
(1)RemoteFileViewer工具該工具類似Window的資源管理器,可以顯示W(wǎng)indowsCE遠(yuǎn)程機的目錄文件結(jié)構(gòu),并且可以上傳和下載文件。
(2)RemoteProcessViewer工具該工具類似于Windows上的任務(wù)管理器,可以查看WindowsCE目標(biāo)設(shè)備上運行的進(jìn)程及線程的詳細(xì)信息,此外還可以終止指定的進(jìn)程。
(3)RemoteZoomin工具該工具可以對WindowsCE設(shè)備進(jìn)行截屏,可以保存為bmp文件,也可以直接復(fù)制到剪貼板。(4)RemoteRegistryEditor工具。該工具給Windows上的注冊表管理器一樣,對WindowsCE目標(biāo)設(shè)備上的注冊表進(jìn)行管理。
(5)RemoteHeapWalker工具。
該工具顯示W(wǎng)indowsCE目標(biāo)設(shè)備上運行的進(jìn)程列表,并詳細(xì)描述堆標(biāo)識符和標(biāo)志位信息??梢酝ㄟ^此工具確定某個應(yīng)用程序是否正在釋放為它分配的所有內(nèi)存隊列,從而判斷是否存在內(nèi)存泄漏。
(6)RemoteSpy++工具。
與VisualC++提供的工具Spy++一樣,只是它是監(jiān)控WindowsCE目標(biāo)設(shè)備上的窗口消息。(7)RemoteSysteminformation。顯示W(wǎng)indowsCE目標(biāo)設(shè)備上的系統(tǒng)信息。二、設(shè)計內(nèi)容及要求2.1系統(tǒng)總體功能設(shè)計游戲開始時,由用戶開局,將一枚棋子落在棋盤一坐標(biāo)上,然后由電腦落子,如此輪流下子,直到某一方首先在棋盤的豎、橫或斜三方向上的五子連成線,則該方該局獲勝;在下棋途中可以悔棋,也可以從新開局。2.2總體設(shè)計將我們定制好的winCE系統(tǒng)下載到開發(fā)板上,于此同時已經(jīng)在EVC上開發(fā)平臺上運用VC++語言開發(fā)好了五子棋的相關(guān)代碼,剩下的就是將上述三個過程整合再一起,達(dá)到最終在開發(fā)板上運行嵌入式程序的過程。將開發(fā)板連接好電源,下載好winCE系統(tǒng)后,將數(shù)據(jù)線連接好,啟動同步軟件,進(jìn)行連接,直到同步軟件顯示連接成功之后,瀏覽板子內(nèi)容,選擇ARM2410開發(fā)板SDK,進(jìn)行編譯,將相應(yīng)目錄下的可執(zhí)行文件加到實驗箱目錄下,然后連接鼠標(biāo)到開發(fā)板上的USB上,點擊可執(zhí)行程序文件,運行開發(fā)完成的游戲程序。當(dāng)然在本實驗中我們直接應(yīng)用的是模擬器來實現(xiàn)程序的運行,不在需要連接試驗箱來進(jìn)行操作,游戲界面設(shè)計包括:游戲界面的布局,分偉三大板塊,分別是游戲顯示界面,左下角是新游戲開始按鈕,右下角是悔棋按鈕。圖2-1圖形界面的設(shè)計圖2-1五子棋程序流程圖2.3主要模塊功能設(shè)計流程圖系統(tǒng)系統(tǒng)輸入模塊輸出模塊判斷模塊判斷違規(guī)斷判輸贏判斷命令初始化調(diào)試模塊是否違規(guī)白子贏黑子贏圖2-2系統(tǒng)功能模塊圖結(jié)束開始從四個方向開始判斷是否有五子在一條線上NoYesNoNoYesYesNoYes切換用戶下棋水平豎直上斜下斜贏結(jié)束開始從四個方向開始判斷是否有五子在一條線上NoYesNoNoYesYesNoYes切換用戶下棋水平豎直上斜下斜贏圖2-3判斷輸贏模塊圖下棋下棋從新開始?悔棋?五子在一條線上?獲勝切換用戶YesNoYesNoNoYes結(jié)束開始圖2-4判斷命令模塊流程圖2.4算法實現(xiàn)2.4.1使用到的主要數(shù)據(jù)結(jié)構(gòu)=1\*GB3①wzwin表示哪方獲勝的情況,當(dāng)inner=0時還未確定哪方獲勝,inter=1,白子獲勝,inter=2黑子獲勝。structwzwin{ intwinner; intnx1; intnx2; intny1; intny2;};=2\*GB3②Wzsave保存下棋記錄,即(ix,iy)這個坐標(biāo)是否使用,used=0未使用,used=1已使用,colour表示此處棋子的顏色。structwzsave{ boolused; boolcolor; intix; intiy;};2.4.2使用到的主要函數(shù)=1\*GB3①開始新游戲的函數(shù):voidNewGame();=2\*GB3②畫棋子voidDrawQZ(intnx,intny,boolstyle);=3\*GB3③當(dāng)需要畫棋盤時調(diào)用voiddraw(); =4\*GB3④繪圖所用到的函數(shù) 黑色下子booluserAd(intnx,intny); 白色下子booluserBd(intnx,intny);=5\*GB3⑤ booldownzi(intnx,intny);//外部調(diào)用此函數(shù)下子=6\*GB3⑥判斷勝敗函數(shù)boolbewinner2(boolstyle,intnx,intny);=7\*GB3⑦用戶悔棋函數(shù)boolgoback();=8\*GB3⑧設(shè)置棋子類型voidsetback(intnx,intny,boolstyle);=9\*GB3⑨用戶是否可以悔棋判斷函數(shù)boolgetbackble()。2.4.3搜索算法實現(xiàn)描述:
注意下面的核心的算法中的變量currentBoardSituation,表示當(dāng)前機器最新的盤面情況,
CountList表示第一層子節(jié)點可以選擇的較好的盤面的集合。核心的算法如下:
void
MainDealFunction()
{
value=-MAXINT;
//對初始根節(jié)點的value賦值
CalSeveralGoodPlace(currentBoardSituation,CountList);
//該函數(shù)是根據(jù)當(dāng)前的盤面情況來比較得到比較好的可以考慮的幾個盤面的情況,可以根據(jù)實際的得分情況選取分?jǐn)?shù)比較高的幾個盤面,也就是說在第一層節(jié)點選擇的時候采用貪婪算法,直接找出相對分?jǐn)?shù)比較高的幾個形成第一層節(jié)點,目的是為了提高搜索速度和防止堆棧溢出。
pos=CountList.GetHeadPosition();
CBoardSituation*
pBoard;
for(i=0;ivalue=Search(pBoard,min,value,0);
Value=Select(value,pBoard->value,max);
//取value和pBoard->value中大的賦給根節(jié)點
}
for(i=0;ivalue)
//找出那一個得到最高分的盤面
{
currentBoardSituation=pBoard;
PlayerMode=min;
//當(dāng)前下子方改為人
Break;
}
}
其中對于Search函數(shù)的表示如下:實際上核心的算法是一個剪枝過程,其中在這個搜索過程中相關(guān)的四個參數(shù)為:(1)當(dāng)前棋局情況;(2)當(dāng)前的下子方,可以是機器(max)或者是人(min);(3)父節(jié)點的值oldValue;(4)當(dāng)前的搜索深度depth。
double
Search(CBoardSituation&
board,int
mode,double
oldvalue,int
depth)
{
CList
m_DeepList;
if(deptholdvalue))==
TRUE)
{
if(mode==max)
value=select(value,search(successor
Board,min,value,depth+1),max);
else
value=select(value,search(successor
Board,max,value,depth+1),min);
}
return
value;
}
else
{
if
(
goal(board)<>0)
//這里goal(board)<>0表示已經(jīng)可以分出勝負(fù)
return
goal(board);
else
return
evlation(board);
}
}
注意這里的goal(board)函數(shù)是用來判斷當(dāng)前盤面是否可以分出勝負(fù),而evlation(board)是對當(dāng)前的盤面從機器的角度進(jìn)行打分。
下面是Select函數(shù)的介紹,這個函數(shù)的主要目的是根據(jù)
PlayerMode情況,即是機器還是用戶來返回節(jié)點的應(yīng)有的值。
double
Select(double
a,double
b,int
mode)
{
if(a>b
&&
mode==max)¦¦
(a<
b
&&
mode==min)
return
a;
else
return
b;
}
三、系統(tǒng)實現(xiàn)與調(diào)試3.1運行程序結(jié)果圖3.2調(diào)試過程中錯誤信息和解決方法開發(fā)五子棋程序中,遇到的問題及技術(shù)難題如下:=1\*GB3①錯誤信息:C:\Users\qingxue\Desktop\brick\brick.rc(10):fatalerrorRC1015:cannotopenincludefile'afxres.h'.解決方法:C:\WINCE500\OTHERS\MFC\INCLUDE路徑添加到MicrosofteMbeddedVisualC++4.0中ToolsOptionsDirectoriesincludefiles下即可。=2\*GB3②錯誤信息:LINK:fatalerrorLNK1104:cannotopenfile'mfcs42d.lib'解決方法:C:\WINCE500\OTHERS\MFC\LIB\X86路徑添加到MicrosofteMbeddedVisualC++4.0中ToolsOptionsDirectoriesLibraryfiles下即可。3.3調(diào)試過程:程序時間流程中的解決方法=1\*GB3①首先,建立盤面,用函數(shù)voiddraw()畫棋盤,然后初始化顯示器、鍵盤、鼠等輸入輸出設(shè)備并在屏幕上畫出棋盤(棋盤可以不顯示)。=2\*GB3②當(dāng)輪到用戶(即黑子)下時,您通過鍵盤或鼠標(biāo)在棋盤上落子,程序會根據(jù)該點的位置,在map[15][15]數(shù)組的相應(yīng)地方記錄‘1’,以表明該子是用戶下的;當(dāng)輪到系統(tǒng)(即白子)下時,您通過鍵盤或鼠標(biāo)在棋盤上落子,程序會根據(jù)該點的位置,在map[15][15]數(shù)組的相應(yīng)地方記錄‘2’,以表明該子是系統(tǒng)下的。=3\*GB3③當(dāng)有棋子落下時,調(diào)用voidDrawQZ()畫棋子函數(shù)在棋盤上畫出。=4\*GB3④booldownzi()外部調(diào)用此函數(shù)下子,控制下棋順序,當(dāng)輪到某方下子時,負(fù)責(zé)將程序轉(zhuǎn)到相應(yīng)的模塊中去。=5\*GB3⑤盤面分析填寫棋型表用戶在下五子棋時,一定會先根據(jù)棋盤上的情況,找出當(dāng)前最重要的一些點位,如“活三”、“沖四”等;然后再在其中選擇落子點。我們從棋盤左上角出發(fā),向右逐行搜索用戶棋型表,當(dāng)遇到一個空白點時,以它為中心向左挨個查找,如果遇到己方的子則記錄然后繼續(xù),如果遇到對方的子、空白點或邊界就停止查找。左邊完成后再向右進(jìn)行同樣的操作;最后把左右兩邊的記錄合并起來,得到的數(shù)據(jù)就是該點橫向上的棋型,然后把棋型的編號填入到儲存棋局中unsignedcharuser[x][y][n]表示用戶棋局;unsignedcharpc[15][15][4]表示系統(tǒng)棋局;(x、y代表坐標(biāo),n=0、1、2、3分別代表橫、豎、左斜、右斜四個方向),而其他三個方向的棋型也可用同樣的方法得到,當(dāng)搜索完整張棋盤后,用戶棋型表也就填寫完畢了。=6\*GB3⑥對方落子有了上面填寫的兩張棋型表,就是遍歷棋型表user[15][15][4]和pc[15][15][4]找出其中數(shù)值最大的一點,在該點下子即可。但這種算法的弱點非常明顯,只顧眼前,不能顧全大局,這就和許多五子棋初學(xué)者一樣犯了目光短淺的毛病。如果在這兒下子將會形成對手不得不防守的棋型,例如:‘沖四’、‘活三’,那么下一步對手就會照您的思路下子來防守您,如此一來便完成了第一步的預(yù)測。這時再調(diào)用模塊4對預(yù)測后的棋進(jìn)行盤面分析,如果出現(xiàn)了‘四三’、‘雙三’或‘雙四’等制勝點,那么己方就可以獲勝了;否則照同樣的方法向下分析,就可預(yù)測出第二步、第三步……要是盤面上沒有對手必須防的棋型,那么進(jìn)攻不成的話就得考慮防守了,將自己和對手調(diào)換一下位置,然后用上面的方法來預(yù)測對手的棋,這樣既可以防住對手巧妙的攻擊,又能待機發(fā)動反擊。3.4系統(tǒng)運行的結(jié)果圖3-1電腦勝利的結(jié)果圖圖3-2人勝利的結(jié)果圖圖3-3確定繼續(xù)下一盤的結(jié)果圖結(jié)論在系統(tǒng)分析階段,針對五子棋游戲,將整個游戲分成若干個部分,逐步解決過程中遇到的每一個問題,初步地實現(xiàn)了基本功能,并最終實現(xiàn)所想要的效果。此程序的用戶界面已基本實現(xiàn)了俄羅斯方塊游戲的一些基本的控制操作,但由于時間和能力的限制,程序有許多不足之處,很多功能還沒有完全實現(xiàn),或者還沒有完善。若要設(shè)計出更加具有可玩性和好玩性的五子棋游戲,就要靠以后更多和更深入的學(xué)習(xí)。通過這次的課程設(shè)計也是我認(rèn)識到了我在程序設(shè)計方面的嚴(yán)重不足,以及專業(yè)知識的嚴(yán)重匱乏。我的程序設(shè)計思想和代碼的編寫和調(diào)試能力在此次課設(shè)期間有所提高。這樣一種更貼切實際的課程設(shè)計,大大的提高了我的學(xué)習(xí)效率,希望能夠在平時教學(xué)的時候也能加入一些類似課程設(shè)計的程序設(shè)計習(xí)題。參考文獻(xiàn)<1>《EVC高級編程及其應(yīng)用開發(fā)》王兵李存斌陳鵬等編著中國水利水電出版社<2>《270RP_wince實驗指導(dǎo)書》
附:設(shè)計程序代碼#include"stdafx.h"#include"AdbonWZQ.h"#include"AdbonWZQDlg.h"#include"MSGDLG.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//主要下子定位執(zhí)行函數(shù)CAdbonWZQDlg::CAdbonWZQDlg(CWnd*pParent/*=NULL*/) :CDialog(CAdbonWZQDlg::IDD,pParent){ CBitmapb,c,d,e,f; CSizex; b.LoadBitmap(IDB_QP242); x.cx=242;//446; x.cy=242;//446; qp.CreateCompatibleDC(NULL); qp.SelectObject(&b); qp.SetSize(x); b.DeleteObject(); c.LoadBitmap(IDB_QZH16); x.cx=16;//27; x.cy=16;//27; qzh.CreateCompatibleDC(NULL); qzh.SelectObject(&c); qzh.SetSize(x); c.DeleteObject(); d.LoadBitmap(IDB_QZB16); x.cx=16;//27; x.cy=16;//27; qzb.CreateCompatibleDC(NULL); qzb.SelectObject(&d); qzb.SetSize(x); d.DeleteObject(); e.LoadBitmap(IDB_MASK17); x.cx=16;//27; x.cy=16;//27; mask.CreateCompatibleDC(NULL); mask.SelectObject(&e); mask.SetSize(x); d.DeleteObject(); f.LoadBitmap(IDB_DEAD16); x.cx=16;//27; x.cy=16;//27; dead.CreateCompatibleDC(NULL); dead.SelectObject(&f); dead.SetSize(x); f.DeleteObject(); m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}//數(shù)據(jù)交換函數(shù)voidCAdbonWZQDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX);}//實現(xiàn)信息映射機制BEGIN_MESSAGE_MAP(CAdbonWZQDlg,CDialog) ON_BN_CLICKED(IDC_BUTNEW,OnButnew) ON_BN_CLICKED(IDC_BUTBACK,OnButback) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_PAINT() //實現(xiàn)命令傳遞機制END_MESSAGE_MAP()//函數(shù)中顯示信息操作BOOLCAdbonWZQDlg::OnInitDialog(){ CDialog::OnInitDialog(); //為下面執(zhí)行設(shè)置標(biāo)識 SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE); CenterWindow(GetDesktopWindow()); SetWindowPos(this,0,26,240,294,SWP_SHOWWINDOW); CRectrcdlg,rcc; GetClientRect(rcdlg); CButton*m_ctrl=(CButton*)GetDlgItem(IDC_BUTNEW); rcc.left=8; rcc.top=rcdlg.Height()-28; rcc.right=rcc.left+50; rcc.bottom=rcc.top+23; m_ctrl->SetWindowText(TEXT("新游戲")); m_ctrl->MoveWindow(rcc); m_ctrl=(CButton*)GetDlgItem(IDC_BUTBACK); rcc.left=rcdlg.Width()-58; rcc.right=rcc.left+50; m_ctrl->MoveWindow(rcc); m_ctrl->SetWindowText(TEXT("悔棋")); CBitmaptemp; temp.LoadBitmap(IDB_HENT); m_HenMemDC.CreateCompatibleDC(NULL); m_HenMemDC.SelectObject(&temp); temp.DeleteObject(); this->SetWindowText(L"五子棋v1.0"); runpath=""; loadfile(); twzq.SetDc(&qp,&qzh,&qzb,&mask,&dead,this->GetDC()); twzq.NewGame(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble()); returnTRUE;}//調(diào)用新開局函數(shù)voidCAdbonWZQDlg::OnButnew(){ //這這里添加控制操縱代碼 Invalidate(); twzq.NewGame(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble());}//調(diào)用悔棋函數(shù)voidCAdbonWZQDlg::OnButback(){ //這這里添加控制操縱代碼 twzq.goback(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble());}voidCAdbonWZQDlg::loadfile(){ twzq.AItype=2; twzq.Model=0;}voidCAdbonWZQDlg::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault intx1,y1; x1=(int)(point.x+2)/16; y1=(int)(point.y+2-32)/16; //沒有下子時結(jié)束 if(!twzq.downzi(x1,y1)) { return; } //一局結(jié)束后顯現(xiàn)的信息 GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble()); //操作者輸了后顯示的信息 if(twzq.twinner.winner==1) { MessageBox(L"小樣,輸了吧,回去再練幾年吧!^_^^_^"); GetDlgItem(IDC_BUTBACK)->EnableWindow(FALSE); twzq.draw(); } //操作者贏了后顯示的信息 if(twzq.twinner.winner==2) { MessageBox(L"-_-你是不是作弊了啊,再來兩盤..."); GetDlgItem(IDC_BUTBACK)->EnableWindow(FALSE); twzq.draw(); } CDialog::OnLButtonDown(nFlags,point);}voidCAdbonWZQDlg::OnLButtonUp(UINTnFlags,CP
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度河道清淤工程安全與環(huán)保管理承包合同
- 2025年中國天然燒結(jié)莫來石市場調(diào)查研究報告
- 2025-2030年可擴展式硬盤籠設(shè)計企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年手工意大利面連鎖店行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年中國反絨皮市場調(diào)查研究報告
- 2025至2030年P(guān)VC軟膠手環(huán)項目投資價值分析報告
- 2025年卡片夾項目可行性研究報告
- 2025至2030年橄欖扣項目投資價值分析報告
- 2025至2030年雙色家用剪項目投資價值分析報告
- 2025年鑲嵌硬質(zhì)合金前后翼板項目可行性研究報告
- 北京地鐵13號線
- 塑料成型模具設(shè)計(第2版)江昌勇課件1-塑料概述
- 產(chǎn)業(yè)園EPC總承包工程項目施工組織設(shè)計
- 方形補償器計算
- 為加入燒火佬協(xié)會致辭(7篇)
- 兒科重癥監(jiān)護(hù)病房管理演示文稿
- 甲基異丁基甲酮化學(xué)品安全技術(shù)說明書
- 條形基礎(chǔ)的平法識圖課件
- 秘書實務(wù)完整版課件全套ppt教程
- 新版神經(jīng)系統(tǒng)疾病的病史采集和體格檢查ppt
- 義務(wù)教育《歷史》課程標(biāo)準(zhǔn)(2022年版)
評論
0/150
提交評論