Научите Питхон и електронику са Минецрафт Пи Едитион

Научите Питхон и електронику са Минецрафт Пи Едитион

Да ли сте одувек желели да научите да кодирате, али нисте знали одакле да почнете? Научите како да контролишете Минецрафт на Распберри Пи -у помоћу Питхона и неке једноставне електронике. Ево крајњег резултата:





За овај пројекат ће вам требати Пи 2 или новији, а док већину ових задатака можете да довршите преко командне линије преко Сецуре Схелл -а (ССХ), овај водич ће се фокусирати на кодирање директно на Пи -у.





Нови сте у Минецрафту? Не брините - ево нашег Минецрафт Водич за почетнике .





Увод у Минецрафт Пи

Минецрафт за Распберри Пи је развијен за учење и петљање (и то бесплатно). Долази са интерфејсом за програмирање апликација (АПИ) који омогућава начин да код лако разговара са Минецрафт -ом. То је сјајно за учење кодирања у Питхону, као и за почетак рада са електроником.

Шта је Питхон?

Питхон је програмски језик. То је тумачио , што значи да када покренете Питхон датотеку или програм, рачунар мора прво да обави мали рад на датотеци. Недостаци су што се може сматрати спорим у поређењу са компајлираним језицима [Уклоњен неисправан УРЛ].



Предности тумачених језика су брзина кодирања и њихова љубазност. Не морате да кажете рачунару Шта податке које желите да сачувате, само да желите нешто да сачувате и рачунар ће смислити шта да ради. Постоје изузеци, наравно, ово је донекле поједностављен приказ, међутим програмирање би требало да буде забавно! Ако почнете копати по сложеним техничким детаљима, то може постати помало напорно.

