Добыча ресурсов
Черепашка-шахтёр — это первое, что делают большинство игроков в ComputerCraft. Она копает лучше любого игрока: не устаёт, не отвлекается, работает пока есть топливо.
Построим шахтёра постепенно: от простого до надёжного.
Базовое копание
turtle.dig() -- разрушить блок спереди
turtle.digUp() -- разрушить блок сверху
turtle.digDown() -- разрушить блок снизу
Простейший шахтёр — тоннель заданной длины:
local length = 20
for i = 1, length do
turtle.dig()
turtle.forward()
end
Проблема: если впереди нет блока — turtle.dig() вернёт false, а turtle.forward() может наткнуться на блок появившийся позже. Нужна проверка:
local function mineForward()
-- копаем пока блок не исчезнет (песок и гравий падают)
while turtle.detect() do
turtle.dig()
sleep(0.4)
end
return turtle.forward()
end
Инвентарь
Черепашка добытые блоки кладёт в инвентарь. 16 слотов, в каждом до 64 предметов. Когда инвентарь полон — нужно или вернуться, или выбрасывать лишнее.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
local function isInventoryFull()
for slot = 1, 16 do
if turtle.getItemCount(slot) == 0 then
return false
end
end
return true
end
local function dropTrash()
local trash = {
"minecraft:cobblestone",
"minecraft:dirt",
"minecraft:gravel",
}
for slot = 1, 16 do
local item = turtle.getItemDetail(slot)
if item then
for _, name in ipairs(trash) do
if item.name == name then
turtle.select(slot)
turtle.drop()
break
end
end
end
end
end
Шахтёр с умным инвентарём
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
local mined = 0
local depth = 50
for i = 1, depth do
-- сначала чистим инвентарь от мусора
if isInventoryFull() then
dropTrash()
end
-- если всё равно полный — останавливаемся
if isInventoryFull() then
print("Инвентарь заполнен на блоке " .. i)
break
end
mineForward()
mined = mined + 1
end
print("Прокопано: " .. mined .. " блоков")
Сканирование интересных блоков
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
local valuable = {
["minecraft:diamond_ore"] = "Алмаз",
["minecraft:emerald_ore"] = "Изумруд",
["minecraft:gold_ore"] = "Золото",
["minecraft:ancient_debris"]= "Древние обломки",
}
local function checkAndAnnounce(inspectFn)
local ok, data = inspectFn()
if ok and valuable[data.name] then
print("!!! Найдено: " .. valuable[data.name] .. " (" .. data.name .. ")")
end
end
-- Вызываем перед копанием
checkAndAnnounce(turtle.inspect)
checkAndAnnounce(turtle.inspectUp)
checkAndAnnounce(turtle.inspectDown)
Ветвистый тоннель (Branch Mining)
Один из самых эффективных паттернов — главный тоннель с боковыми ответвлениями:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
local function digBranch(length)
for i = 1, length do
mineForward()
turtle.digUp() -- высота 2 блока
end
-- разворачиваемся
turtle.turnLeft(); turtle.turnLeft()
for i = 1, length do
mineForward()
end
turtle.turnLeft(); turtle.turnLeft()
end
local mainLength = 50
local branchLength = 10
local branchInterval = 3
for i = 1, mainLength do
mineForward()
turtle.digUp()
if i % branchInterval == 0 then
-- боковое ответвление вправо
turtle.turnRight()
digBranch(branchLength)
turtle.turnLeft()
end
end
Возврат домой
Самый простой возврат — запомнить сколько прошли и вернуться на то же расстояние:
local steps = 0
for i = 1, 50 do
if mineForward() then
steps = steps + 1
end
end
-- разворачиваемся и идём назад
turtle.turnLeft(); turtle.turnLeft()
for i = 1, steps do
turtle.forward()
end
🚀 Задания
Задание 1
Напиши шахтёра который копает вниз до глубины 50. Перед каждым шагом вниз проверяет что снизу — если лава, останавливается. Считает и выводит глубину.
Задание 2
Добавь в шахтёра функцию countValuables() которая возвращает количество ценных предметов в инвентаре (алмазы, изумруды, золото). Выводи это число при каждом заполнении инвентаря.
Задание 3
Напиши шахтёра который копает тоннель высотой 3 блока (dig, digUp, digUp на одной позиции). Освещай его: каждые 8 блоков ставь факел на стену (turtle.place() после поворота).
Задание 4
Улучши систему возврата: вместо счётчика шагов используй три переменные dx, dy, dz и отслеживай реальное смещение. После работы возвращай черепашку точно в начальную точку.
Задание 5
Создай полноценного шахтёра: копает вниз до Y=12 (уровень алмазов), затем роет ветвистый тоннель по 20 блоков в 4 стороны. Записывает в переменную общее количество найденных алмазов и выводит отчёт.