基于C#的五子棋游戲開發(fā)_第1頁
基于C#的五子棋游戲開發(fā)_第2頁
基于C#的五子棋游戲開發(fā)_第3頁
基于C#的五子棋游戲開發(fā)_第4頁
基于C#的五子棋游戲開發(fā)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、青島理工大學(xué)琴島學(xué)院設(shè) 計 報 告課題名稱:基于C#的五子棋游戲開發(fā)學(xué) 院:計算機工程系 專業(yè)班級:計科(專升本)14-21 學(xué) 號:20140371006 學(xué) 生: 指導(dǎo)教師:青島理工大學(xué)琴島學(xué)院教務(wù)處2015年 12月 18日學(xué) 生指導(dǎo)教師課題名稱基于C#的五子棋游戲開發(fā)設(shè)計時間2015.11.23-2015.12.18設(shè)計地點動漫1 設(shè)計目的課程設(shè)計的目的就是培養(yǎng)學(xué)生的理論聯(lián)系實際的能力。通過課程設(shè)計,使得學(xué)生能夠加深對講授內(nèi)容的理解、累積經(jīng)驗、學(xué)會獨立上機調(diào)試程序;并且逐步達(dá)到綜合運用網(wǎng)頁相關(guān)知識,真正掌握.NET技術(shù)的精華,從而達(dá)到熟練應(yīng)用程序設(shè)計語言的目的。也為將來做較大的系統(tǒng)打下

2、堅實基礎(chǔ)。通過本次課程設(shè)計,應(yīng)該達(dá)到以下教學(xué)任務(wù):鞏固所學(xué)知識,培養(yǎng)學(xué)生的上機實踐能力以及獨立調(diào)試程序的能力,更主要的是使學(xué)生了解做項目的大體流程。每一個小組制定一題,項目成員要在項目經(jīng)理的帶領(lǐng)下,完成項目的所有內(nèi)容。重點掌握ASP.NET網(wǎng)站設(shè)計開發(fā)流程,界面要友好,功能齊全,完成一個綜合項目。指導(dǎo)教師評語系部教研室 意 見一、需求分析1.選題:通過學(xué)習(xí)window窗體應(yīng)用程序的開發(fā)與實現(xiàn),對C#程序開發(fā)逐漸產(chǎn)生了濃厚的興趣,心中有了設(shè)計游戲的想法,通過學(xué)習(xí)和查資料慢慢對游戲制作有了一定的了解,后來通過深入學(xué)習(xí),對五子棋游戲設(shè)計有了進一步了解,慢慢理清了其中的開發(fā)過程與原理,最終確定了基于C

3、#五子棋游戲的設(shè)計與實現(xiàn)項目。2.界面:(1)通過上網(wǎng)學(xué)習(xí),對游戲界面風(fēng)格有了一定的認(rèn)知,于是決定走界面美觀風(fēng)。手游中的主界面給人一種簡單明了的感覺,通常有模式關(guān)卡,讓玩家越玩越帶感,于是決定模仿它們,游戲主界面有四個模式,玩家可以選擇不同模式進行對弈。如圖1所示:模式四模式三模式二模式一 圖1.主界面(2)游戲模式一,雙人對戰(zhàn)模式。界面右側(cè)有悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕,點擊各按鈕,執(zhí)行各功能。如圖2所示:棋 盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n 圖2.模式一界面 (3)游戲模式二,人機對戰(zhàn)模式。游戲界面中左部是棋盤,悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕

4、,此模式實現(xiàn)了人和電腦的交互。如圖3所示:棋 盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n 圖3.模式二界面(4)游戲模式三,讓子挑戰(zhàn)模式。游戲界面中左部是棋盤,右部有悔棋、返回、排行榜、關(guān)于、重新開始功能選項按鈕。和模式二不同的地方是讓子,開局后棋盤中布好了讓給電腦的白子。正所謂有人的地方就會有爭斗,游戲中有菜鳥就會有高手。高手喜歡挑戰(zhàn),于是挑戰(zhàn)模式應(yīng)運而生。此模式的界面和模式二界面相同,在此不再重畫。(5)游戲模式四,收拾殘局模式。游戲界面中左部是棋盤,右部有擺棋、對戰(zhàn)、悔棋、返回、再來一局功能選項按鈕。和模式二不同的地方是開局,開局后玩家需先擺放棋子,然后點擊對戰(zhàn)按鈕開始游戲。此模

