




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、青島理工大學(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í)際的能力。通過課程設(shè)計(jì),使得學(xué)生能夠加深對(duì)講授內(nèi)容的理解、累積經(jīng)驗(yàn)、學(xué)會(huì)獨(dú)立上機(jī)調(diào)試程序;并且逐步達(dá)到綜合運(yùn)用網(wǎng)頁相關(guān)知識(shí),真正掌握.NET技術(shù)的精華,從而達(dá)到熟練應(yīng)用程序設(shè)計(jì)語言的目的。也為將來做較大的系統(tǒng)打下
2、堅(jiān)實(shí)基礎(chǔ)。通過本次課程設(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)語系部教研室 意 見一、需求分析1.選題:通過學(xué)習(xí)window窗體應(yīng)用程序的開發(fā)與實(shí)現(xiàn),對(duì)C#程序開發(fā)逐漸產(chǎn)生了濃厚的興趣,心中有了設(shè)計(jì)游戲的想法,通過學(xué)習(xí)和查資料慢慢對(duì)游戲制作有了一定的了解,后來通過深入學(xué)習(xí),對(duì)五子棋游戲設(shè)計(jì)有了進(jìn)一步了解,慢慢理清了其中的開發(fā)過程與原理,最終確定了基于C
3、#五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)項(xiàng)目。2.界面:(1)通過上網(wǎng)學(xué)習(xí),對(duì)游戲界面風(fēng)格有了一定的認(rèn)知,于是決定走界面美觀風(fēng)。手游中的主界面給人一種簡單明了的感覺,通常有模式關(guān)卡,讓玩家越玩越帶感,于是決定模仿它們,游戲主界面有四個(gè)模式,玩家可以選擇不同模式進(jìn)行對(duì)弈。如圖1所示:模式四模式三模式二模式一 圖1.主界面(2)游戲模式一,雙人對(duì)戰(zhàn)模式。界面右側(cè)有悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕,點(diǎn)擊各按鈕,執(zhí)行各功能。如圖2所示:棋 盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n 圖2.模式一界面 (3)游戲模式二,人機(jī)對(duì)戰(zhàn)模式。游戲界面中左部是棋盤,悔棋、返回、排行榜、關(guān)于、重新開始等功能按鈕
4、,此模式實(shí)現(xiàn)了人和電腦的交互。如圖3所示:棋 盤關(guān)于按鈕排行榜按鈕悔棋按鈕返回按鈕重新開始按鈕n 圖3.模式二界面(4)游戲模式三,讓子挑戰(zhàn)模式。游戲界面中左部是棋盤,右部有悔棋、返回、排行榜、關(guān)于、重新開始功能選項(xiàng)按鈕。和模式二不同的地方是讓子,開局后棋盤中布好了讓給電腦的白子。正所謂有人的地方就會(huì)有爭斗,游戲中有菜鳥就會(huì)有高手。高手喜歡挑戰(zhàn),于是挑戰(zhàn)模式應(yīng)運(yùn)而生。此模式的界面和模式二界面相同,在此不再重畫。(5)游戲模式四,收拾殘局模式。游戲界面中左部是棋盤,右部有擺棋、對(duì)戰(zhàn)、悔棋、返回、再來一局功能選項(xiàng)按鈕。和模式二不同的地方是開局,開局后玩家需先擺放棋子,然后點(diǎn)擊對(duì)戰(zhàn)按鈕開始游戲。此模
5、式界面設(shè)計(jì)參造模式二,不再重畫。3.功能劃分:通過對(duì)五子棋游戲的分析與了解,可知其基本功能有開始、保存、打開、悔棋、認(rèn)輸、和棋、返回、退出及聊天等功能。在這里,由于條件時(shí)間有限,僅實(shí)現(xiàn)悔棋、返回、重新開始及模式選擇等功能。(1)模式選擇功能:在打開游戲后,出現(xiàn)在玩家面前的是模式選擇窗口,即主窗口。玩家可通過點(diǎn)擊相應(yīng)按鈕進(jìn)入相應(yīng)模式進(jìn)行對(duì)弈。此功能參照手游及單機(jī)小游戲主界面簡約美觀的特性制作的,多模式的增加符合廣大玩家的喜好。(2)悔棋功能:在每個(gè)模式中都有悔棋功能,在模式一中每次悔棋退后一子,模式二到模式四每次悔棋退后兩子,棋盤開局后就有的讓子的棋子悔棋無效。人無完人,誰能不犯錯(cuò),根據(jù)玩家的棋
6、藝高低程度難以把握,為了讓玩家不至于因電腦太強(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ì)手都是電腦,電腦棋力取決于
7、開發(fā)者,在某中意義上來說,玩家在和開發(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子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤
8、交叉線上,難度相對(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)行任何處理操作;模式四,玩家勝出,
9、對(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.用到的類 類名描述說明Form3模式一游戲窗口類,該類主要對(duì)該模式下的窗口初始化并對(duì)鼠標(biāo)等事件消息進(jìn)行處理,實(shí)現(xiàn)悔棋功能、返回功能、排行榜功能、關(guān)于功能、重新開始功能等。Form4模式二游戲窗口類,該類主要對(duì)該模
10、式下的窗口進(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)入模式窗口,選擇游戲模式
11、窗口彈出,窗口中有四個(gè)模式選擇按鈕,點(diǎn)擊按鈕,分別彈出對(duì)應(yīng)的模式一、二、三、四窗口,完成具體模式的跳轉(zhuǎn)。對(duì)于模式一,玩家點(diǎn)擊鼠標(biāo)進(jìn)行下棋操作,判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無子時(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ù),
12、初始化模式一窗口,重新開始游戲。 對(duì)于模式二、三、四,玩家點(diǎn)擊鼠標(biāo)進(jìn)行下棋操作,首先調(diào)用MouseMove函數(shù)。此函數(shù)的作用是判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無子時(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ù)判斷并提示勝
13、負(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)命令否悔棋關(guān)于從新開始等待鼠標(biāo)命令判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無子鼠標(biāo)點(diǎn)擊彈起否判斷點(diǎn)擊點(diǎn)在棋盤內(nèi)且無子是否判斷是否存在五子
14、連珠是在點(diǎn)擊點(diǎn)畫出棋子否彈出勝負(fù)提示框判斷是否存在五子連珠電腦掃描最佳落子點(diǎn)是是否彈出勝負(fù)提示框判斷是否存在五子連珠 圖4.流程圖 三、 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)1.悔棋功能的實(shí)現(xiàn):為悔棋按鈕添加類向?qū)?,再添加int變量bushu、qi400、wzq1919,用于記錄先后下棋的具體坐標(biāo),以便于悔棋功能的實(shí)現(xiàn)。bushu用于記錄下棋的落子數(shù),qi400用于記錄棋子的具體坐標(biāo),wzq1919用于記錄棋盤上各點(diǎn)存在棋子的黑白及有無情況?;谄骞δ艿膶?shí)現(xiàn)原理是重新畫出棋盤及悔棋后存在棋子。先判斷是否剛剛開局,bushu不為0,就執(zhí)行悔棋命令,把最后落下的第bushu個(gè)棋子的信息初始化,再畫出棋盤,重畫悔棋后存在的
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(); 悔棋功能的具體實(shí)現(xiàn)過程是先判斷是否剛開局,有無可悔棋的棋子,如果有,就在窗口中重新畫出棋盤,根據(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)且無子,當(dāng)點(diǎn)擊點(diǎn)可落子時(shí),就在棋盤上畫出棋子,讓
17、wzq1919記錄該點(diǎn)棋子信息,把該手棋的具體坐標(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)點(diǎn)擊落子功能的運(yùn)行過程是,獲取點(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)記錄到qibushu數(shù)組中。3.檢查游戲是否形成五子連珠,判斷游戲是否結(jié)束功能:新建gameOver()函數(shù),進(jìn)行循環(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; 先獲取下棋點(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)掃描橫豎撇捺四方向上有無黑子或白子形成五子連珠棋形,進(jìn)而判斷游戲是否結(jié)束,根據(jù)情況決定是否彈出勝負(fù)提示框。4.讓子功能實(shí)現(xiàn):在模式三中,為了增加游戲難度,開發(fā)者首創(chuàng)讓子功能。開局后,先進(jìn)行讓子布局。一般都是黑棋先行,在這里玩家執(zhí)黑,讓電腦1子,棋盤上變成了電腦執(zhí)白先行1子,白棋落在天元位置上,難度一般。玩家贏后,挑戰(zhàn)難度+1,玩家讓電腦2子,棋盤上電腦執(zhí)白先行2子
22、,白棋落在天元位置左右兩側(cè),難度適中,適合一段棋手挑戰(zhàn)。玩家贏兩局后,挑戰(zhàn)難度+1,玩家讓電腦3子,棋盤上電腦執(zhí)白先行3子,考錄到一般玩家沒有如此高深棋力,因此白棋分散落在棋盤交叉線上,難度相對(duì)適中,適合一段及以上棋手挑戰(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)移動(dòng)讓子功能的運(yùn)行過程是,判斷是否剛剛開局,如果剛開局,就根據(jù)贏棋局?jǐn)?shù)進(jìn)行讓子布局,把讓電腦先下的棋子在棋盤上畫出來。如果不是剛開局,說明已經(jīng)對(duì)讓子布局處理過,則跳過不再處理。5. 模式選擇窗口到各模式的跳轉(zhuǎn)功能實(shí)現(xiàn):新建四個(gè)window窗
24、體,各自添加按鈕控件,為模式選擇窗口添加四個(gè)模式跳轉(zhuǎn)按鈕并對(duì)其建立點(diǎ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ù)后,會(huì)彈出模式一游戲窗口。其余跳轉(zhuǎn)按鈕代碼處理與此相似,只是彈出的窗體不同,進(jìn)入的模式窗口也就不同,也就實(shí)現(xiàn)了模式窗口的跳
25、轉(zhuǎn)功能。6.人機(jī)對(duì)戰(zhàn)電腦下棋功能: 添加電腦下棋方法AiGo(),循環(huán)掃描棋盤上的棋形,算出最優(yōu)下棋點(diǎn)坐標(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; 該算法先對(duì)棋盤上的棋子進(jìn)行循環(huán)掃描,分析橫豎撇捺四方向上的棋子分布情況,算出黑白棋子在棋盤上各點(diǎn)的棋形得分情況,分?jǐn)?shù)越高,該點(diǎn)越重要,此部分為函數(shù)中省略部分,由于代碼量龐大,不再闡述。接下來對(duì)是循環(huán)比較,分別找出黑白棋子在棋盤上的最高得分點(diǎn)坐標(biāo),進(jìn)而比較出二者中的得分最高點(diǎn)坐標(biāo),即最優(yōu)下棋點(diǎn)坐標(biāo)。7.初始化功能的實(shí)現(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(); 在每個(gè)模式中都需對(duì)窗口界面進(jìn)行初始化,對(duì)各參數(shù)進(jìn)行初始化處理。8.返回功能的實(shí)現(xiàn):private void button1_Click(object sender, EventArgs e) this.DialogResult = DialogResult.OK; this.Close();關(guān)閉子窗體,恢復(fù)隱藏的父窗體。四、 遇到的問題及解決方案問題1:窗口間的跳轉(zhuǎn),實(shí)現(xiàn)不了。解決方法:查找資料,上網(wǎng)學(xué)習(xí),百度知道,當(dāng)然搜索到的答案不一定正確且不全面,需要反復(fù)嘗
28、試,于是經(jīng)過慢慢嘗試,解決了窗口跳轉(zhuǎn)問題。問題2:在窗口中的棋盤上畫棋子,棋子有時(shí)不會(huì)落在交叉線上。解決方法:經(jīng)過仔細(xì)觀察,總結(jié)規(guī)律,發(fā)現(xiàn)畫棋子用的方法不對(duì),畫在棋盤上的棋子坐標(biāo)與棋盤上的交叉點(diǎn)有出入。經(jīng)過嘗試,找到了方法,于是改變了畫棋盤的方法,讓每一個(gè)交叉點(diǎn)都有具體的坐標(biāo),這樣,不管鼠標(biāo)點(diǎn)在哪里,想辦法在交叉點(diǎn)坐標(biāo)畫棋子就可以了。問題3:實(shí)現(xiàn)悔棋功能時(shí),想著把最后下的棋子去掉,卻實(shí)現(xiàn)不了。解決方法:靜下心來,仔細(xì)看自己編寫的代碼,模擬電腦運(yùn)行調(diào)用程序的先后順序看代碼,想象運(yùn)行的結(jié)果,于是發(fā)現(xiàn)悔棋的棋子信息是初始化了,但沒有在棋盤上表現(xiàn)出來,沒想到好辦法,只好麻煩電腦再重新畫出棋盤,循環(huán)畫出
29、悔棋后存在的棋子。問題4:判斷游戲是否結(jié)束,掃描是否產(chǎn)生五子連珠,老是判斷出錯(cuò)誤。解決方法:經(jīng)過請(qǐng)教度娘后,借鑒了前輩們的方法,完成了游戲結(jié)果分析函數(shù)。問題5:加載自己處理的圖片作為游戲棋盤背景,卻加載不進(jìn)去或圖片不管用。解決方法:直接在屬性中設(shè)置背景圖片。問題6:人機(jī)對(duì)戰(zhàn),機(jī)器下棋功能的實(shí)現(xiàn),算法寫不出來,沒有頭緒,不知道從何處下手。解決方法:經(jīng)過多次嘗試失敗后,決定借鑒前輩們的算法,于是搜索到了不少算法,心中的貪念讓人無法取舍,不知道用哪個(gè)好,看著這些算法不知道怎么用,更不清楚原理。幾經(jīng)波折終于意識(shí)到了自己的當(dāng)務(wù)之急是先理解,于是選了一個(gè)注釋全面的算法,深入理解,經(jīng)過嘗試學(xué)會(huì)了調(diào)用這個(gè)算法的工作過程,也實(shí)現(xiàn)了機(jī)器下棋的功能。問題7:讓子對(duì)戰(zhàn)模式中讓電腦先下的棋子,怎樣畫在棋盤上,出現(xiàn)了問題。解決方法:首先把這些棋子放在了OnPaint()函數(shù)中來繪制,結(jié)果有偏差,也沒弄懂原因,于是嘗試著在OnLButtonDown()函數(shù)中來繪制,運(yùn)行界面后棋盤上無棋子,結(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)擊事件才
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)設(shè)計(jì)在智能產(chǎn)品開發(fā)中的作用和價(jià)值研究
- 工業(yè)領(lǐng)域的智能化數(shù)據(jù)分析
- 工業(yè)設(shè)計(jì)原理與產(chǎn)品設(shè)計(jì)創(chuàng)新
- 工業(yè)設(shè)計(jì)的創(chuàng)新方法與技術(shù)應(yīng)用
- 工業(yè)風(fēng)格商業(yè)空間設(shè)計(jì)
- 工業(yè)風(fēng)辦公室裝修風(fēng)格解讀
- 工作場合有效表達(dá)的技巧
- 工廠用電安全操作規(guī)范
- 工程力學(xué)中動(dòng)載材料特性研究
- 工程測量中的新方法與新技術(shù)探討
- (完整版)增值稅申報(bào)表帶公式模板
- 期末考試卷2《心理健康與職業(yè)生涯》(原題卷)高一思想政治課(高教版2023基礎(chǔ)模塊)
- 英文經(jīng)典電影賞析智慧樹知到期末考試答案2024年
- 從安全意識(shí)到安全行為習(xí)慣的養(yǎng)成
- 七下第三單元《駱駝祥子》整本書閱讀 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 坍塌事故培訓(xùn)課件
- 國有集團(tuán)公司中層及員工履職追責(zé)問責(zé)處理辦法模版
- 火災(zāi)隱患整改情況報(bào)告表4
- 高三數(shù)學(xué)復(fù)習(xí)備考策略
- 《環(huán)境工程概論4》全冊(cè)配套完整教學(xué)課件
- 工貿(mào)企業(yè)員工安全培訓(xùn)試卷
評(píng)論
0/150
提交評(píng)論