999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于.NET的五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)

2015-12-15 02:46:04沈桂芳王海云
巢湖學(xué)院學(xué)報(bào) 2015年6期
關(guān)鍵詞:定義游戲

沈桂芳 王海云

(安徽新華學(xué)院信息工程學(xué)院,安徽 合肥 230088)

基于.NET的五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)

沈桂芳 王海云

(安徽新華學(xué)院信息工程學(xué)院,安徽 合肥 230088)

基于對五子棋游戲規(guī)則的分析,設(shè)計(jì)了該游戲的算法,并選擇Visual Studio 2008作為該軟件的開發(fā)平臺,實(shí)現(xiàn)了五子棋的多種對戰(zhàn)模式,既可人與人對戰(zhàn),也可人與電腦對戰(zhàn),更增加了多人對戰(zhàn),多人機(jī)對戰(zhàn)功能。還實(shí)現(xiàn)了無限步悔棋,自定義棋盤行列數(shù),自動保存殘局的功能。經(jīng)測試,本游戲系統(tǒng)功能齊全,能平穩(wěn)運(yùn)行,具有較強(qiáng)的使用價(jià)值。

五子棋;思考算法;多人對戰(zhàn);人機(jī)對戰(zhàn)

1 引言

五子棋游戲不僅能增強(qiáng)思維能力,提高記憶力,而且富含哲理,有助于修身養(yǎng)性。既有“場”的概念,亦有“點(diǎn)”的連接;是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。

.NET[1]框架是一個(gè)多語言組建開發(fā)和執(zhí)行環(huán)境,它提供了一個(gè)跨語言的統(tǒng)一編程環(huán)境。從層次結(jié)構(gòu)來看,.NET框架包括三個(gè)主要組成部分:(1)公共語言運(yùn)行時(shí)(CLR:Common Language Runtime)、(2)服務(wù)框架(Services Framework)和上層的兩類應(yīng)用模板——傳統(tǒng)的Windows應(yīng)用程序模板(Win Forms)和基于ASP.NET[1]的面向Web的網(wǎng)絡(luò)應(yīng)用程序模板 (Web Forms和Web Services)[2]。

因此,基于.NET平臺開發(fā)一款五子棋游戲[3]軟件非常有實(shí)用價(jià)值。

2 基于.NET的五子棋游戲的設(shè)計(jì)

本游戲程序功能分為游戲模塊和設(shè)置模塊兩部分。其中,游戲模塊分為棋盤欄和控制欄兩個(gè)模塊。棋盤欄主要實(shí)現(xiàn)繪制棋盤、棋子和標(biāo)記;控制欄的功能如圖1所示的功能。

其中,設(shè)置模塊的具體功能如圖2所示。

3 .NET的五子棋游戲的功能實(shí)現(xiàn)

棋盤欄的實(shí)現(xiàn)通過圖像繪制實(shí)現(xiàn),相對較為簡單。而控制欄,用于實(shí)現(xiàn)對游戲流程的控制、棋盤信息的顯示。控制欄是本項(xiàng)目的關(guān)鍵、也是最有難度的實(shí)現(xiàn)環(huán)節(jié)。

在實(shí)現(xiàn)控制欄的功能之前,首先需要實(shí)現(xiàn)棋盤信息的表示和存儲。

定義了一個(gè)棋盤類型如下所示。

使用X[num]和Y[num]記錄第num顆棋子在棋盤中的落棋位置,用player[X[num],Y[num]]標(biāo)記該棋子為哪個(gè)玩家所下,用style[num,,]存儲第num位玩家在棋盤中所有位置的棋型信息。

定義好棋盤的信息之后,需要對棋盤各處的棋子信息進(jìn)行整理、分析,以便提取出有用的棋型信息,為提供指引,做出有效的落棋決斷。

3.2.1 棋型的定義

對于棋盤中的各處坐標(biāo),在落下一些棋子之后,會由于所處的位置不同,在各個(gè)位置再落下棋子會達(dá)到不同的棋型。對于棋型的定義,大體上有三類:活棋、沖棋、死棋。