5、式界面設(shè)計參造模式二,不再重畫。3.功能劃分:通過對五子棋游戲的分析與了解,可知其基本功能有開始、保存、打開、悔棋、認(rèn)輸、和棋、返回、退出及聊天等功能。在這里,由于條件時間有限,僅實現(xiàn)悔棋、返回、重新開始及模式選擇等功能。(1)模式選擇功能:在打開游戲后,出現(xiàn)在玩家面前的是模式選擇窗口,即主窗口。玩家可通過點擊相應(yīng)按鈕進入相應(yīng)模式進行對弈。此功能參照手游及單機小游戲主界面簡約美觀的特性制作的,多模式的增加符合廣大玩家的喜好。(2)悔棋功能:在每個模式中都有悔棋功能,在模式一中每次悔棋退后一子,模式二到模式四每次悔棋退后兩子,棋盤開局后就有的讓子的棋子悔棋無效。人無完人,誰能不犯錯,根據(jù)玩家的棋

6、藝高低程度難以把握,為了讓玩家不至于因電腦太強對開發(fā)者產(chǎn)生怨言,從而有了悔棋功能,進而對五子棋菜鳥起引導(dǎo)作用,使其懷著開心的心情與保持興趣走向棋圣之路。對于高手而言,棋品也是要有的,悔棋功能形同虛設(shè)而已。(3)從新開始功能:此功能是菜鳥提升棋藝的首選功能,當(dāng)玩家進行游戲到中途時,因棋勢不明,或要敗時,不能接受這一現(xiàn)狀,導(dǎo)致心情低落,怎么辦?只需輕輕一點,一切回歸起點,也就是初始化而已。(4)返回功能:此功能的作用是退出當(dāng)前模式,回到游戲主窗口,也就是模式選擇窗口。方便玩家在各個模式自由出入,盡情的展現(xiàn)自己的風(fēng)采。(5)人機對弈電腦下棋功能:在模式二到模式四中,玩家的對手都是電腦,電腦棋力取決于

7、開發(fā)者,在某中意義上來說,玩家在和開發(fā)者對弈也是正確的。此功能是程序按照一定的算法循環(huán)掃描,算出己方和敵方最佳落子點,再判斷出攻守,選出最終的落子點,落子后等待玩家落子。(6)讓子功能:在模式三中,為了增加游戲難度,對棋藝大成者量身打造了讓子功能。開局后,一般都是黑棋先行,在這里玩家執(zhí)黑,讓電腦1子,棋盤上變成了電腦執(zhí)白先行1子,白棋落在天元位置上,難度一般。玩家贏后,挑戰(zhàn)難度+1,玩家讓電腦2子,棋盤上電腦執(zhí)白先行2子,白棋落在天元位置左右兩側(cè),難度適中,適合一段棋手挑戰(zhàn)。玩家贏兩局后,挑戰(zhàn)難度+1,玩家讓電腦3子,棋盤上電腦執(zhí)白先行3子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤

8、交叉線上,難度相對適中,適合一段及以上棋手挑戰(zhàn)。讓4子和5子也是一樣的原理,難度較高,適合二段及以上棋手挑戰(zhàn)。對戰(zhàn)后,會在棋盤中部上方顯示讓子數(shù)目,為迎合玩家的虛榮心理而設(shè)計。(7)判斷勝負(fù)功能:在每個模式中都需要對對局進行勝負(fù)判斷,進而產(chǎn)生了勝負(fù)判斷功能。其功能原理是對玩家或電腦下的棋子進行循環(huán)掃描,對各個方向掃描黑白子雙方是否形成五子連珠,根據(jù)形成五子連珠方判斷勝負(fù),根據(jù)判斷彈出對應(yīng)的勝負(fù)提示框。再根據(jù)所屬模式對勝負(fù)后的對局進行參數(shù)修改,如:模式一和模式二,不論勝負(fù)只需對其進行初始化;模式三,玩家勝出,讓子加一,難度增加,需對其讓子參數(shù)進行修改,反之則不進行任何處理操作;模式四,玩家勝出,

