技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 7599
|
題目:
我們在Windows附件中接觸過掃雷游戲,掃雷游戲是程序提供環(huán)境,人工進(jìn)行掃雷。本題則要求根據(jù)已有的掃雷環(huán)境(附件),編寫程序進(jìn)行自動掃雷。
附件中提供了一個已經(jīng)封裝成類的MineClass環(huán)境,實(shí)現(xiàn)了全部的游戲邏輯。解答者無需考慮游戲?qū)崿F(xiàn)方法,所需做的就是編寫人工智能程序,通過MineClass的公共接口,訪問雷區(qū)數(shù)據(jù),以及對雷區(qū)進(jìn)行操作。一旦排雷成功,將可以通過接口獲得通關(guān)密碼,作為程序完成的證據(jù)。
由于掃雷不一定能夠一次成功,因此允許解答者的程序,在失敗后調(diào)用公共接口重新開始游戲,進(jìn)行多次嘗試,一次成功即算完成。
環(huán)境:
MineClass提供了完整的游戲交互接口,游戲使用16行,30列(左下角為1行1列),99雷的設(shè)定,并提供如下接口:
Public Function CreateWinMine() As MineClass
公共模塊中的方法,返回一個MineClass實(shí)例,用于創(chuàng)建MineClass實(shí)例。
'雷格信息的枚舉
Public Enum CellInfoEnum
ciNoMine = 0 '四周無地雷
ciOneMine = 1 '四周地雷數(shù):1
ciTwoMines = 2 '四周地雷數(shù):2
ciThreeMines = 3 '四周地雷數(shù):3
ciFourMines = 4 '四周地雷數(shù):4
ciFiveMines = 5 '四周地雷數(shù):5
ciSixMines = 6 '四周地雷數(shù):6
ciSevenMines = 7 '四周地雷數(shù):7
ciEightMines = 8 '四周地雷數(shù):8
ciTag = 9 '雷格被標(biāo)記
ciUnknown = 10 '雷格尚未探索
ciWin = 11 '游戲已經(jīng)勝利
ciLose = 12 '游戲已經(jīng)失敗
End Enum
'批量探索雷格的結(jié)果枚舉
Public Enum OpenCellsEnum
ocSuccess = 1 '探索成功
ocNotOpened = 1 '雷格未探索
ocNotMatch = 2 '雷數(shù)與標(biāo)記數(shù)不符
ocWin = 11 '游戲已經(jīng)勝利
ocLose = 12 '游戲已經(jīng)失敗
End Enum
[/quote]
[quote]☆MineClass類:(游戲進(jìn)行中可使用的方法)
Public Sub NewGame()
重新游戲,所有數(shù)據(jù)全部重置,用于游戲失敗后再次嘗試。
Public Function OpenCell(Row As Long, Col As Long) As CellInfoEnum
打開單個雷格,不作任何智能擴(kuò)展,并返回打開后的狀態(tài),可通過此狀態(tài)判斷雷格周邊的地雷數(shù),也用于判斷游戲是否勝利/失敗。(最主要的操作方法)
Public Function OpenCellEx(Row As Long, Col As Long) As CellInfoEnum
以擴(kuò)展方式打開單個雷格,即當(dāng)此地雷格四周無地雷時,將自動打開四周的所有雷格,并返回打開后的狀態(tài),可通過此狀態(tài)判斷雷格周邊的地雷數(shù),也用于判斷游戲是否勝利/失敗。(雖然此方法功能強(qiáng)大,但是無法跟蹤被打開的所有雷格,無法提供調(diào)用者全部的信息,因此此方法僅備用。)
Public Function OpenCells(Row As Long, Col As Long) As OpenCellsEnum
以擴(kuò)展方式打開多個雷格,即當(dāng)此地雷格四周的地雷數(shù)和標(biāo)記數(shù)相等時,自動以擴(kuò)展方式打開四周的所有的未標(biāo)記雷格,并返回打開后的狀態(tài),可通過此狀態(tài)判斷游戲是否勝利/失敗。(雖然此方法功能強(qiáng)大,但是無法跟蹤被打開的所有雷格,無法提供調(diào)用者全部的信息,因此此方法僅備用。)
Public Function ReadCell(Row As Long, Col As Long) As CellInfoEnum
不對雷格進(jìn)行任何操作,僅再次讀取其狀態(tài)。
Public Function SetTag(Row As Long, Col As Long, Optional TagStatus As Variant) As Boolean
設(shè)置雷格標(biāo)記,TagStatus可指定為True或False,也可省略,MineClass將自動反置當(dāng)前的雷格標(biāo)記狀態(tài),同時將返回設(shè)置完畢后的雷格標(biāo)記狀態(tài)。
[/quote]
[quote]☆MineClass類:(游戲勝利/失敗后可使用的方法)
Public Function GetWinCode() As String
游戲勝利后獲取過關(guān)密碼
<DIV class=quote>ublic Functi |
|