added CircleMine bin
This commit is contained in:
parent
5925f851c4
commit
e5b990ae61
158
src/bin/turtle/CircleMine.hx
Normal file
158
src/bin/turtle/CircleMine.hx
Normal file
@ -0,0 +1,158 @@
|
||||
package bin.turtle;
|
||||
|
||||
import kernel.turtle.Turtle;
|
||||
import lib.turtle.TurtleAppBase;
|
||||
|
||||
@:build(macros.Binstore.includeBin("Circle Mine", ["circle-mine", "cm"]))
|
||||
class CircleMine extends TurtleAppBase {
|
||||
private var rings:Int;
|
||||
private var skip:Int = 0;
|
||||
private var depth:Int = 0;
|
||||
|
||||
public function new() {
|
||||
super(initFunc, turtleFunc);
|
||||
}
|
||||
|
||||
private function initFunc() {
|
||||
if (handle.args.length < 1) {
|
||||
handle.writeLine("Not enough args");
|
||||
handle.close(false);
|
||||
return;
|
||||
}
|
||||
|
||||
this.rings = Std.parseInt(handle.args[0]);
|
||||
if (this.rings == null) {
|
||||
handle.writeLine("Failed to parse args");
|
||||
handle.close(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (handle.args.length > 1) {
|
||||
this.skip = Std.parseInt(handle.args[1]);
|
||||
if (this.skip == null) {
|
||||
handle.writeLine("Failed to parse args");
|
||||
handle.close(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function turtleFunc() {
|
||||
// Go down 1 layer
|
||||
if (skip == 0) {
|
||||
Turtle.dig(Down);
|
||||
Turtle.down();
|
||||
Turtle.dig(Down);
|
||||
} else {
|
||||
// Move to outer ring
|
||||
for (i in 0...(skip * 3) - 1) {
|
||||
Turtle.forward();
|
||||
}
|
||||
}
|
||||
|
||||
// Start mining
|
||||
for (i in skip...(rings + skip)) {
|
||||
if (i == 0) {
|
||||
center();
|
||||
handle.writeLine("Center done");
|
||||
} else {
|
||||
circle(i * 3 + 1);
|
||||
handle.writeLine('Ring $i done');
|
||||
}
|
||||
}
|
||||
|
||||
// Go back to starting pos.
|
||||
for (i in 0...((rings + skip) * 3 - 1)) {
|
||||
Turtle.back();
|
||||
}
|
||||
|
||||
handle.close();
|
||||
}
|
||||
|
||||
private function circle(radius:Int) {
|
||||
step();
|
||||
step();
|
||||
frontDig();
|
||||
|
||||
// Do a 1/2 of a side of a ring
|
||||
Turtle.turnRight();
|
||||
for (i in 0...radius) {
|
||||
step();
|
||||
}
|
||||
|
||||
// Do the other 2 sides
|
||||
for (s in 0...3) {
|
||||
Turtle.turnRight();
|
||||
for (i in 0...radius) {
|
||||
step();
|
||||
}
|
||||
|
||||
middle();
|
||||
|
||||
for (i in 0...radius) {
|
||||
step();
|
||||
}
|
||||
}
|
||||
|
||||
// Complete the 1/2 of the first side
|
||||
Turtle.turnRight();
|
||||
for (i in 0...radius) {
|
||||
step();
|
||||
}
|
||||
|
||||
Turtle.turnLeft();
|
||||
Turtle.forward();
|
||||
}
|
||||
|
||||
private function middle() {
|
||||
Turtle.turnRight();
|
||||
|
||||
Turtle.dig(Front);
|
||||
Turtle.down();
|
||||
Turtle.dig(Front);
|
||||
|
||||
Turtle.turnLeft();
|
||||
Turtle.turnLeft();
|
||||
|
||||
Turtle.dig(Front);
|
||||
Turtle.up();
|
||||
Turtle.dig(Front);
|
||||
|
||||
Turtle.turnRight();
|
||||
}
|
||||
|
||||
private function step() {
|
||||
Turtle.dig(Front);
|
||||
Turtle.forward();
|
||||
Turtle.dig(Down);
|
||||
}
|
||||
|
||||
private function frontDig() {
|
||||
Turtle.dig(Front);
|
||||
Turtle.down();
|
||||
Turtle.dig(Front);
|
||||
Turtle.up();
|
||||
}
|
||||
|
||||
private function center() {
|
||||
Turtle.dig(Down);
|
||||
step();
|
||||
frontDig();
|
||||
Turtle.turnRight();
|
||||
|
||||
for (i in 0...3) {
|
||||
step();
|
||||
Turtle.turnRight();
|
||||
step();
|
||||
Turtle.turnLeft();
|
||||
frontDig();
|
||||
Turtle.turnRight();
|
||||
}
|
||||
|
||||
step();
|
||||
Turtle.turnRight();
|
||||
Turtle.forward();
|
||||
Turtle.turnLeft();
|
||||
Turtle.forward();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user