9、對局勝出參數(shù)加一,呼應(yīng)必勝模式的讓子布局功能,玩家失敗則不進行參數(shù)修改操作等。(8)初始化界面功能:在每個模式中都需對窗口界面進行初始化,考錄到原有界面運行后的效果略顯呆板,為增加美觀性,需要對各窗口進行導(dǎo)入圖片處理,美化界面。根據(jù)對局情形,在棋盤中部上方顯示提示文字,并在棋盤上顯示存在的棋子,對各參數(shù)進行初始化處理。4.自定義類描述、各類方法描述及添加的命令響應(yīng)。如表1所示: 表1.用到的類 類名描述說明Form3模式一游戲窗口類,該類主要對該模式下的窗口初始化并對鼠標(biāo)等事件消息進行處理,實現(xiàn)悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能等。Form4模式二游戲窗口類,該類主要對該模

10、式下的窗口進行初始化并對鼠標(biāo)等事件消息進行處理,實現(xiàn)人機對弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等。Form5模式三游戲窗口類,該類主要對該模式下的窗口進行初始化并對鼠標(biāo)等事件消息進行處理,實現(xiàn)讓子功能、人機對弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等。Form6模式四游戲窗口類,該類主要對該模式下的窗口進行初始化并對鼠標(biāo)等事件消息進行處理,實現(xiàn)擺棋功能、人機對弈功能、悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能、提示勝敗功能等。二、總體設(shè)計1.游戲功能概述打開程序,游戲開始運行,登錄進入模式窗口,選擇游戲模式

11、窗口彈出,窗口中有四個模式選擇按鈕,點擊按鈕,分別彈出對應(yīng)的模式一、二、三、四窗口,完成具體模式的跳轉(zhuǎn)。對于模式一,玩家點擊鼠標(biāo)進行下棋操作,判斷點擊點在棋盤內(nèi)且無子時,在點擊點畫出棋子;如果點擊點在棋盤外或有子時,則不處理,返回等待鼠標(biāo)命令。然后判斷是否存在五子連珠,如果不存在五子連珠,則返回等待鼠標(biāo)命令;如果存在五子連珠,則進行判斷勝負(fù)并提示勝負(fù)信息,再調(diào)用OnStart()函數(shù)初始化模式一窗口,重新開始游戲。玩家點擊悔棋按鈕,調(diào)用悔棋功能函數(shù)OnHuiqi(),在窗口中重畫棋盤,去掉最后下的一個棋子,把悔棋后存在的棋子重新畫在棋盤上。玩家點擊重新開始按鈕,程序調(diào)用OnStart()函數(shù),

12、初始化模式一窗口,重新開始游戲。 對于模式二、三、四,玩家點擊鼠標(biāo)進行下棋操作,首先調(diào)用MouseMove函數(shù)。此函數(shù)的作用是判斷點擊點在棋盤內(nèi)且無子時,在點擊點畫出棋子,如果點擊點在棋盤外或有子時,則不處理,返回等待鼠標(biāo)命令。然后調(diào)用gameOver()函數(shù)判斷是否存在五子連珠,如果存在五子連珠,則進行判斷勝負(fù)并提示勝負(fù)信息,再調(diào)用OnStart()函數(shù)初始化這一模式窗口,重新開始游戲;如果不存在五子連珠,則調(diào)用AiGo()函數(shù),進行電腦掃描最佳落子點完成電腦下棋操作。再調(diào)用Over()函數(shù)判斷是否存在五子連珠,如果不存在五子連珠,則返回等待鼠標(biāo)命令;如果存在五子連珠,則進行勝負(fù)判斷并提示勝

13、負(fù)信息,再調(diào)用OnStart()函數(shù)初始化這一模式窗口,重新開始游戲。玩家點擊悔棋按鈕,程序調(diào)用悔棋功能函數(shù)OnHuiqi(),在窗口中重畫棋盤,去掉最后下的兩個棋子,把悔棋后存在的棋子重新畫在棋盤上。玩家點擊重新開始按鈕,程序調(diào)用OnStart()函數(shù),初始化模式一窗口,重新開始游戲。開 始模式選擇窗口1.繪制游戲進程圖,如圖4所示: 模式四選擇按鈕模式三選擇按鈕模式二選擇按鈕模式一選擇按鈕模式四窗口模式三窗口模式二窗口模式一窗口退出排行榜是在點擊點畫出棋子鼠標(biāo)點擊彈起等待鼠標(biāo)命令否悔棋關(guān)于從新開始等待鼠標(biāo)命令判斷點擊點在棋盤內(nèi)且無子鼠標(biāo)點擊彈起否判斷點擊點在棋盤內(nèi)且無子是否判斷是否存在五子

