87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
#www.stuffaboutcode.com
|
|
#Raspberry Pi, Minecraft - hide and seek
|
|
|
|
# mcpipy.com retrieved from URL below, written by stuffaboutcode
|
|
# http://www.stuffaboutcode.com/2013/01/raspberry-pi-minecraft-hide-and-seek.html
|
|
|
|
#import the minecraft.py module from the minecraft directory
|
|
import mcpi.minecraft as minecraft
|
|
#import minecraft block module
|
|
import mcpi.block as block
|
|
#import time, so delays can be used
|
|
import time
|
|
#import random module to create random number
|
|
import random
|
|
#import math module to use square root function
|
|
import math
|
|
import server
|
|
|
|
|
|
#function to round players float position to integer position
|
|
def roundVec3(vec3):
|
|
return minecraft.Vec3(int(vec3.x), int(vec3.y), int(vec3.z))
|
|
|
|
def distanceBetweenPoints(point1, point2):
|
|
xd = point2.x - point1.x
|
|
yd = point2.y - point1.y
|
|
zd = point2.z - point1.z
|
|
return math.sqrt((xd*xd) + (yd*yd) + (zd*zd))
|
|
|
|
if __name__ == "__main__":
|
|
|
|
#Connect to minecraft by creating the minecraft object
|
|
# - minecraft needs to be running and in a game
|
|
mc = minecraft.Minecraft.create(server.address)
|
|
|
|
#Post a message to the minecraft chat window
|
|
mc.postToChat("Hi, Minecraft Hide & Seek")
|
|
|
|
time.sleep(2)
|
|
|
|
#Find the players position
|
|
playerPos = mc.player.getPos()
|
|
|
|
#Create random position within 50 blocks from the player, our hidden block will go there
|
|
randomBlockPos = roundVec3(playerPos)
|
|
randomBlockPos.x = random.randrange(randomBlockPos.x - 50, randomBlockPos.x + 50)
|
|
randomBlockPos.y = random.randrange(randomBlockPos.y - 5, randomBlockPos.y + 5)
|
|
randomBlockPos.z = random.randrange(randomBlockPos.z - 50, randomBlockPos.z + 50)
|
|
print randomBlockPos
|
|
|
|
#Create hidden diamond block
|
|
mc.setBlock(randomBlockPos.x, randomBlockPos.y, randomBlockPos.z, block.DIAMOND_BLOCK)
|
|
mc.postToChat("A diamond has been hidden - go find!")
|
|
|
|
#Start hide and seek
|
|
seeking = True
|
|
lastPlayerPos = playerPos
|
|
lastDistanceFromBlock = distanceBetweenPoints(randomBlockPos, lastPlayerPos)
|
|
timeStarted = time.time()
|
|
while (seeking == True):
|
|
#Get players position
|
|
playerPos = mc.player.getPos()
|
|
#Has the player moved
|
|
if lastPlayerPos != playerPos:
|
|
#print "lastDistanceFromBlock = " + str(lastDistanceFromBlock)
|
|
distanceFromBlock = distanceBetweenPoints(randomBlockPos, playerPos)
|
|
#print "distanceFromBlock = " + str(distanceFromBlock)
|
|
if distanceFromBlock < 2:
|
|
#found it!
|
|
seeking = False
|
|
else:
|
|
if distanceFromBlock < lastDistanceFromBlock:
|
|
mc.postToChat("Warmer " + str(int(distanceFromBlock)) + " blocks away")
|
|
if distanceFromBlock > lastDistanceFromBlock:
|
|
mc.postToChat("Colder " + str(int(distanceFromBlock)) + " blocks away")
|
|
|
|
lastDistanceFromBlock = distanceFromBlock
|
|
|
|
time.sleep(2)
|
|
timeTaken = time.time() - timeStarted
|
|
mc.postToChat("Well done - " + str(int(timeTaken)) + " seconds to find the diamond")
|
|
|
|
time.sleep(5)
|
|
|
|
mc.postToChat("www.stuffaboutcode.com") |