ComputerCraft Auto Turtle

分类:综合类 标签:游戏, 无节操, 编程, IT, 二次元, MineCraft

喵了个咪,最近玩MC的computercraft, 学了一下lua脚本语言~~~
初学果然很坑爹, C/C++出身的咱, 对自动类型转换神马的很是蛋疼.. 不过lua这货似乎不用想的那么复杂,还是不错的脚本语言
so, 写了一个乌龟脚本.
功能:
1.鱼骨挖矿
Count是鱼骨的根数,Length是每根鱼骨的长度

e.p:count:3,Length:5,效果如下
++++++
+         +
+         +
+++++++++++
            +          +
            +          +
            ++++++
count:5,Length:5,效果如下
++++++
+          +
+          +
+++++++++++
            +          +
            +          +
+++++++++++
+          +
+          +
+++++++++++
            +          +
            +          +
            ++++++

2.挖掘矩形
矩形的高度是3, 也就是说挖掘矩形就是x,y,3的立方体
挖完后自动回归初始位置


3.挖掘立方体
立方体三个参数分别表示长宽高,
当高为1时, 挖乌龟所在平面;
当高为2时, 挖乌龟所在平面以及乌龟下边平面;
高大于2时, 挖乌龟下边平面到制定高度.


4.自动收甘蔗
自动收甘蔗必须用制定的甘蔗排列方式
参数 rows:甘蔗的行数,
count pre row: 每行甘蔗的棵数
time-out: 等待时间,也就是下次自动收甘蔗的时间间隔