14、連珠是在點擊點畫出棋子否彈出勝負(fù)提示框判斷是否存在五子連珠電腦掃描最佳落子點是是否彈出勝負(fù)提示框判斷是否存在五子連珠 圖4.流程圖 三、 詳細(xì)設(shè)計與實現(xiàn)1.悔棋功能的實現(xiàn):為悔棋按鈕添加類向?qū)?,再添加int變量bushu、qi400、wzq1919,用于記錄先后下棋的具體坐標(biāo),以便于悔棋功能的實現(xiàn)。bushu用于記錄下棋的落子數(shù),qi400用于記錄棋子的具體坐標(biāo),wzq1919用于記錄棋盤上各點存在棋子的黑白及有無情況。悔棋功能的實現(xiàn)原理是重新畫出棋盤及悔棋后存在棋子。先判斷是否剛剛開局,bushu不為0,就執(zhí)行悔棋命令,把最后落下的第bushu個棋子的信息初始化,再畫出棋盤,重畫悔棋后存在的

15、棋子。模式一與模式二、三、四的悔棋不同之處在于悔棋棋子數(shù)。具體代碼如下:private void OnHuiqi() if(bushu>0&&star=true) if(colorwhite) colorwhite=false; else b = new SolidBrush(Color.White); g.FillEllipse(b, 20 * i + 20, 20 * j + 30, 20, 20); b.Dispose(); g.Dispose(); else if (wzqi, j = -1) Graphics g = this.pictureBox1.Creat

16、eGraphics(); Brush b; b = new SolidBrush(Color.Black); g.FillEllipse(b, 20*i+20, 20*j+30, 20, 20); b.Dispose(); g.Dispose(); 悔棋功能的具體實現(xiàn)過程是先判斷是否剛開局,有無可悔棋的棋子,如果有,就在窗口中重新畫出棋盤,根據(jù)模式不同將最后落下的1個或2個棋子的信息初始化,再重新把悔棋后存在的棋子畫在棋盤上。2.鼠標(biāo)點擊落子功能的實現(xiàn): 添加鼠標(biāo)事件處理函數(shù)MouseDown(),先獲取點擊點位置坐標(biāo),再判斷出點擊點是否在棋盤內(nèi)且無子,當(dāng)點擊點可落子時,就在棋盤上畫出棋子,讓

17、wzq1919記錄該點棋子信息,把該手棋的具體坐標(biāo)交給qibushu,用于悔棋操作,后檢查游戲是否形成五子連珠,完成本次落子任務(wù)。具體代碼如下:private void pictureBox1_MouseDown(object sender, MouseEventArgs e) int x, y; x =(e.X - 20) / 20; y =(e.Y - 30) / 20; if(star=true&&x>=0&&x<19&&y>=0&&y<19) if (wzqx, y = 0) Graphics g

18、= this.pictureBox1.CreateGraphics(); Brush b; bushu+; if (colorwhite) b = new SolidBrush(Color.White); wzqx, y = 1; colorwhite = false; else b = new SolidBrush(Color.Black); wzqx, y = -1; colorwhite = true; g.FillEllipse(b, 20*x+20, 20*y+30, 20, 20); b.Dispose(); g.Dispose(); gameOver(x, y); qibushu

19、 = x * 100 + y; 鼠標(biāo)點擊落子功能的運行過程是,獲取點擊點坐標(biāo)并進行提取處理,方便棋子畫在交叉線上判斷點擊點是否在棋盤內(nèi),如果在棋盤內(nèi)。再判斷點擊點是否有棋子,如果沒有,就根據(jù)上一手棋的顏色在點擊點畫上相反顏色的棋子。調(diào)用gameOver(x, y)方法,判斷是否形成五子連珠,把落子點記錄到qibushu數(shù)組中。3.檢查游戲是否形成五子連珠,判斷游戲是否結(jié)束功能:新建gameOver()函數(shù),進行循環(huán)掃描橫豎撇捺四方向上有無黑子或白子形成五子連珠棋形,判斷游戲是否結(jié)束,是否彈出勝負(fù)提示框。具體代碼如下:private void gameOver(int x,int y) int

