作者sitos (麥子)
站內Facebook
標題Re: [閒聊] 寶石方塊好難阿....
時間Mon Jul 19 21:10:23 2010
: → 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
1F:→ ColdDark:我覺得這是款運氣成分很高的遊戲,機器人不一定拿的到高分 07/19 21:14
2F:→ ColdDark:不過平均分數應該會比大部分的人手高應該是沒問題的 XD 07/19 21:14
3F:→ sitos:我現在的版本要是沒剛好遇到 Bug ,平均已經超過 1M 了。 07/19 21:17
4F:→ sitos:我開個實況好了,不然只放最高分可能覺得太看運氣。 07/19 21:18
http://zh-tw.justin.tv/sitos 放著讓它跑一陣子,不過月亮神助出現可能會卡住。
※ 編輯: sitos 來自: 60.248.178.71 (07/19 21:22)
5F:推 kto0623:好帥XD 07/19 22:06
6F:推 Rayko:那個...雖然用程式或是用CE暫停時間可以達到同時移動 07/19 22:49
7F:→ Rayko:無數個方塊 但是還是有它的規則在 07/19 22:49
8F:→ Rayko:比如說硬拉三個方塊去湊一個五連黑星 是會被系統彈回來的 07/19 22:50
是的,這個我最早的版本就試驗過了,不行。
不過我也找到了可以拉在一起的規則。從上面的 replay 應該就看得出來了。 :)
9F:推 martian001:推~ 還有實況真有趣XDDD 07/19 23:47
10F:推 jujang:晚點測試看看 感謝分享 07/20 00:04
11F:→ ohyago:看你最高分的REPLAY 七跟八倍好像是都差10秒才出現@@ 07/20 06:37
http://sitos.dyndns.org/Blitz.html 裡面 x7 是 44s 出現 x8 是 39s 不到 10 秒阿?
12F:推 wcmwcm:實況真是有趣,看機器人玩寶石方塊有種見鬼了的FU~ 07/20 11:40
13F:→ wcmwcm:認真推~~ 07/20 11:40
14F:推 shwu0426:好有趣!! 07/20 13:04
實況先關了,很吃上傳。 :)
※ 編輯: sitos 來自: 60.248.178.71 (07/20 20:16)
15F:推 DJY:玩到破140W了... 07/20 20:17
16F:推 jujang:應該說擺著讓機器人玩 07/21 20:54
17F:推 ianwww:有關x2的方塊啊..根據用變速器慢慢玩的經驗...應該跟前面 07/25 16:42
18F:→ ianwww:說的沒錯.正常情況下是動一個方塊然後消12個以上..就出現 07/25 16:42
19F:→ ianwww:但進到加速狀態時..1000up?變成動一次方快要消好幾個才會出 07/25 16:43
20F:→ ianwww:現..像我都是用黑星去消十字..or黑星消兩個爆炸以上都會出 07/25 16:44
21F:→ ianwww:現..另外再動方塊前..盤面方快要停住.而不是盤面還在掉就在 07/25 16:45
22F:→ ianwww:動..根據以上方法..10s的限制是不存在的..通常可在剩35s前 07/25 16:46
23F:→ ianwww:消到x8...最高紀錄是340萬(變速器) 07/25 16:48