星露谷物语(Stardew Valley)Mod Farmtronics 机器人自动浇水代码
模組介紹:【星露谷物語】你想要一群可愛可編程的工作機器人嗎?Farmtronics模組介紹_嗶哩嗶哩_bilibili
參考文檔
Farmtronics使用的編程語言語法?MiniScript-QuickRef.pages
Api?接口參考 ·喬斯特勞特/法姆電子學維基 ·吉特哈布 (github.com)
使用版本
Farmtronics.zip-10634-1-2-0-1658871311
SMAPI 3.16.2
一些筆記
1.機器人使用笛卡爾坐標系
2.玩家最好不要站在機器人行動的路徑上
3.機器人面對的方向(bot.facing) ?0為up 1為right 2為down 3為left
4.機器人模組里面一些名稱(Name)
Hoe鋤頭 Pickaxe十字鎬 Scythe鐮刀 Axe斧頭 Watering Can噴壺
Weeds纖維(雜草) Twig木頭 Stone石頭
5.type:Clump為大石頭和大樹樁 其中Name:Boulder為石頭? Name:Stump為大樹樁
使用clearAhead及clearAndMove時 如果工具不能破開這些障礙物 機器人會一直使用工具嘗試破壞
6.如果前面的地類型為"HoeDirt"(就是耕過的地)
使用clearAhead及clearAndMove時會用鋤頭把這片地清掉(無論是否有作物)
因此可以用bot.ahead.Crop == null 判斷是否有作物
7.腳本一般保存在 C:\Users\用戶名\AppData\Roaming\StardewValley\Saves\存檔\usrdisk(即為新手教程toDo中的usr路徑)此處的用戶名和存檔是實際名字
話不多說 上代碼
我的代碼包含了按行列澆水 自動補充噴壺 自動歸位的功能 但是有些地方還需要優化(隨緣吧)
這里是全局參數?
WaitTime為機器人前進一步后等待的時間(需要讓電腦反應過來 否則下一步會前進不了)
Line和Column為需要澆水的行數和列數 你可以自由設置
WaitTime = 0.3 Line = 3 Column = 3轉向函數 使機器人轉到某個方向? Facing為方向(類型為整型) 對應本文章-->一些筆記3.
TurnTo = function(Facing)while bot.facing != Facingbot.rightend while end function直線尋路 判斷障礙是否存在并清除?Facing為面對的方向 Steps為移動的距離
第一行的bot.可以不用加 不過我的代碼里面加了我就懶得改了
還有一些尋路的部分沒寫(隨緣補充)
bot.moveStraight= function(Facing, Steps)//先轉向TurnTo(Facing)for i in range(Steps-1)//清除障礙 需要考慮大樹樁和大石頭這些大障礙 還有水池(type:Property) 水池的判斷沒有寫if bot.ahead != null then//如果前面不為耕過的地(有的話bot.clearAhead也會一起清除)且不為大障礙if bot.ahead.name != "HoeDirt" and bot.ahead.type !="Clump" thenbot.clearAhead//如果無法清除的障礙不為終點就繞過去//如果無法清除的障礙為終點則跳出循環//還要判斷是否有水池end ifend ifbot.forwardwait(WaitTime)end for end function移動至目標位置 ToX為X的目標坐標 Y坐標同理
bot.position.x為獲取當前的x坐標
bot.moveTo = function(ToX,ToY)moveX = ToX - bot.position.xmoveY = ToY - bot.position.ybotTurnTo = 1//X軸面對的方向if moveX < 0 thenmoveX=-moveXbotTurnTo = 3end if //在X軸移動 if moveX !=0 thenbot.moveStraight(botTurnTo, moveX)end if //Y軸面對的方向 if moveY > 0 thenbotTurnTo = 2 else if moveY < 0 thenmoveY = -moveYbotTurnTo = 0 end if //Y軸移動 if moveY !=0 thenbot.moveStraight(botTurnTo, moveY)end if end function使用水壺并往前移動一格
判斷水壺是否為空 可以使用bot.inventory[index].waterLeft
這里index為水壺的序號 可以用bot.inventory[index].Name=="Watering Can"獲得index
這里裝水的位置(72,27)為圖中紅圈 你可以自由設置
?
UseWateringCanAhead = functionbot.select "Watering Can"bot.useTool//這里為判斷澆水后此地是否干燥if bot.ahead.dry ==1 thenStX = bot.position.xStY = bot.position.y//在72,27裝水bot.moveTo(72,27)TurnTo(2)bot.select "Watering Can"bot.useToolbot.moveTo(StX,StY)//重新澆水TurnTo(3)bot.select "Watering Can"bot.useToolend ifbot.forwardwait(WaitTime) end function澆水主函數
澆水的起始位置我設為白圈處 即田地最右上角的那塊地的右一格
?
WaterMain = function(line, column)//獲取澆水前的位置WaterOriginX = bot.position.xWaterOriginY = bot.position.yTurnTo(3)//逐行列澆水 for c in range(1,column)for l in range(1,line)UseWateringCanAheadend forbot.moveTo(WaterOriginX, WaterOriginY+c)TurnTo(3) end for//回到原位bot.moveTo(WaterOriginX,WaterOriginY) end function最后別忘了運行函數
WaterMain(Line,Column)程序使用方法
1.將上述代碼按文章順序復制 用記事本之類的軟件打開 保存為.ms文件
2.將這個.ms文件放置在 本文章的一些筆記-->7.?所說的usr路徑里面
3.右擊機器人 輸入代碼
load "文件名" run這里我將文件保存為"water.ms"
?
總結
以上是生活随笔為你收集整理的星露谷物语(Stardew Valley)Mod Farmtronics 机器人自动浇水代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机考研没有科研经历和竞赛,2020考
- 下一篇: 记录开发内容demo-java华为云发送