亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        沈桂芳 王海云

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

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

        沈桂芳 王海云

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

        基于對五子棋游戲規(guī)則的分析,設(shè)計了該游戲的算法,并選擇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)的使用價值。

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

        1 引言

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

        .NET[1]框架是一個多語言組建開發(fā)和執(zhí)行環(huán)境,它提供了一個跨語言的統(tǒng)一編程環(huán)境。從層次結(jié)構(gòu)來看,.NET框架包括三個主要組成部分:(1)公共語言運(yùn)行時(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í)用價值。

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

        本游戲程序功能分為游戲模塊和設(shè)置模塊兩部分。其中,游戲模塊分為棋盤欄和控制欄兩個模塊。棋盤欄主要實(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)棋盤信息的表示和存儲。

        定義了一個棋盤類型如下所示。

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

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

        3.2.1 棋型的定義

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        對于任意一個未下棋子的空位置,都有8個方向,定義從0度到315度,間隔為45度,共8個方向分別為方向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)有一方獲勝時,最后一顆棋子的落棋處,必然存在5子相連的棋型。只需在各棋子落下時,以該棋子為中心位置,判斷該棋子五子相鄰的位置是否存在五子相連即可。若某次落棋后存在則該方獲勝。

        在棋型不同時有,五子>活4>沖4>活3>沖3>活2>沖2>活1>沖1>死棋;在棋型相同時,己方棋型的優(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棋型,在堵棋時也存在更優(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棋型時,先判斷是否存在某條活3成棋路徑。若存在,則返回該路徑的第一個落棋點(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),各個功能模塊經(jīng)測試運(yùn)行平穩(wěn)。實(shí)現(xiàn)界面如圖10所示。游戲的智能算法仍然有待改進(jìn)的地方,將在今后進(jìn)一步優(yōu)化改進(jìn)。

        [1]夏敏捷.Visual Basic.NET程序設(shè)計教程[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é)院,講師。研究方向:軟件工程、智能計算。

        猜你喜歡
        定義游戲
        永遠(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é)的重大定義
        亚洲中文字幕久久精品一区| 亚洲地区一区二区三区| 手机av男人天堂免费网址| 亚洲国产综合精品中久| 韩国三级大全久久网站| 成人免费毛片内射美女-百度 | 色大全全免费网站久久| 熟妇丰满多毛的大隂户| 精品少妇大屁股白浆无码| 久久精品国语对白黄色| 亚洲一区在线观看中文字幕| 少妇被猛男粗大的猛进出| 传媒在线无码| 日本在线观看一区二区视频| 亚洲精品久久国产精品| 国产成人无码区免费内射一片色欲 | 亚洲精品无码久久久久av麻豆| 中文人妻AV高清一区二区| 亚洲国产日韩综合天堂| 国产97色在线 | 国产| 97影院在线午夜| 99久久国语露脸国产精品| 亚洲av综合色一区二区| 亚洲成在人线在线播放无码| 在线视频你懂的国产福利| 丰满人妻被猛烈进入中文字幕护士| 免费观看91色国产熟女| 青青草原精品99久久精品66| 亚洲高清视频在线播放| 韩国一区二区三区黄色录像| 中文字幕日韩精品一区二区三区 | 免费一级国产大片| 亚洲成av人片极品少妇| 日本19禁啪啪吃奶大尺度| 国产视频导航| 国产黄三级三级三级三级一区二区| 国产香蕉视频在线播放| 人妻少妇被猛烈进入中文字幕| 少妇bbwbbw高潮| 偷拍色图一区二区三区| 国产成人无码一区二区在线播放|