釣魚一直是人們生活中的一部分,在任何有評論功能的網站中都不可避免的出現,可悲的發布者以獲得關注,浪費他人時間為目的,變著花樣編寫著評論。
不過今天講的不是上面那種釣魚,我只是忍不住。
「釣魚」操作作為一種獲取資源的方式,在很多遊戲裡都有,《饑荒》、《未轉變者》和《我的世界》裡甚至可以作為一種主要的遊戲方式(當然也可以完全不這麼做)。特點是無聊,大體上投入的時間是不值的。
(其實1.15之後刷鐵機非常香,在此推薦一下)
多人遊戲的時候可以使用教程中的掛機器,假裝自己努力釣魚,獲得一堆附魔弓,獲得一堆附魔書,吃不完的食物,說不定還有做腳手架的材料。
(自己單人玩的時候這麼搞還不如直接用「/give」。
釣魚很重要,所以自動釣魚也很重要,為何不用紅石呢?因為紅石釣魚機需要鐵和紅石材料搭建,這是在遊戲初期沒有的資源。紅石結構會遮擋水面,根據遊戲機制而降低釣魚效率,而外掛的程序就不會有影響。
(結合刷鐵機和村民交易,其實甚至不需要下礦,基礎世界可以玩成空島生存)
(1.17能出現了能聽聲音的紅石模塊,感覺拿來做釣魚機會非常好,不過如上優點仍然是有效的)
首先找一格水,去完成一整套釣魚流程,注意屏幕上的差異:
拋竿:
釣魚中:
看到魚:
收竿:
它們的變化釣魚時有氣泡,浮漂浮動,在魚咬鉤之前會看到由遠及近的水花。
(而且物品欄會有魚竿狀態的顯示
(成功釣魚會獲得經驗,有右下角也可以有聲音字幕(在設置裡頭開
最明顯的判斷應該是在能釣到魚時,浮漂會下降到水面以下。也就是說在釣魚的時候,如果魚沒有咬鉤,浮漂會在水面以上,此時不收竿;如果魚咬了鉤,浮漂就會下降,此時收竿釣魚。然後再點一下滑鼠重新拋竿,構成一整個循環。
也就是說,在水面上看到浮漂,就點兩下,如果看不到,就不點。
而「看到浮漂」的位置只有水面上那一塊區域。那就只截圖那塊區域用於判斷。而且如果保證那塊區域唯一出現紅色的情況就是圖標,就可以只使用顏色進行判斷。
(↑這一小塊區域已經足夠區分是否需要收竿
把它們處理為黑白的以更簡便的進行編程(實際上是劇情需要[1]
程序非常簡單:
截圖中如果有亮度大於一定值的區域,且該區域足夠大,就判斷浮漂在水面上,那麼就執行收拋竿操作。
試幾次之後成功了,看起來沒啥問題,那麼就可以試著掛機了。
。。。
二十分鐘之後,魚竿沒了,而且程序還一直在狂點右鍵。
首先,會發現它沒能力判斷魚竿是否在被拋出,如果伺服器中延遲過高,會導致它拋竿後一段時間沒有效果(即使是0.1秒,它已經截了兩三次圖了)。有些時候網絡環境特別差,一段時間內任何操作都沒有反應。。
然後在拋竿後,因為遊戲對上一個點擊操作沒有反應,導致屏幕上沒有浮漂,就和原先的設想不一樣了。
這是非常嚴重的問題(大概),這使這整個過程有概率完全崩潰,電腦耗著掛了一天機,才發現釣到幾條魚,好不容易搞到的附魔魚竿也沒了。
接下來畫一張程序邏輯圖,來更清晰的解釋整個過程(久違的打開ppt
以馬爾科夫鏈的格式來講:(狀態會轉移到不同的狀態。
之前的想法是:
其實是:
(↑如果運氣不好,它就會卡在右下角的循環裡,被連續的收放竿操作浪費掉所有魚竿耐久度
需要在執行操作之後再進行邏輯判斷,查看自身的狀態:
(註:循環在某些程式語言中是「跳轉」的意思
其實可以發現兩個邏輯判斷的內容是重複的,不如:
(做到這一步,代碼量變少了但是可讀性變差了很多,可以說是十分不python的,如果熟讀python的PEP,就知道儘量不要這麼做,以保證其它看代碼的人能更好的看懂。這裡只以教學目的告知可以這麼簡化。
(↑就像數學課本裡經常會有這種無聊的簡化,而且考試還會考)
另一個問題是天氣和外界光照的變化,這裡因為我太懶了不想截圖就只用文字講:
天黑時反覆收竿,下雨天不收竿。
分別對應False postive和True negative。
這是進行分類時很常見的問題,一般可以增加判斷信息量(維度數量)、精度的方式解決。但是在這個「釣魚掛機器中」,最簡單的方法是增加照明,釣魚點後面放深色且顏色統一的方塊,使用合理的光影或者不使用光影,通過改變遊戲內容環境來解決問題。
下雨天不收竿的原因是因為雨的藍色與浮漂的顏色相混淆,導致如果區域中始終有雨,就會讓程序以為浮漂始終在區域中,就不會有收竿操作。
(嘗試伏筆回收[1]
(其實可以通過去沙漠自然地形釣魚以避免這個問題,然而下雨時釣魚效率倍增,所以解決這個問題比避免這個問題益處大很多)
這個問題可以通過更換顏色通道甚至是HSV轉換的方式解決。
(其實遊戲在線時間長了有可能遇到掉線的情況,這時候就要做自動登錄,不過其實思想也是一樣的,就不在這裡多說了。
想一想:
如果想要妨礙一個這樣掛機的人,應該怎麼做?那掛機的人有如何預判別人的預判呢?那如何預判預判預判預判預判預判預判預判預判預判呢?
(我想的妨礙方法就是放個把自己也釋放個釣竿,使浮漂重合於掛機者的浮漂
你以為這就結束了嘛?在1.16的版本更新中,minecraft更改了釣魚機制,除了之前的水上有遮擋物會大大降低效率,還需要大片的,露天的水域,這導致連續的掛機會被幻翼乾死。
(我其實用神經網絡圖像識別做出來了自動打怪和自動睡覺的操作,但是它有點難度,不算基礎,可能以後會講。
可以把門側放來妨礙殭屍入侵(如果怕殭屍破門則需要鐵門),然後在門後拋竿。然後在周圍照明並圍起來,防止溺屍下去,被魚竿釣到自己身上。
之後記得砍很多樹,搞很多箱子和漏鬥,你會發現大概掛機一小時左右就能放滿大箱子,即使結合物品分類器,最終還是會大量的往末端輸出空瓶子、書、弓和釣魚竿。
(提示:享受掛機樂趣的同時可能會降低遊戲樂趣,請謹慎使用
(嗯,教程就先到這裡
引用:
將圖像轉換為灰度時導致的顏色失真問題其實是一種很常見問題,且對於初見者來說很難發現,在openai的強化學習實踐中,玩Atari的某個遊戲時程序因灰度轉換無法發現玩家位置,導致效果下降。
[1]https://openai.com/blog/openai-baselines-dqn/