jjinux’s Sierpinske Triangle Script

Hi it’s Phillip and I’m back updating the site – here is our first script to highlight!

Jjinux has submitted his script to our github code archive, thanks!

This script makes a Sierpinske Triangle in the sky made out of snow!!!

Here are some photos and a video to show you what it does:

jjinux's script pic jjinux's script pic

here’s a video of the script. Please Subscribe, Like, Comment or please do them all!! ūüôā


Here’s the code:

</pre>
#!/usr/bin/env python




# mcpipy.com retrieved from URL below, written by jjinux
# http://jjinux.blogspot.com/2013/05/drawing-sierpinskis-triangle-in.html




"""Draw Sierpinski's triangle in Minecraft.




See: http://jjinux.blogspot.com/2013/05/drawing-sierpinskis-triangle-in.html




"""




import random




import mcpi.minecraft
import mcpi.block as block
import server




# It goes from -MAX_XZ to MAX_XZ.
MAX_XZ = 128
MAX_Y = 64




# These are the vertices of the triangle. It's a list of points. Each point
# is an (X, Y, X) tuple.
TRIANGLE_HEIGHT = MAX_Y - 1
TOP = (-MAX_XZ, TRIANGLE_HEIGHT, 0)
BOTTOM_LEFT = (MAX_XZ, TRIANGLE_HEIGHT, MAX_XZ)
BOTTOM_RIGHT = (MAX_XZ, TRIANGLE_HEIGHT, -MAX_XZ)
TRIANGLE_VERTICES = [TOP, BOTTOM_LEFT, BOTTOM_RIGHT]




BASE_BLOCK_ID = block.SANDSTONE.id
TRIANGLE_BLOCK_ID = block.SNOW.id




# This is the maximum number of iterations to let the algorithm run. The
# algorithm relies on randomness, so I'm just picking a sensible value.
MAX_ITERATIONS = MAX_XZ ** 2




PRINT_FREQ = 1000








def clear_board(minecraft):
    minecraft.setBlocks(-MAX_XZ, 0, -MAX_XZ, MAX_XZ, MAX_Y, MAX_XZ, 0)
    minecraft.setBlocks(-MAX_XZ, 0, -MAX_XZ, MAX_XZ, -MAX_Y, MAX_XZ, BASE_BLOCK_ID)








def draw_sierpinski_triangle(minecraft):




    def random_in_range():
        return random.randint(-MAX_XZ, MAX_XZ)




    def int_average(a, b):
        return int(round((a + b) / 2.0))




    # Draw the triangle vertices.




    for (x, y, z) in TRIANGLE_VERTICES:
        minecraft.setBlock(x, y, z, TRIANGLE_BLOCK_ID)




    # Pick a random point to start at.




    current = (random_in_range(),
               TRIANGLE_HEIGHT,
               random_in_range())




    for i in xrange(MAX_ITERATIONS):




        if i % PRINT_FREQ == 0:
            print("Drew %s blocks" % i)




        # Pick a random vertex to "walk" toward.




        destination = random.choice(TRIANGLE_VERTICES)




        # Draw a block in the middle of the current location and the
        # destination.




        (c_x, c_y, c_z) = current
        (d_x, d_y, d_z) = destination
        current = (
            int_average(c_x, d_x),
            TRIANGLE_HEIGHT,
            int_average(c_z, d_z)
        )
        (x, y, z) = current
        minecraft.setBlock(x, y, z, TRIANGLE_BLOCK_ID)








if __name__ == "__main__":
    minecraft = mcpi.minecraft.Minecraft.create(server.address)




    # Uncomment this if you need it.
    # clear_board(minecraft)
    
    draw_sierpinski_triangle(minecraft)

And the source is on our github as usual!! Source: Pull Request On Github