介绍一款Android小游戏--交互式人机对战五子棋
?? ? ? 學(xué)習(xí)Android系統(tǒng)開發(fā)之余,編寫了一個(gè)小游戲--交互式人機(jī)對(duì)戰(zhàn)五子棋,自?shī)首詷贰V苑Q之為交互式人機(jī)對(duì)戰(zhàn)五子棋,一是因?yàn)樵谶M(jìn)入人機(jī)對(duì)戰(zhàn)模式這前,你可以任意設(shè)置好開局,同時(shí),在對(duì)戰(zhàn)過程中,你可以看到機(jī)器的思考過程,還可以標(biāo)識(shí)出每一個(gè)落子點(diǎn)的優(yōu)劣勢(shì);二是因?yàn)榭梢詾闄C(jī)器增加游戲經(jīng)驗(yàn),使得機(jī)器越來越聰明。希望喜歡五子棋的同學(xué)能夠喜歡,同時(shí),它也非常適合入門級(jí)練習(xí)。
《Android系統(tǒng)源代碼情景分析》一書正在進(jìn)擊的程序員網(wǎng)(http://0xcc0xcd.com)中連載,點(diǎn)擊進(jìn)入!
?? ? ? 首先展示一下這款五子棋的主界面,由于自?shī)首詷返男∮螒?#xff0c;界面還是比較簡(jiǎn)陋,達(dá)不到產(chǎn)品發(fā)布的效果,見諒!
?? ? ?
?? ? ? ?第一. 在CSDN下載這款五子棋游戲,下載鏈接:
?? ? ? ?http://download.csdn.net/source/3423512
?? ? ? ?下載后,解壓,里面有三個(gè)文件,分別是Renju.apk、Renju.gif和交互式人機(jī)對(duì)戰(zhàn)五子棋.docx,其中,Renju.apk就是我們的Android五子棋游戲程序了。
?? ? ? ?第二. 如果有Android SDK環(huán)境,請(qǐng)先創(chuàng)建一個(gè)2.1 API版本的模擬器。打開cmd命令窗口,進(jìn)入到SDK目錄的tools文件夾,例如,如果你的SDK目錄放在D:\android-sdk-windows那么就進(jìn)入到D:\android-sdk-windows\tools目錄下。?
?? ? ? ?1.??首先執(zhí)行android list target查看目標(biāo)平臺(tái)列表命令:
?? ? ? ??
?? ? ??從這里可以看出,2.1 API的target id為3。
?? ? ? 2. ?執(zhí)行android create avd –n android2.1 –t 3命令創(chuàng)建名稱為android2.1的模擬機(jī):
?? ? ? ??
?? ? ? ?3. 執(zhí)行start /b android2.1命令在后臺(tái)運(yùn)行模擬機(jī):
?? ? ? ?
?? ? ? ?4.?如果tools目錄下有adb工具,則把Renju.apk文件放在tools目錄下,否則,把Renju.apk文件放在D:\android-sdk-windows\platform-tools目錄下,并進(jìn)入到D:\android-sdk-windows\platform-tools目錄中,執(zhí)行adb install Renju.apk命令安裝Renju.apk到模擬機(jī)上:
?? ? ? ?
?? ? ? ? 第三.??如果沒有Android SDK環(huán)境,請(qǐng)到新浪愛問:
?? ? ? ??http://ishare.iask.sina.com.cn/f/16902616.html
?? ? ? ??http://ishare.iask.sina.com.cn/f/16902614.html
?? ? ? ?下載Android 2.1 API模擬器(制作方法參考 制作可獨(dú)立分發(fā)的Android模擬器一文),解壓后,可以參照里面的README文件運(yùn)行模擬器和安裝Renju.apk文件。?? ? ? ? 1.??假設(shè)壓壓縮包解壓后放D:\AndroidEmulator目錄下。打開cmd命令窗口,進(jìn)入到D:\AndroidEmulator目錄,執(zhí)行start /b emulator.exe -sysdir d:\AndroidEmulator -system images\system.img -data images\userdata.img -ramdisk images\ramdisk.img -kernel images\kernel-qemu -skindir d:\AndroidEmulator\skins -skin HVGA命令在后臺(tái)運(yùn)行模擬器:
?? ? ? ? ?
?? ? ? ?2.?模擬器運(yùn)行起來之后,里面已經(jīng)內(nèi)置了Renju應(yīng)用程序,不用再安裝,如果沒有,則執(zhí)行adb install Renju\Renju.apk命令進(jìn)行安裝。
?? ? ? ?第四.?執(zhí)行完上述第一步或者第二步后,交互式人機(jī)對(duì)戰(zhàn)五子棋就安裝好了,進(jìn)入Home Screen屏幕上,可以看到Renju應(yīng)用程序,如下圖所示:
?? ? ? ?
?? ? ? ?第五.?使用方法。
?? ? ? ?點(diǎn)擊Home Screen上的Renju圖標(biāo),便可以打開程序:
?? ? ? ?
?? ? ? ?按住鼠標(biāo)不放,在棋盤上移動(dòng),在鼠標(biāo)位置會(huì)有一個(gè)“+”圖標(biāo)跟著鼠標(biāo)移動(dòng);放開鼠標(biāo),即可選定一個(gè)落棋點(diǎn):
?? ? ? ?
?? ? ? ? 主界面上有五個(gè)按鈕:
?? ? ? ? Start:點(diǎn)擊開始人機(jī)對(duì)戰(zhàn)
?? ? ? ? Shoot:當(dāng)棋盤上出現(xiàn)“+”圖標(biāo)時(shí),點(diǎn)擊按鈕在“+”位置上落下一個(gè)棋子,Renju會(huì)自動(dòng)計(jì)算當(dāng)前應(yīng)該下白棋還是黑棋
?? ? ? ? Undo:悔棋,點(diǎn)擊一次悔一步棋
?? ? ? ? Reset:重新開始游戲
?? ? ? ? Annotation:顯示/隱藏當(dāng)前棋盤每個(gè)落子點(diǎn)的得分情況,第一個(gè)數(shù)字表示黑棋得分,第二個(gè)數(shù)字表示白棋得分。數(shù)字后面的h表示100,如5h,表示得分為500,類似地,k表示1000,w表示10000。得分越大,表示落子點(diǎn)優(yōu)勢(shì)越大,如下圖所示:?? ? ? ??
?? ? ? ??程序有兩種模式,一是手動(dòng)對(duì)戰(zhàn)模式,一是人機(jī)對(duì)戰(zhàn)模式。打開程序時(shí),默認(rèn)是人人模式,點(diǎn)擊Start按鈕進(jìn)入人機(jī)對(duì)戰(zhàn)模式,進(jìn)入人機(jī)模式對(duì)戰(zhàn)模式后,不可以再切換至人人模式。人機(jī)對(duì)戰(zhàn)模式時(shí),電腦使用黑棋。
?? ? ? ?點(diǎn)擊右邊鍵盤區(qū)的menu按鈕,顯示菜單有四個(gè)菜單項(xiàng):
?? ? ? ?Importing Opening:導(dǎo)入開局
?? ? ? ?Exporting Opening:保存開局。當(dāng)前棋盤為空時(shí),不可用
?? ? ? ?Add To Experiences:增加電腦經(jīng)驗(yàn)。棋盤上為空或者只有一個(gè)棋子時(shí),不可用
?? ? ? ?Manage Experiences:管理電腦經(jīng)驗(yàn)
?? ? ? ?點(diǎn)擊ExportingOpening菜單,保存開局:
?? ? ? ?
?? ? ? ?在彈出框中輸入開局名稱,點(diǎn)擊OK按鈕即可。
?? ? ? ?點(diǎn)擊Importing Opening菜單,出現(xiàn)開局列表,選中其中一個(gè)開局,即可導(dǎo)入開局:?? ? ? ?
?? ? ? ?點(diǎn)擊Add To Experiences菜單,增加電腦經(jīng)驗(yàn)。例如,當(dāng)出現(xiàn)以下棋局時(shí):
?? ? ? ?
?? ? ? ??點(diǎn)擊Add To Experiences菜單,在彈出框中輸入經(jīng)驗(yàn)名稱:
?? ? ? ?
?? ? ? ??點(diǎn)擊OK按鈕,即可保存經(jīng)驗(yàn)。
?? ? ? ? 當(dāng)下次進(jìn)入人機(jī)對(duì)戰(zhàn)模式時(shí),如果電腦發(fā)現(xiàn)當(dāng)前的棋盤形勢(shì)如下圖所示時(shí):
?? ? ? ?
?? ? ? ??就會(huì)自動(dòng)在“+”位置上落下一個(gè)黑棋。
?? ? ? ?點(diǎn)擊Add To Experiences菜單,可以查看當(dāng)前電腦經(jīng)驗(yàn)列表:
?? ? ? ?
?? ? ? ? 第六. ?人機(jī)對(duì)戰(zhàn)原理。簡(jiǎn)單來說,就是通過獲勝表的方法,輪到機(jī)器落子時(shí),在獲勝表中找到得分值最大的落子點(diǎn),落下一個(gè)棋子,然后再用機(jī)器再預(yù)測(cè)對(duì)方下一個(gè)可能的落子點(diǎn),模擬對(duì)方下一個(gè)棋子,這時(shí)再判斷誰獲得優(yōu)勢(shì),如果機(jī)器處于劣勢(shì),再回到第一步中,找到得分值次大的落子點(diǎn),落下一個(gè)棋子,同樣,再預(yù)測(cè)對(duì)方下一個(gè)可能的落子點(diǎn),并模擬對(duì)方下一個(gè)棋子,再判斷誰獲得優(yōu)勢(shì),依次類推,這就是回溯算法了。所以,總的來說,機(jī)器的智能來自獲勝表+回溯算法,有時(shí)間再詳細(xì)描述,感謝關(guān)注。
?? ? ? ? 歡迎交流和合作,Email: shyluo@gmail.com.
老羅的新浪微博:http://weibo.com/shengyangluo,歡迎關(guān)注!
總結(jié)
以上是生活随笔為你收集整理的介绍一款Android小游戏--交互式人机对战五子棋的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python-Django毕业设计好又多
- 下一篇: Android—拼图小游戏