活棋,是指同時(shí)擁有兩個(gè)或兩個(gè)以上落棋位置的棋型,且這兩個(gè)落棋位置都要求可以達(dá)到更大棋型,在被堵住一個(gè)之后仍有一個(gè)更大棋型位置。如下圖3所示;沖棋,僅有一個(gè)更大落棋位置,在被其他玩家堵住后,成為死棋。如下圖4所示。

死棋,即使落棋也無法達(dá)到五子相連的棋型。如下圖5所示;其實(shí),上述棋型的定義還并不完全精確,還需要對其進(jìn)行補(bǔ)充定義,如下圖6所示的棋型:

對于這樣的棋型,看到它們中間有兩個(gè)更大棋型落棋位置,但它卻并不屬于活棋,因?yàn)楫?dāng)在一處位置放入棋子,其他玩家可在剩下的另一處放入棋子,而此時(shí)紅方的棋型為沖3并沒有增大,故對于這樣的棋型,將之定義為沖棋,更為合適。

于是,對于棋型的補(bǔ)充定義是:在棋型周邊的某個(gè)位置落入棋子后下一步可達(dá)到的最大棋型類型,為當(dāng)前棋型的類型。如上面的棋型,在落入棋子后可達(dá)到?jīng)_4,故當(dāng)前的棋型為沖3。

如圖7所示的棋型:對于這樣的棋型,當(dāng)在中間位置放入紅棋后可成為活棋,故為活3,而當(dāng)在兩邊放入紅棋是為沖棋,故為沖3。那么到底算哪一種棋型呢?這樣的補(bǔ)充定義是否自相矛盾呢?

以最大的棋型為準(zhǔn),為活3;這樣的定義也并不矛盾,當(dāng)在中間的位置放入棋子它為活4,故該位置在未放入棋子時(shí),為活3位置。而兩邊的位置若放入棋子為沖4,未放入棋子時(shí)為沖3位置。

同理,對于1、2、4顆棋子時(shí)也分別都有活、沖、死三種棋型[4]。

3.2.2 棋型的表示、存儲和更新

定義棋型是為了能夠根據(jù)棋型,進(jìn)行更優(yōu)落棋位置的判定。表示的棋型,更優(yōu)棋型應(yīng)當(dāng)有更大的權(quán)值。

對于更優(yōu)棋型有:相同棋子數(shù)時(shí),活棋>沖棋>死棋。相同棋型時(shí),棋子多的棋型更優(yōu)。具體有,五子>活4>沖4>活3>沖3>活2>沖2>活1>沖1>死棋。

以棋型的棋子數(shù)為十位,以0、1、2分別代表死棋、沖棋、活棋作為個(gè)位,構(gòu)成代表各種棋型的權(quán)值50>42>41>32>31>22>21>12>11>0(死棋時(shí)棋子數(shù)視作0)。這樣就可以實(shí)現(xiàn)各種棋型的表示了。

對于棋型的存儲,從棋子周邊的空位置開始,判斷該空位置周邊,五顆棋子范圍以內(nèi),各玩家的最大棋型,分別存儲到玩家對應(yīng)棋型數(shù)組style[,,]中。而對于已經(jīng)落入棋子的位置,不再判斷它周邊的棋型。

此時(shí),若在該棋子左邊的空位置處落入棋子可達(dá)到活4,故該空位置為活3點(diǎn)。若在該棋子右側(cè)落入棋子可達(dá)沖4,故該空位置為沖3點(diǎn)。于是在紅棋對應(yīng)的棋型數(shù)組中,對應(yīng)于這兩個(gè)空位置的棋型位置,分別存入代表棋型的權(quán)值32和31。對于該棋子周邊的其它空位置,也進(jìn)行同樣的判斷和棋型存儲。

由棋型的存儲知道,是從棋子周邊的空位置處開始進(jìn)行棋型判斷、并存儲到各玩家對應(yīng)的棋型數(shù)組中的,并且5顆棋子范圍以外的空位置,棋型不受影響。基于這些,只需在落下新的棋子時(shí),更新該棋子周邊空位置的棋型即可。具體的更新的算法實(shí)現(xiàn),這里不做詳細(xì)描述,參見棋盤類中棋型更新函數(shù)refreshStyle()。

棋型的一般識別過程如下圖8所示。

若在1處落入棋子,可達(dá)到?jīng)_4,則1處為沖3位置;同樣的2處為活。

