Um pacote que é um porto de Swisseducs Kara (página em alemão). Kara é um conceito para um fácil acesso ao mundo da programação. Kara é uma pequena joaninha que vive em uma floresta com cogumelos, árvores e folhas. Kara pode mover um único cogumelo, colocar e remover as folhas, não pode mover árvores e é totalmente controlado usando o código Julia. Em comparação com o Kara original, a interação se concentra em usar o REPL.
Instale em Julia no modo PKG Repl usando
add JuliaKaraou em Julia 0,6 no modo REPL usando
Pkg . add ( " JuliaKara " ) Comece a usar Juliakara abrindo Julia e entrando using JuliaKara no Repl. Em seguida, crie um novo mundo de tamanho 10x10 com ligações de funções no escopo global entrando @World (10,10) .
Agora você pode usar
move(kara) para dar um passo na direção que Kara está de frente,turnLeft(kara) para virar Kara para a esquerda,turnRight(kara) para virar Kara, certo,putLeaf(kara) para colocar uma folha sob Kara eremoveLeaf(kara) para remover uma folha de baixoe
treeFront(kara) para verificar se Kara fica na frente de uma árvore,treeLeft(kara) para verificar se há uma árvore de Kara,treeRight(kara) para verificar se há uma árvore à direita de Kara,onLeaf(kara) para verificar se há uma folha sob Kara emushroomFront(kara) para verificar se Kara fica em frente a um cogumelo. Juliakara está ciente da sintaxe XML que o Kara original usa para armazenar mundos em arquivos. É possível carregar um mundo através da GUI ou com o comando @World [path] . Em contraste com a versão da GUI @World [path] abre uma nova janela e registra world e kara no escopo global como referências.
@World " file1.world "
move (kara) # moves Kara in world from file1.world
@World " file2.world "
# kara and world referencing elements from file1.world
# are now overwritten with references to elements from file2.world
move (kara) # moves Kara in world from file2.world
# Create additional references to world and kara
world_save = world
kara_save = kara
@World " file3.world "
# kara and world referencing elements from file2.world
# are now overwritten with references to elements from file3.world
move (kara) # moves Kara in world from file3.world
# Access stored references
move (world_save,kara_save) # moves Kara in world from file2.worldCaso alguém carregue um mundo através da GUI e queira o comportamento acima, a referência a Kara deve ser restaurada por:
kara = get_kara (world) Juliakara suporta vários mundos e vários karas. Caso você queira reproduzir o exemplo, execute -o no diretório de teste de Juliakara, por exemplo ~/.Julia/v0.6/JuliaKara/test .
# Load the world contained in example.world.
# This also creates a macro @w1 in global scope to interact with
# the world
@World w1 " example.world "
# Create an empty world w2
@World w2 ( 10 , 2 )
# Place kara in the empty world.
# place_kara() returns a reference to the placed kara.
# @w2 place_kara(1,1) is just syntactic sugar for place_kara(w2,1,1)
kara = @w2 place_kara ( 1 , 1 )
# Kara is already placed in world w1, therefore we fetch it with get_kara()
# Since we can't create two kara references we use lara instead.
lara = @w1 get_kara ()
# Move lara a step in world w1
@w1 move (lara)
# Alternatively:
move (w1,lara)
# Move kara a step in world w2
@w2 move (kara)
# It's even possible to allow kara from world w2 to
# place something in world w1
@w1 putLeaf (kara)
reset!(world) : redefine world para o estado após o carregamento ou a última chamada para store!(world) .store!(world) : armazena o estado atual do world .place_kara(world,X,Y,orientation) : coloca Kara no world em X , Y orientada orientation . As orientações válidas são :NORTH , :EAST :SOUTH e :WEST . orientation é opcional e padrão para :NORTH .place_mushroom(world,X,Y) : coloca um cogumelo no world em X , Y .place_tree(world,X,Y) : coloca uma árvore no world em X , Y .place_leaf(world,X,Y) : coloca uma folha no world em X , Y . A macro acima usada para interação, por exemplo, @w1 basicamente traduz @w1 f(args...) para f(w1,args...) . Assim, como todos os métodos acima têm world como seu primeiro argumento, eles também podem ser chamados usando a macro mundial. Isso também funciona para métodos personalizados:
function turnAround (wo,ka)
turnLeft (wo,ka)
turnLeft (wo,ka)
end
@w1 turnAround (lara)A página Exemplos para Juliakara contém mais material mostrando o uso de Juliakara.