[閒聊] 寶石方塊(Bejeweled Blitz)機器人

看板Facebook作者 (麥子)時間14年前 (2010/07/19 21:10), 編輯推噓9(9015)
留言24則, 11人參與, 最新討論串1/3 (看更多)
: → sitos:倒是很希望可以跟其它有興趣寫 bot 的人交流一下 : 推 sitos:讀盤面進來判斷阿... 然後盡量多連一點? 目前還沒有作搜尋 : → sitos:不過讀點的顏色很容易誤判就是了... 這部份也還沒克服 : → sitos:不過其實判斷還滿複雜的... (為了高分) : → sfwejfish:你跟我說用啥寫的 我有興趣(咦 : → sfwejfish:完全沒碰過模擬輸入 囧 : 推 sfwejfish:編譯程式的話 GWB QB TC BC VC VB VS2008(MFC) 囧 詢問了一下板主,看來「機器人」應該不算在板規十一這條規定的範圍之內。 ▕ 十一、禁止討論惡意程式、作弊方式、BUG ▏ ▕ ▏ ▕ 禁止詢問、討論、分享或推廣任何竄改封包、修改記憶體或其 ▏ ▕ 他足以影響遊戲公平性的惡意程式、作弊方式或 BUG 等資訊 ▏ ▕ (含教學、心得、相關圖文、影片、關鍵字、分享或徵求程式 ▏ ▕ 、詢問使用方式等,詳細說明請見 #1C2zNPjg。) ▏ ▕ ▏ ▕ 發文處分:視情況水桶一周以上、原文逕行刪除或劣退。 ▏ ▕ 推文處分:視情況水桶一周以上,一行推文視為一案,得連續 ▏ ▕ 處分。 ▏ ▕  累犯追加:水桶加倍。 ▏ 因為「機器人」的運作原理上,並沒有竄改封包、修改記憶體, 而寶石方塊也不是對抗性的遊戲,所以比較沒有遊戲公平性的問題。 如果這篇文章以下的內容違反板規,請板主提醒,我會把文章刪掉。 進入正題之前,還是先提醒一下,這種靠反應和動作的遊戲, 「機器人」的能力遠勝過人手在玩是一定的。 作機器人並不是要顯示機器人比較厲害(因為這是早就知道的事), 而是想要知道: 1. 某些人手不可能達成的動作,做出來以後會是什麼樣的效果。 2. 遊戲進行的規則,例如倍數方塊出現的條件為何。 3. 在不破解遊戲的情況下,進行遊戲高分的可能性為何。 簡單來講,用手進行遊戲有用手進行的緊張感和樂趣, 而開發機器人,尋找高分的移動演算法,則有另外一番風趣。 各有各的樂趣,如果不喜歡機器人,對機器人沒興趣,請忽略這篇文章。 我的機器人是用 VC 2008 寫的,但我想其它 Windows 下的工具應該也可開發。 而我的對象程式則是用 chrome 開啟的 facebook 中的寶石方塊。 整個程式的流程大致如下: [找尋寶石方塊程式 FindWindowEx] v [取得遊戲畫布 GetDC] v [讀取遊戲盤面 GetPixel] <-- | v | | [決定移動] | | v | | [發出移動指令 SendMessage] -- 目前在製作上的兩大困難主要是在「讀取盤面」和「決定移動」上面。 讀取盤面的困難在於 1. 方塊的顏色並不是固定的,例如十字爆炸和小黑, 方塊的顏色是隨時間改變的,因此辨認上較為困難。 2. 會有沒用的訊息出現在盤面中,例如一開始的「GO」, 還有一堆 Good, Excellent ... 以及分數等等 3. 遊戲進行中方塊是會動的,尤其是從上面掉下來的方塊, A 顏色的方塊在掉的時候可能剛好符合 B 顏色的特徵。 這部份大概可以靠作苦工,慢慢把所有的例外修完,不曉得有沒有更好的辦法。 我有朋友建議我去讀記憶體,不過那有點作弊了,所以我就沒那樣去做。 決定移動的困難,其實主要可以分成兩個部份。 第一,怎樣的移動可以在寶石方塊這個遊戲當中取得高分,這取決於這個遊戲的規則。 先前我發的文章,也多是針對這個問題問的,當然也有一些心得。 我認為這是作機器人的樂趣之一,有興趣的人不妨自己動手調整,看看是否能更高分。 為了幹這件事,我好幾天整個晚上都坐在電腦前看機器人玩寶石方塊, 看到連閉上眼睛跟作夢,都會見到方塊合起來的影像。(有點太過火了)。 第二,怎樣達成前面觀察到的條件。例如是否只依目前盤面作決定, 或者要對可能的組合作最佳化。是不是要引入搜尋的概念等等。 這部份我目前都只有依目前盤面,甚至可以說依目前檢查到的這顆方塊來決定。 所以還有很大的進步空間,不過時間和動力不足,因為分數還沒有被超越。 我把一個簡化版的 source code 放在 http://sitos.myweb.hinet.net/Blitz-Simple.rar 裡面有我上面寫的基本流程的程式碼,基本上寫機器人需要用到的 API , 裡面都有示範應該要怎麼樣使用。想要嘗試的人,可以用 chrome 開 fb 的寶石方塊, 為了確保它抓得到該視窗,請不要同時用 chrome 開啟其它的網頁, 先進入寶石方塊的開始畫面,然後啟動這個程式,再幫它點開始,它應該就會動了。 這個範例是一個閹割過的版本,不會判斷任何特殊方塊, 所以很容易自己跑一跑卡住,因為這個程式的目的只是讓有興趣的人, 可以以這個程式為基礎來開發自己的機器人。直接用這個程式, 是無法取得很高的分數的,因為幾乎該有的功能都沒有。 目前我的 Bot 在我這邊自己做到第四版,而這個程式是從第一版割出來的。 所以當然... 相當地弱。 最後附上目前我手上有的 replay 裡面最高分的紀錄。 無道具 http://sitos.dyndns.org/Blitz.html 有道具 http://sitos.dyndns.org/Blitz2.html 希望對開發機器人有興趣的人可以以此為起點享受不一樣的樂趣。 如果有人得到更高的分數,煩請分享一下 replay ,這會給我改進 bot 的動力。 也可以讓我觀摩一下不一樣的演算法怎麼樣得到更高的分數。 :) -- 我實實在在的告訴你們,一粒麥子不落在地裡死了, 仍舊是一粒,若是死了,就結出許多子粒來。 約翰福音 12:24 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.178.71

07/19 21:14, , 1F
我覺得這是款運氣成分很高的遊戲,機器人不一定拿的到高分
07/19 21:14, 1F

07/19 21:14, , 2F
不過平均分數應該會比大部分的人手高應該是沒問題的 XD
07/19 21:14, 2F

07/19 21:17, , 3F
我現在的版本要是沒剛好遇到 Bug ,平均已經超過 1M 了。
07/19 21:17, 3F

07/19 21:18, , 4F
我開個實況好了,不然只放最高分可能覺得太看運氣。
07/19 21:18, 4F
http://zh-tw.justin.tv/sitos 放著讓它跑一陣子,不過月亮神助出現可能會卡住。 ※ 編輯: sitos 來自: 60.248.178.71 (07/19 21:22)

07/19 22:06, , 5F
好帥XD
07/19 22:06, 5F

07/19 22:49, , 6F
那個...雖然用程式或是用CE暫停時間可以達到同時移動
07/19 22:49, 6F

07/19 22:49, , 7F
無數個方塊 但是還是有它的規則在
07/19 22:49, 7F

07/19 22:50, , 8F
比如說硬拉三個方塊去湊一個五連黑星 是會被系統彈回來的
07/19 22:50, 8F
是的,這個我最早的版本就試驗過了,不行。 不過我也找到了可以拉在一起的規則。從上面的 replay 應該就看得出來了。 :)

07/19 23:47, , 9F
推~ 還有實況真有趣XDDD
07/19 23:47, 9F

07/20 00:04, , 10F
晚點測試看看 感謝分享
07/20 00:04, 10F

07/20 06:37, , 11F
看你最高分的REPLAY 七跟八倍好像是都差10秒才出現@@
07/20 06:37, 11F
http://sitos.dyndns.org/Blitz.html 裡面 x7 是 44s 出現 x8 是 39s 不到 10 秒阿?

07/20 11:40, , 12F
實況真是有趣,看機器人玩寶石方塊有種見鬼了的FU~
07/20 11:40, 12F

07/20 11:40, , 13F
認真推~~
07/20 11:40, 13F

07/20 13:04, , 14F
好有趣!!
07/20 13:04, 14F
實況先關了,很吃上傳。 :) ※ 編輯: sitos 來自: 60.248.178.71 (07/20 20:16)