對于任意一個(gè)未下棋子的空位置,都有8個(gè)方向,定義從0度到315度,間隔為45度,共8個(gè)方向分別為方向1、2……8。

則需從1和5、2和6、3和7、4和8這四組方向分別判斷玩家的最大棋型,該棋型即為玩家在該位置的最大棋型。

對于棋子在棋盤中的前臺繪制過程,定義了putChess()函數(shù)的來實(shí)現(xiàn),在繪制棋子之前,先行判斷該位置是否已經(jīng)落有棋子,如果已經(jīng)有棋子,則不再落棋。否則落入棋子,棋盤繪制棋子,后臺存儲棋子。后臺棋子的存儲和棋型刷新是由棋盤類型中的put()實(shí)現(xiàn)的。另外,還需判斷該位置是否存在5子連珠。若已構(gòu)成5子,則提示勝出,退出游戲、重玩或悔棋。

對于游戲勝負(fù)的判定,當(dāng)有一方獲勝時(shí),最后一顆棋子的落棋處,必然存在5子相連的棋型。只需在各棋子落下時(shí),以該棋子為中心位置,判斷該棋子五子相鄰的位置是否存在五子相連即可。若某次落棋后存在則該方獲勝。

在棋型不同時(shí)有,五子>活4>沖4>活3>沖3>活2>沖2>活1>沖1>死棋;在棋型相同時(shí),己方棋型的優(yōu)先級大于其他玩家的棋型。本項(xiàng)目獲取更優(yōu)落棋位置,大體上是從最大棋型向最小棋型,依次進(jìn)行判斷。判優(yōu)流程如下圖9所示。

首先,從棋盤中所有棋型位置中,獲取各玩家的最大棋型。如果當(dāng)前玩家或者其他玩家的最大棋型大于活3,則直接返回該最大棋型空位置。因?yàn)?,如果?dāng)前玩家棋型大于活3,則為沖4或活4,再落入一顆棋子后可以成棋。若是其他玩家棋型大于活3,則當(dāng)前玩家應(yīng)將其堵住,否則其他玩家則會成棋。

其次,如果當(dāng)前玩家的棋型達(dá)到活3,則返回該棋型位置,若是其他玩家的棋型達(dá)到活3,則先判斷當(dāng)前玩家是否存在某條大于活3的成棋路徑,如果存在則返回該成棋路徑的第一顆落子位置。若不存在,則需堵住其他玩家的活3棋型,在堵棋時(shí)也存在更優(yōu)堵棋位置的判定。

然后,是沖3棋型的判斷。如果當(dāng)前玩家達(dá)到?jīng)_3,則先判斷當(dāng)前玩家是否存在大于活3的成棋路徑,如果存在則返回該位置。如果是其他玩家達(dá)到?jīng)_3,則要先判斷該玩家是否有大于活3的成棋路徑,如果有,那么當(dāng)前玩家需在該位置堵棋。否則,繼續(xù)向下判斷。

接著,繼續(xù)對活2棋型進(jìn)行判斷。在達(dá)到活2棋型時(shí),先判斷是否存在某條活3成棋路徑。若存在,則返回該路徑的第一個(gè)落棋點(diǎn),若不存在,則進(jìn)行小一階活棋位置的判定。

最后,在己方所有相同棋型的落棋位置中,選擇更優(yōu)的落棋位置。對于己方相同棋型位置,根據(jù)各位置玩家棋型的排序數(shù)進(jìn)行更優(yōu)落棋位置判斷,取最大排序數(shù)位置。

4 結(jié)論

本項(xiàng)目基于.NET開發(fā)平臺,在棋形識別和判優(yōu)算法上提出創(chuàng)新算法并實(shí)現(xiàn),各個(gè)功能模塊經(jīng)測試運(yùn)行平穩(wěn)。實(shí)現(xiàn)界面如圖10所示。游戲的智能算法仍然有待改進(jìn)的地方,將在今后進(jìn)一步優(yōu)化改進(jìn)。

[1]夏敏捷.Visual Basic.NET程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2014∶28-296.

[2]夏敏捷.Visual C#.NET原理與實(shí)務(wù)[M].北京:中國電力出版社,2010∶10-315.

[3]坂田吾朗.五子棋弈理例解[M].孫滌非,劉德新,譯.北京:北京體育大學(xué)出版社,2002∶25-265.

