invalid argument

Minecraft Detectorists

Another simple minecraft game, this time using Pythagoras’ theorem to work out distances between two points.

We randomly bury a piece of treasure - a gold block, a diamond, whatever - then give the player clues about how far away they are from it. The “game” ends when they dig up the block.


import mcpi.minecraft as minecraft
import mcpi.block as block
import time
import random
import math

def random_underground_position():
  return minecraft.Vec3(random.randint(-100, 100), random.randint(-20, 0), random.randint(-100, 100))

def distance_to_treasure(player, treasure):
  dx = player.x - treasure.x
  dy = player.y - treasure.y
  dz = player.z - treasure.z
  return math.ceil(math.sqrt((dx*dx) + (dy*dy) + (dz*dz)))
  
world = minecraft.Minecraft.create()

treasure = random_underground_position()
world.setBlock(treasure.x, treasure.y, treasure.z, block.GOLD_BLOCK)

last_position = world.player.getTilePos()
last_distance = distance_to_treasure(last_position, treasure)

world.postToChat("Find the gold!")

detectoring = True

while detectoring:

  position = world.player.getTilePos()
  
  if position != last_position:
    distance = distance_to_treasure(position, treasure)
  
    if distance < 5:
      detectoring = False
    else:
      message = ""
	  
      if distance < last_distance:
        message = "Warmer " + str(distance)
      elif distance > last_distance:
        message = "Colder " + str(distance)
      
      world.postToChat(message)

    last_distance = distance 

  last_position = position
  time.sleep(2)

world.postToChat("You found the treasure")
  

Inspired by code I originally saw at Martin O’Hanlon’s excellent Stuff About Code.