甘蔗排列方式如下:
蔗蔗蔗蔗蔗蔗蔗蔗蔗蔗
水水水水水水水水水水
蔗蔗蔗蔗蔗蔗蔗蔗蔗蔗
水水水水水水水水水水
蔗蔗蔗蔗蔗蔗蔗蔗蔗蔗
龟(龟头向上)
收集器
乌龟收完甘蔗后回归原位,并抛下收获的甘蔗, 所以需要在龟屁股哪里放一个收集器并定时收集,或者人肉等待在那里,或者放个女仆在那~~
╮( ̄▽ ̄")╭

update 2012-08-06
version 1.0


目前没有包满自动回去放东西的设置,下个版本加入


--往前移动n格,遇到阻挡就挖掉
local function move(n)
	for i=1,n do
		while not turtle.forward() do
			turtle.dig();
		end
	end
end
--移动n格,遇到阻挡就挖掉
--flag:0	同move(n)
--flag:1	上移n格
--flag:2	下移n格
local function moveA(n,flag)
	if flag==0 then 
		move(n);
	elseif flag==1 then
		for i=1, n do
			while not turtle.up() do
				turtle.digUp();
			end
		end
	elseif flag==2 then		
		for i=1, n do
			while not turtle.down() do
				turtle.digDown();
			end		
		end
	else
		print("moveA flag Error!");
		return false;
	end
	return true;
end
--往前挖n格,前一格,前一格头上,前一格脚下
local function work(n)
	if n==0 then
		turtle.digUp();
		turtle.digDown();
	else
		for i=1, n do
			while not turtle.forward() do
				turtle.dig();
			end
			turtle.digUp();
			turtle.digDown();
		end
	end
end
--往前挖n格
--flag:0	同work(n)
--flag:1	同move(n)
--flag:2	挖前一格和前一格脚下;
--flag:3	挖前一格和前一格头上;  
local function workA(n,flag)
	if flag==0 then
		work(n);	
	elseif flag==1 then
		move(n);
	elseif flag==2 then
		if n==0 then
			turtle.digDown();
		else
			for i=1,n do
				while not turtle.forward() do
					turtle.dig();
				end
				turtle.digDown();
			end
		end
	elseif flag==3 then
		if n==0 then
			turtle.digUp();
		else
			for i=1,n do
				while not turtle.forward() do
					turtle.dig();
				end
				turtle.digUp();
			end
		end
	else
		print("workA flag Error!");
		return false;
	end
	return true;
end
--丢弃制定格子的方块
local function drop(n)
	turtle.select(n)
	turtle.drop();
end
--自动丢弃
--flag:0 丢弃所有
--flag:1 丢弃跟眼前方块相同的
local function dropA(flag)
	if flag=='0' or flag==0 then
		for i=1,9 do
			turtle.select(i)
			turtle.drop();
			sleep(.1);
		end
	elseif flag=='1' or flag==1 then
		for i=1,9 do
			if turtle.detect() and turtle.compare() then
				turtle.drop();
			end
		end
	else
		return false;
	end	
	return true;
end
--鱼骨
--YGcount 鱼骨根数
--YGlength 每根鱼骨长度
local function yg(YGcount, YGlength)
	local count = YGcount - 1;
	work((count)*3);
	turtle.turnLeft();
	for i=1, count do
		work(YGlength);
		if i%2 ~= 0 then
			turtle.turnLeft();
		else
			turtle.turnRight();
		end
		work(3);
		if i%2 ~= 0 then
			turtle.turnLeft();
		else
			turtle.turnRight();
		end
		work(YGlength);
	end
end
--矩形
--width 宽
--heigth 高
local function jx(x,y)
	work(0);
	for i=1,y do
		if i%2 ~= 0 then
			turtle.turnLeft();
		else
			turtle.turnRight();
		end
		work(x-1);
		if i%2 ~= 0 then
			turtle.turnRight();
		else
			turtle.turnLeft();
		end
		if i<tonumber(y) then
			work(1);
		end
	end
	if y%2 == 0 then
		turtle.turnLeft();
		turtle.turnLeft();
	else
		turtle.turnRight();
		move(x-1);
		turtle.turnRight();
	end
	move(y-1);
	turtle.turnLeft();
	turtle.turnLeft();
end
--矩形(升级版)
--flag1:0 同jx(x,y)
--flag1:1	挖1格高
--flag1:2	向下挖2格高
--flag1:3	向上挖2格高

--flag2:0 丢弃所有
--flag2:1 丢弃跟眼前方块相同的
local function jxA(x,y,flag1,flag2)
	workA(0,flag1);
	for i=1,y do
		if i%2 ~= 0 then
			turtle.turnLeft();
		else
			turtle.turnRight();
		end
		workA(x-1,flag1);
		if i%2 ~= 0 then
			turtle.turnRight();
		else
			turtle.turnLeft();
		end
		if i<tonumber(y) then
			workA(1,flag1);
		end
	end
	if y%2 == 0 then
		turtle.turnLeft();
		turtle.turnLeft();
	else
		turtle.turnRight();
		move(x-1);
		turtle.turnRight();
	end
	move(y-1);
	dropA(flag2);
	turtle.turnLeft();
	turtle.turnLeft();
end
--立方体
--x ,y, z 分别表示 长, 宽, 高
local function lf(x,y,z,flag)
	local m=z%3;
	local s=z/3;
	local h=0;
	if s<1 then
		jxA(x,y,m,flag);
	else
		jxA(x,y,0,flag);
		for i=1,s-0.000001 do
			if i==1 and m~=0 then
				moveA(m,1);
				h=h+m;
			else
				moveA(3,1);
				h=h+3;
			end
			jxA(x,y,0,flag);
		end
	end
	moveA(h,2);
end
--收甘蔗
--参数1. 甘蔗行数
--参数2. 每行甘蔗棵数
--说明: 摆放在第三格甘蔗高度,摆放位置示意
--[[
++++++++ 甘蔗
======== 水
++++++++ 甘蔗
======== 水
++++++++ 甘蔗
@ 乌龟面向甘蔗
]]--
local function sgz(r,c)
	for i=1,r do
		if i==1 then
			workA(1,2);
		else
			workA(2,2);
		end
		if i%2~=0 then
			turtle.turnRight();
		else
			turtle.turnLeft();
		end
		workA(c-1,2);
		if i%2~=0 then
			turtle.turnLeft();
		else
			turtle.turnRight();
		end
	end
	if(r%2~=0) then
		turtle.turnLeft();
		workA(c-1,2);
		turtle.turnLeft();
	else
		turtle.turnLeft();
		turtle.turnLeft();
	end
	workA(r*2-1,2);
	dropA('0');
	turtle.turnLeft();
	turtle.turnLeft();
end

--程序开始
print("Auto Dig...");
print("1.Yu Gu");
print("2.Ju Xing");
print("3.Li Fang Ti");
print("4.Auto Gan Zhe");
io.write("Input:");
select=io.read();
if select=='1' then
	io.write("Input YuGu count:");
	local c=io.read();
	io.write("Input YuGu Length:");
	local l=io.read();
	yg(c,l);
elseif select=='2' then
	io.write("Input Width:");
	local w=io.read();
	io.write("Input Height:");
	local h=io.read();
	jx(w,h);
elseif select=='3' then
	print("lft(x,y,z,flag)");
	print("x--weight");
	print("y--length");
	print("z--height");
	print("flag:0--Drop all");
	print("flag:1--Drop the same as front");
	print("flag:anyother--Donot drop anything");
	io.write("Input x:");
	local x=io.read();
	io.write("Input y:");
	local y=io.read();
	io.write("Input z:");
	local z=io.read();
	io.write("Input flag:");
	local flag=io.read();
	lf(x,y,z,flag);
elseif select=='4' then	
	io.write("Please input Rows:");
	local r=io.read();
	io.write("Please input Count pre Row:");
	local c=io.read();
	io.write("Please input time-out:");
	local time=io.read();
	while true do
		sgz(r,c);
		sleep(time);
	end
else
	print("Input Error!");
end
你可能还会对下列文章感兴趣:

0条评论 你不想来一发么↓

    想说点什么呢?

    您需要登录您的Google账号才能进行评论。