20、xx, yy; if (x < 4) xx = 0; else xx = x - 4; if (y < 4) yy = 0; else yy = y - 4; int i, j, a; for (i = xx; i < 15; i+) a = 0; for (j = i; j < i + 5; j+) a = a + wzqj,y; if (a = 5) MessageBox.Show("白棋勝!"); star = false; return; if (a = -5) MessageBox.Show("黑棋勝!"); star

21、= false; return; 先獲取下棋點的坐標(biāo)并轉(zhuǎn)化為棋盤上對應(yīng)的棋子坐標(biāo),判斷棋子在棋盤上的位子是否在棋盤邊緣。如果是,就從棋盤(0,0)位置開始向后掃描;不是,則從點擊點棋子坐標(biāo)向左上方移動四個交叉位,開始向后掃描。進行循環(huán)掃描橫豎撇捺四方向上有無黑子或白子形成五子連珠棋形,進而判斷游戲是否結(jié)束,根據(jù)情況決定是否彈出勝負(fù)提示框。4.讓子功能實現(xiàn):在模式三中,為了增加游戲難度,開發(fā)者首創(chuàng)讓子功能。開局后,先進行讓子布局。一般都是黑棋先行,在這里玩家執(zhí)黑,讓電腦1子,棋盤上變成了電腦執(zhí)白先行1子,白棋落在天元位置上,難度一般。玩家贏后,挑戰(zhàn)難度+1,玩家讓電腦2子,棋盤上電腦執(zhí)白先行2子

22、,白棋落在天元位置左右兩側(cè),難度適中,適合一段棋手挑戰(zhàn)。玩家贏兩局后,挑戰(zhàn)難度+1,玩家讓電腦3子,棋盤上電腦執(zhí)白先行3子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤交叉線上,難度相對適中,適合一段及以上棋手挑戰(zhàn)。讓4子和5子也是一樣的原理,難度較高,適合二段及以上棋手挑戰(zhàn)。具體代碼如下:private void pictureBox1_MouseMove(object sender, MouseEventArgs e) if (jushu = 1 && wzq9, 9 = 0&&star = true) Graphics g = this.pictu

23、reBox1.CreateGraphics(); Brush b; b = new SolidBrush(Color.White); wzq9, 9 = 1; colorwhite = false; g.FillEllipse(b, 20 * 9 + 20, 20 * 9 + 30, 20, 20); b.Dispose(); g.Dispose(); 鼠標(biāo)移動讓子功能的運行過程是,判斷是否剛剛開局,如果剛開局,就根據(jù)贏棋局?jǐn)?shù)進行讓子布局,把讓電腦先下的棋子在棋盤上畫出來。如果不是剛開局,說明已經(jīng)對讓子布局處理過,則跳過不再處理。5. 模式選擇窗口到各模式的跳轉(zhuǎn)功能實現(xiàn):新建四個window窗

24、體,各自添加按鈕控件,為模式選擇窗口添加四個模式跳轉(zhuǎn)按鈕并對其建立點擊事件,完成模式窗口到各模式的跳轉(zhuǎn)。具體函數(shù)代碼如下:private void button1_Click(object sender, EventArgs e) Form3 f3 = new Form3(); this.Hide(); DialogResult dr = f3.ShowDialog(); if (dr = DialogResult.OK) this.Visible = true;調(diào)用此函數(shù)后,會彈出模式一游戲窗口。其余跳轉(zhuǎn)按鈕代碼處理與此相似,只是彈出的窗體不同,進入的模式窗口也就不同,也就實現(xiàn)了模式窗口的跳

25、轉(zhuǎn)功能。6.人機對戰(zhàn)電腦下棋功能: 添加電腦下棋方法AiGo(),循環(huán)掃描棋盤上的棋形,算出最優(yōu)下棋點坐標(biāo),處理代碼如下:private void AiGo() for (i = 0; i < 19; i+) for (j = 0; j < 19; j+) if (a1x1, y1 < a1i, j) y1 = j; x1 = i; for (i = 0; i < 19; i+) for (j = 0; j < 19; j+) if (a2x2, y2 < a2i, j) y2 = j; x2 = i; if (a2x2, y2 >= a1x1, y1

26、) px = x2; py = y2; else px = x1; py = y1; 該算法先對棋盤上的棋子進行循環(huán)掃描,分析橫豎撇捺四方向上的棋子分布情況,算出黑白棋子在棋盤上各點的棋形得分情況,分?jǐn)?shù)越高,該點越重要,此部分為函數(shù)中省略部分,由于代碼量龐大,不再闡述。接下來對是循環(huán)比較,分別找出黑白棋子在棋盤上的最高得分點坐標(biāo),進而比較出二者中的得分最高點坐標(biāo),即最優(yōu)下棋點坐標(biāo)。7.初始化功能的實現(xiàn):private void OnStart() for (int i = 0; i < 19; i+) for (int j = 0; j < 19; j+) wzqi,j = 0;