[4]那威,殷立成.五子棋布局技巧[M].北京:金盾出版社,2011∶45-288.

THE DESIGN AND IMPLEMENTATION OF NET-BASED GOBANG GAMES

SHEN Gui-fang WANG Hai-yun
(School of Information Engineering,Anhui XinHua University,Hefei Anhui 230088)

This paper designs algorithms of gobang based on the analysis of rules of the game.And Visual Studio 2008 is selected as the development platform of the software to achieve various battle modes of gobang,including man-man games and mancomputer games.What is more,functions like multiplayer and many man-machines against mode are added.Also,unlimited undo steps,customizing the number of row and column,and auto-saving of the mess are realized.After testing,the game system is fully functional,and operates smoothly with a strong use value.

gobang;thinking algorithm;multiplayer games;man-machine mode

TP311.1

A

1672-2868(2015)06-0033-06

責(zé)任編輯:陳 侃

2015-10-12

國家大學(xué)生創(chuàng)新項(xiàng)目(項(xiàng)目編號:201412216024)

沈桂芳(1979-),女,安徽貴池人。安徽新華學(xué)院信息工程學(xué)院,講師。研究方向:軟件工程、智能計(jì)算。

猜你喜歡
定義游戲
永遠(yuǎn)不要用“起點(diǎn)”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風(fēng)格”
游戲
數(shù)獨(dú)游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
第八章直接逃出游戲
第八章 直接逃出游戲
修辭學(xué)的重大定義
主站蜘蛛池模板: 欧美a级完整在线观看| 日韩区欧美国产区在线观看| 欧美日韩高清在线| 亚洲日韩欧美在线观看| 免费福利视频网站| 欧美一区日韩一区中文字幕页| 青草视频久久| 国产精品yjizz视频网一二区| 免费一看一级毛片| 亚洲AⅤ无码国产精品| 国产a网站| 久久国产热| 99在线视频免费| 在线高清亚洲精品二区| 久久国产成人精品国产成人亚洲| 性激烈欧美三级在线播放| 中文字幕首页系列人妻| 人人爽人人爽人人片| 日韩久草视频| 一本久道久久综合多人| 欧美日本一区二区三区免费| 日韩精品资源| 在线毛片网站| 国产区在线观看视频| 国产精品99久久久久久董美香| 精品国产免费观看一区| 日韩欧美亚洲国产成人综合| 亚洲黄色成人| 99热6这里只有精品| 亚洲欧美自拍中文| 欧美午夜在线观看| 久久综合丝袜长腿丝袜| 毛片免费在线视频| 色AV色 综合网站| 欧美成人影院亚洲综合图| 狠狠色狠狠综合久久| 福利在线不卡| V一区无码内射国产| 真人免费一级毛片一区二区| 2020最新国产精品视频| 一级香蕉视频在线观看| 国产永久无码观看在线| AV天堂资源福利在线观看| 色婷婷电影网| 青青青国产在线播放| 99热国产这里只有精品无卡顿" | 国产精品无码作爱| 精品国产黑色丝袜高跟鞋| 免费A级毛片无码无遮挡| 国产成人免费高清AⅤ| 99久久精彩视频| 久久6免费视频| 性网站在线观看| 丁香五月婷婷激情基地| 亚洲精品爱草草视频在线| 欧美日韩成人在线观看 | 91精品aⅴ无码中文字字幕蜜桃| 青草国产在线视频| 日本a级免费| 国产91在线免费视频| 女人18毛片一级毛片在线| 夜夜操狠狠操| 欧美精品高清| 亚洲自偷自拍另类小说| 亚洲欧美精品在线| 色悠久久久久久久综合网伊人| 97国产一区二区精品久久呦| 欧美性猛交xxxx乱大交极品| 国产一区自拍视频| 日韩精品成人在线| 日韩欧美视频第一区在线观看| 精品视频一区在线观看| 国产毛片高清一级国语| 找国产毛片看| 国产精品自在拍首页视频8| 国产鲁鲁视频在线观看| 国产十八禁在线观看免费| 五月婷婷精品| 国产福利一区二区在线观看| 亚洲国产成人精品无码区性色| 青青操国产视频| 国产69精品久久|