07/20 20:17, , 15F
玩到破140W了...
07/20 20:17, 15F

07/21 20:54, , 16F
應該說擺著讓機器人玩
07/21 20:54, 16F

07/25 16:42, , 17F
有關x2的方塊啊..根據用變速器慢慢玩的經驗...應該跟前面
07/25 16:42, 17F

07/25 16:42, , 18F
說的沒錯.正常情況下是動一個方塊然後消12個以上..就出現
07/25 16:42, 18F

07/25 16:43, , 19F
但進到加速狀態時..1000up?變成動一次方快要消好幾個才會出
07/25 16:43, 19F

07/25 16:44, , 20F
現..像我都是用黑星去消十字..or黑星消兩個爆炸以上都會出
07/25 16:44, 20F

07/25 16:45, , 21F
現..另外再動方塊前..盤面方快要停住.而不是盤面還在掉就在
07/25 16:45, 21F

07/25 16:46, , 22F
動..根據以上方法..10s的限制是不存在的..通常可在剩35s前
07/25 16:46, 22F

07/25 16:48, , 23F
消到x8...最高紀錄是340萬(變速器)
07/25 16:48, 23F

07/25 16:55, , 24F
http://ppt.cc/3PXP 我期待機器人變得更聰明^^
07/25 16:55, 24F
文章代碼(AID): #1CH4x2fB (Facebook)
文章代碼(AID): #1CH4x2fB (Facebook)