27、colorwhite = false; star = true; bushu = 0; pictureBox1.Refresh(); 在每個模式中都需對窗口界面進行初始化,對各參數(shù)進行初始化處理。8.返回功能的實現(xiàn):private void button1_Click(object sender, EventArgs e) this.DialogResult = DialogResult.OK; this.Close();關(guān)閉子窗體,恢復(fù)隱藏的父窗體。四、 遇到的問題及解決方案問題1:窗口間的跳轉(zhuǎn),實現(xiàn)不了。解決方法:查找資料,上網(wǎng)學(xué)習(xí),百度知道,當(dāng)然搜索到的答案不一定正確且不全面,需要反復(fù)嘗

28、試,于是經(jīng)過慢慢嘗試,解決了窗口跳轉(zhuǎn)問題。問題2:在窗口中的棋盤上畫棋子,棋子有時不會落在交叉線上。解決方法:經(jīng)過仔細(xì)觀察,總結(jié)規(guī)律,發(fā)現(xiàn)畫棋子用的方法不對,畫在棋盤上的棋子坐標(biāo)與棋盤上的交叉點有出入。經(jīng)過嘗試,找到了方法,于是改變了畫棋盤的方法,讓每一個交叉點都有具體的坐標(biāo),這樣,不管鼠標(biāo)點在哪里,想辦法在交叉點坐標(biāo)畫棋子就可以了。問題3:實現(xiàn)悔棋功能時,想著把最后下的棋子去掉,卻實現(xiàn)不了。解決方法:靜下心來,仔細(xì)看自己編寫的代碼,模擬電腦運行調(diào)用程序的先后順序看代碼,想象運行的結(jié)果,于是發(fā)現(xiàn)悔棋的棋子信息是初始化了,但沒有在棋盤上表現(xiàn)出來,沒想到好辦法,只好麻煩電腦再重新畫出棋盤,循環(huán)畫出

29、悔棋后存在的棋子。問題4:判斷游戲是否結(jié)束,掃描是否產(chǎn)生五子連珠,老是判斷出錯誤。解決方法:經(jīng)過請教度娘后,借鑒了前輩們的方法,完成了游戲結(jié)果分析函數(shù)。問題5:加載自己處理的圖片作為游戲棋盤背景,卻加載不進去或圖片不管用。解決方法:直接在屬性中設(shè)置背景圖片。問題6:人機對戰(zhàn),機器下棋功能的實現(xiàn),算法寫不出來,沒有頭緒,不知道從何處下手。解決方法:經(jīng)過多次嘗試失敗后,決定借鑒前輩們的算法,于是搜索到了不少算法,心中的貪念讓人無法取舍,不知道用哪個好,看著這些算法不知道怎么用,更不清楚原理。幾經(jīng)波折終于意識到了自己的當(dāng)務(wù)之急是先理解,于是選了一個注釋全面的算法,深入理解,經(jīng)過嘗試學(xué)會了調(diào)用這個算法的工作過程,也實現(xiàn)了機器下棋的功能。問題7:讓子對戰(zhàn)模式中讓電腦先下的棋子,怎樣畫在棋盤上,出現(xiàn)了問題。解決方法:首先把這些棋子放在了OnPaint()函數(shù)中來繪制,結(jié)果有偏差,也沒弄懂原因,于是嘗試著在OnLButtonDown()函數(shù)中來繪制,運行界面后棋盤上無棋子,結(jié)果鼠標(biāo)點擊的一瞬間出現(xiàn)了3顆棋子,這才意識到鼠標(biāo)事件產(chǎn)生了沖突,也想到了在點擊鼠標(biāo)時,鼠標(biāo)的移動事件先觸發(fā),然后點擊事件才

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論