Питхон разликује велика и мала слова. Ово је важно знати, јер Питхон неће препознати објекте чак и ако су правилно написане ако је случај погрешан. 'Досометхинг ()' неће радити ако се метода заправо зове 'ДоСометхинг ()'. Питхон такође користи увлачење . Другим програмским језицима можда није важно колико увлачења има ваш код, док Питхон ради нега. Увлаке се користе да Питхону кажу где припада коду. Други језици могу користити 'Цурли Брацес' ({}) за груписање кода - Питхон их не користи. Питхон користи хасх (#) за коментаре, а коментари се користе да кажу другим програмерима или људима који гледају код шта ради одређени део или зашто је то потребно. Питхон игнорише било шта после хеширања.





Коначно, постоје две главне верзије Питхона - Питхон 2.7.к и Питхон 3.к. Постоје неке разлике између њих две ( које су разлике? ). Овај водич ће користити Питхон 3.

Почетно подешавање

Обезбеђивање вашег Пи већ је подешавање и покретање Распбиан -а , није потребно много почетног подешавања.





Отворите терминал ( Мени> Прибор> Терминал ) и покрените ову команду. Увек је добра пракса ажурирати листу спремишта ажурном, а ово ће преузети најновију листу програма (неће преузимати саме програме, ово помаже Пи -у да зна како се програми зову и где их могу пронаћи).

sudo apt-get update

Сада ажурирајте Пи (ово може потрајати):

sudo apt-get upgrade

Питхон и Минецрафт Пи су већ инсталирани, међутим ако Минецрафт Пи није инсталиран из било ког разлога, инсталирање је једноставно:

sudo apt-get install minecraft-pi

Идите до докумената и креирајте нову фасциклу под називом 'Минецрафт':

cd Documents/
mkdir Minecraft

Садржај ове нове фасцикле можете погледати:

ls

Ево савета - ако почнете да куцате и притиснете тастер ТАБ, командна линија ће покушати да аутоматски доврши исказ уместо вас.

Можете прегледати путању до тренутног директоријума помоћу пвд -а, који означава Штампање радног именика:

pwd

Покрените Минецрафт тако што ћете отићи на Мени> Игре> Минецрафт Пи . Ово ће вам требати за покретање, али вратићемо се касније.

Отворите Питхон 3 са Мени> Програмирање> Питхон 3 (ИДЛЕ) . Овај програм вам пружа начин да покрећете Питхон команде и пишете програме.

Сада можете да унесете своје Питхон команде овде, али то није баш практично. Иди на Датотека> Нова датотека и онда Датотека> Сачувај и сачувајте ово у фасцикли коју сте раније креирали. ( Документи> Минецрафт ). Назовимо то ' хелло_ворлд.пи '. Не морате да користите проширење .пи, ово ће се додати аутоматски, али то је добра пракса.

Ако се вратите на терминал и кренете у фасциклу Минецрафт, требало би да видите датотеку коју сте управо креирали:

cd Minecraft/
ls

Ову датотеку можете покренути овако:

python hello_world

Обратите пажњу на то да је 'питхон' мала слова. Ово мора бити пре имена датотеке, јер говори Пи -у да је следећа датотека Питхон, па би је требало извршити као такву.

Вратите се на уређивач Питхон и откуцајте:

print 'Hello, World!'

Сачувајте ову датотеку и поново је покрените - сада би требало да видите „Хелло, Ворлд!“ појављују се у командној линији - уредно! Команда принт једноставно говори Питхону да испише следећи текст у двоструким наводницима. Ово је добро, али није страшно корисно за Минецрафт, повежимо га:

from mcpi.minecraft import Minecraft
mc = Minecraft.create()
mc.postToChat('Hello, World!')

Сада, ако сачувате и покренете ову датотеку, требало би да видите „Хелло, Ворлд!“ се појављују у игри Минецрафт. Хајде да разбијемо код:

from mcpi.minecraft import Minecraft

Ова линија говори Питхону да желите да користите код из друге датотеке. Ова датотека мцпи.минецрафт је развијена да омогући једноставну контролу Минецрафт -а.

mc = Minecraft.create()

Ова линија ствара објекат под називом 'мц' (Минецрафт). Морате да креирате ово да бисте омогућили комуникацију са игром Минецрафт - није довољно само укључити датотеку.

mc.postToChat('Hello, World!')

Коначно, ова линија говори Минецрафту да напише неки текст на цхат. Покушајте да промените 'Хелло, Ворлд!' на нешто друго и погледајте шта ће се догодити, али не заборавите да укључите оба двострука навода. Ако имате проблема са софтвером, ово су неке уобичајене грешке Питхон -а и Минецрафт Пи -а:

  • АттрибутеЕррор - ово је грешка у куцању, попут пинт или прнт уместо штампе
  • НамеЕррор: назив 'Минецрафт' није дефинисан - не заборавите да увезете модуле који су вам потребни
  • НамеЕррор: назив „труе“ није дефинисан - Питхон разликује велика и мала слова, промените у „Труе“
  • соцкет.еррор: [Еррно 111] Веза је одбијена - Проверите да ли је Минецрафт покренут

Пројекти

Сада када знате основе Питхона и Минецрафта, направимо неке кул пројекте. Сав код се може преузети са Гитхуб -а.

Аутоматизовани градитељ мостова

Овај програм ће ефикасно изградити мост преко воде. Када се играч приближи воденом простору, програм ће претворити неколико блокова у камен. Како Минецрафт користи координатни систем, врло је лако доћи до локације играча, заједно са врстом блокова око играча. Минецрафт Пи је мало ограничен, па није могуће масовно ажурирати више различитих блокова. Међутим, ово понашање можете лако кодирати сами.

Направите нову датотеку ( Датотека> Нова датотека ) и сачувајте га као ' бридге_буилдер.пи '.

from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
while True:
x, y, z = mc.player.getPos() # store player position

# store the surrounding blocks
a = mc.getBlock(x, y - 1, z + 1)
b = mc.getBlock(x, y - 1, z - 1)
c = mc.getBlock(x - 1, y - 1, z)
d = mc.getBlock(x + 1, y - 1, z)
if a == 8 or a == 9 or b == 8 or b == 9 or c == 8 or c == 9 or d == 8 or d == 9:
# 8 or 9 is water. Set surrounding blocks on floor to a solid (stone) if water is found
mc.setBlocks(x, y - 1, z, x + 1, y - 1, z + 1, 1)
mc.setBlocks(x, y - 1, z, x - 1, y - 1, z - 1, 1)
mc.setBlocks(x, y - 1, z, x - 1, y - 1, z + 1, 1)
mc.setBlocks(x, y - 1, z, x + 1, y - 1, z - 1, 1)

Обратите пажњу на то како вредност и заправо гледа на и - 1. Ово је ниво пода. Да се ​​користи вредност и, скрипта би тражила блокове на нивоу колена - то не би добро функционисало! Мц.гетБлоцк () враћа ид блока за дате координате. Како су к, и и з координате играча, можете их додати или одузети да бисте добили положаје око играча. Не морате да користите вредности к, и и з, можете користити било који број, али можда не знате како се тај одређени блок односи на плејер - боље је користити вредности у односу на плејер. Покрените ову датотеку из командне линије и погледајте шта се дешава.

Требали бисте видети да се мала површина земље претвара у камен када играч дође до водене површине. Није сјајно - можете ходати довољно брзо да изазовете проблем. То можете решити претварањем веће количине воде у копно. Завршни део методе мц.сетБлоцкс () је ИД блока. Један је ИД блока за камен. Ово можете променити у дрво, траву или било шта друго. Да желите, ово бисте врло лако могли претворити у сложен дизајн - можда висећи мост!

Дугме за супер рударство

Овај пример ће направити кратак рад на рударству. Састоји се од физичког дугмета које ће, када се притисне, ископати 10 блокова у коцкицама. Почнимо са дугметом. Слично дугмадима на Ардуину, требат ће вам мала количина електронике, а све то треба пронаћи у основном почетном сету:

  • 1 к Огласна плоча
  • 1 к тренутни прекидач
  • 1 к 220 охм отпорник
  • Женски> мушки каблови за прескакање
  • Мушки> Мушки каблови за прескакање

Ево кола:

Пи-Буттон-Цоннецтион

Овај отпорник се назива отпорник за повлачење. Помаже да се осигура да је оно што Пи мисли да је дугме притиснуто, заиста дугме. Ово не морате да користите, међутим препоручује се јер ћете без тога пронаћи много буке и лажних очитавања.

Дугме је повезано са иглом 14. Опште намене за улазни излаз (ГПИО). Можете користити било који ГПИО пин, међутим погледајте пиноут прво, пошто није све могуће контролисати из Пи -а, и мало се разликују међу моделима.

Сада када је дугме повезано, време је да га тестирате. Направите нову датотеку и сачувајте је као ' буттон_тест.пи '. Додајте овај код, сачувајте га, а затим га покрените у терминалу.

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
print 'BUTTON WORKS!' # log result
time.sleep(0.5) # wait 0.5 seconds

Притисните Цонтрол + Ц. да бисте зауставили скрипту. Ако све ради исправно, требало би да видите „ДУГМЕ РАДИ!“ у терминалу. Запазите како, попут Минецрафт модула, овај тест користи РПи.ГПИО и временске модуле. Они омогућавају Пи -у да приступи хардверским пиновима и пружају корисне функције мерења времена.

Хајде да завршимо остатак кода. Направи нову датотеку под називом ' супер_мине.пи '. Ево кода:

import RPi.GPIO as GPIO
import time
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
x, y, z = mc.player.getPos() # read the player position
mc.setBlocks(x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocks
mc.setBlocks(x, y, z, x - 10, y + 10, z - 10, 0) # mine 10 blocks
time.sleep(0.5) # wait 0.5 seconds

мц.плаиер.гетПос () враћа играчима тренутне координате, које су затим ускладиштене у к, и и з. Тхе сетБлоцкс () метода говори Минецрафту да испуни све блокове између почетка и краја следећим блоком. Нула је блок-ид за ваздух. Ово можете променити у други ИД блока да бисте испунили област. Такође можете променити координате на +100 или чак +1000 блокова, међутим Пи може почети да се бори ако превише полудите. Уочите како је и + 10 исто за обе линије. Ово можете променити у и - 10 ако желите да уклоните блокове под земљом.

Телепортирање

Друга једноставна употреба овог дугмета могла би бити „телепорт“. Минецрафт Пи Апи пружа начин за постављање позиције играча. Следећи код ће „телепортовати“ плејер на унапред подешену локацију:

mc.player.setPos(0, 0, 0)

Имајте на уму да његова метода прихвата три параметра; к, и и з - тако да их можете поставити на било шта да бисте одмах телепортовали плејер на ту локацију.

Направите копију датотеке супер_мине ( Датотека> Сачувај копију као ) и измените га заменом иф следећим:

if GPIO.input(14) == True: # look for button press
mc.player.setPos(0, 0, 0) # teleport player
time.sleep(0.5) # wait 0.5 seconds

Ова датотека би сада требала изгледати овако:

import RPi.GPIO as GPIO
from mcpi.minecraft import Minecraft
import time
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
mc.player.setPos(0, 0, 0) # teleport player
time.sleep(0.5) # wait 0.5 seconds

Сачувај као ' телепорт.пи 'и трчи.

Можда ћете открити да се играч заглавио у неким блоковима када га користите, у том случају ћете морати прилагодити координате познатом отвореном простору (горњи леви део екрана приказује вашу тренутну локацију).

Саградити кућу

Последњи задатак овог дугмета је изградња куће. Слично као горе наведени пример брзог рударства, ово ће једноставно заменити блокове који окружују плејер да направе кућу. За различите материјале (прозоре, зидове итд.) Користиће се различити блокови. Да би се ствари лакше кодирале, створиће се чврсти блок, а затим уклонити унутрашњост (поставити блок на ваздух), ово ће створити шупљу љуску. Могли бисте додати додатке попут кревета или врата, међутим пројекат Минецрафт Пи је мало непотпун, и иако ови објекти функционишу када их играч постави, нису сјајни када користите Питхон.

from mcpi.minecraft import Minecraft
import RPi.GPIO as GPIO
import time
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True:
x, y, z = mc.player.getPos()
mc.setBlocks(x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # make shell
mc.setBlocks(x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # remove inside
mc.setBlocks(x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # make doorway
mc.setBlocks(x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # make window 1
mc.setBlocks(x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # make window 2
mc.setBlocks(x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # make window 3

Сачувај ово као ' хоусе.пи 'и трчи. Све је у реду, требало би да видите како се појављује мала кућа (можда ћете морати да се окренете да бисте је пронашли). Врло је једноставно, отвор и неколико прозора. У теорији, не постоји ограничење колико велику или сложену зграду можете изградити.

Направите мини игру

Затим направимо мини игру! Ово ће бити прилично једноставно, када играч стане на песковити блок, он ће се након случајног времена претворити у лаву. Ово је добра игра за направити, јер можете сами дизајнирати своје нивое или их изменити како бисте отежали ствари. За овај пример вам неће требати дугме.

Направите нову датотеку и сачувајте је као ' мини_гаме.пи '. Ево кода:

from mcpi.minecraft import Minecraft
import random
import time
mc = Minecraft.create() # create Minecraft Object
while True:
x, y, z = mc.player.getPos()
block_under_player = mc.getBlock(x, y - 1, z)

if block_under_player == 12:
# player standing on sand, start the timer
random_time = random.uniform(0.1, 2.5) # generate random number
time.sleep(random_time); # wait
mc.setBlock(x, y - 1, z, 11) # turn it into lava

Овај код је добар почетак за случајно () функција: рандом.униформ (0.1, 2.5) ће генерисати случајни број између 0,1 (1/10 секунде) и 2,5 (2 1/2 секунде). Повећањем ових бројева игра ће бити лакша.

Испробајте! Станите на блок песка и ускоро ће се претворити у лаву. Ово би могла бити основа сложеније игре.

Направите још једну мини игру

Претпоставка за ову игру је једноставна - немојте стајати на дрвеном поду када време истекне. Играч се телепортује у „арену“. Принуђени су да стоје мирно док утакмица не почне. Када се покрене, под ће се претворити у воду када истекне тајмер. Играч мора да стоји у сигурној зони (дијамантски блокови) да би преживео. Сваки ниво смањује тајмер за једну секунду. Након сваког успешног нивоа, сигурна зона се повећава. Погледајте доњи код:

import time
import random
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
# clear area
mc.setBlocks(-10, 1, -10, 25, 5, 25, 0)
# create arena shell
mc.setBlocks(0, 0, 0, 25, 10, 25, 17)
# hollow out arena
mc.setBlocks(1, 1, 1, 24, 10, 24, 0)
# move player to arena
mc.player.setPos(14, 25, 20) # teleport player
# make them stay put
# teleport player to start position every 1/10th second.
# do this for 5 seconds then start the game
time.sleep(2)
total_wait = 0
mc.postToChat('Waiting to Start')
while total_wait <5:
mc.player.setPos(14, 1, 20) # teleport player
time.sleep(0.1)
total_wait += 0.1
mc.postToChat('BEGIN!')
# 10 levels
for level in range(10):
x, y, z = mc.player.getPos()
level_time = 10 - level # reduce time by 1 second for each level
mc.postToChat('Level - ' + str(level + 1) + ' start')
# build floor
mc.setBlocks(0, 0, 0, 25, 0, 25, 17)
# make safe area
safe_area_start = random.uniform(0, 22)
safe_area_end = random.uniform(0, 22)
mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57)
elapsed_time = 0
while elapsed_time <10:
x, y, z = mc.player.getPos()
time.sleep(0.25)
elapsed_time += 0.25
# check player is still on floor
if y <0.75:
mc.postToChat('Game Over')
break;
else:
# remove floor
mc.setBlocks(-10, 0, -10, 25, 0, 25, 8)
# put safe area back
mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57)
time.sleep(2.5)
continue
break

Сачувај ово као ' мини_гаме_2.пи 'и покушајте.

Пи 2 има неких проблема са перформансама док ради Минецрафт. Графикон употребе централне процесорске јединице (ЦПУ) ( горњи десни угао ) никада не показује велико оптерећење, па то мора бити посљедица лошег дизајна и оптимизације програмера. Ови проблеми нису повезани са покретањем кода (настављају се и када Питхон није покренут), али их компликује ова мини игра. Ако се ваш Пи заиста бори, можда ћете желети да смањите величину арене или да оверклокирате свој Пи.

како поставити статички ип на малину пи

Детектор дијаманата

Направимо друго коло. Ово ће користити диоду која емитује светлост (ЛЕД) да засветли када се испод ње налазе дијаманти (унутар 15 блокова). Ево шта вам треба:

  • 1 к Огласна плоча
  • 1 к ЛЕД
  • 1 к 220 охм отпорник
  • Женски> мушки каблови за прескакање
  • Мушки> Мушки каблови за прескакање

Ево кола:

Повежите аноду (дугачка нога) са ГПИО Пин 14. Овај пин делује као +5В. Прикључите катоду (кратка нога) на масу.

Користио сам јефтину рудну играчку и модификовао је уклањањем задњег поклопца и електронике, а затим сам ставио ЛЕД испод ње. Ово бисте лако могли учинити трајним помоћу врућег лепка или нечег сличног.

Сачувај овај код као ' диамондс.пи ':

import RPi.GPIO as GPIO
import time
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
led_pin = 14 # store the GPIO pin number
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output
while True:
# repeat indefinitely
x, y, z = mc.player.getPos()
for i in range(15):
# look at every block until block 15
if mc.getBlock(x, y - i, z) == 56:
GPIO.output(led_pin, True) # turn LED on
time.sleep(0.25) # wait
GPIO.output(led_pin, False) # turn LED off
time.sleep(0.25) # wait

Када се испод плејера налази блок дијамантске руде (унутар 15 блокова), светло ће трептати.

ТхинкГеек Минецрафт Лигхт -Уп Плава камена дијамантска руда - Сигурно ћете држати свињце даље КУПИТЕ ОДМАХ НА АМАЗОНУ

Да ли сте направили нешто кул са Минецрафт Пи? Реците ми у коментарима шта сте постигли или докле сте стигли у играма.

Надамо се да вам се свиђају ставке које препоручујемо и о којима ћемо разговарати! МУО има придружена и спонзорисана партнерства, па добијамо део прихода од неких ваших куповина. Ово неће утицати на цену коју плаћате и помаже нам да понудимо најбоље препоруке производа.

Објави Објави Твеет Емаил Да ли је вредно надоградње на Виндовс 11?

Виндовс је редизајниран. Али да ли је то довољно да вас убеди да пређете са Виндовс 10 на Виндовс 11?

Прочитајте следеће
Повезане теме
  • ДИИ
  • Програмирање
  • Минецрафт
  • Распберри Пи
  • Електроника
  • Питхон
О аутору Јое Цобурн(136 објављених чланака)

Јое је дипломирао рачунарство на Универзитету Линцолн, УК. Он је професионални програмер софтвера и када не лети беспилотним летелицама или не пише музику, често га се може затећи како фотографише или производи видео записе.

Више од Јоеа Цобурна

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили