Giter Club home page Giter Club logo

juliakara.jl's Introduction

JuliaKara

Build Status codecov.io

A package that is a port of SwissEducs Kara (Page in German). Kara is a concept for an easy access into the world of programming. Kara is a tiny ladybug living in a forest with mushrooms, trees and leafs. Kara can move a single mushroom, place and remove leafs, cannot move trees and is entirely controlled using julia code. In comparison to the original Kara the interaction manly focuses on using the REPL.

Installation

Install within Julia in the Pkg REPL-mode using

add JuliaKara

or in Julia 0.6 in REPL-mode using

Pkg.add("JuliaKara")

Introduction

Start using JuliaKara by opening Julia and entering using JuliaKara into the REPL. Next create a new world of size 10x10 with function bindings in global scope by entering @World (10,10).

You can now use

  • move(kara) to make a step into the direction Kara is facing,
  • turnLeft(kara) to turn Kara left,
  • turnRight(kara) to turn Kara right,
  • putLeaf(kara) to place a leaf beneath Kara and
  • removeLeaf(kara) to remove a leaf from beneath Kara

and

  • treeFront(kara) to check if Kara stands in front of a tree,
  • treeLeft(kara) to check if there is a tree left of Kara,
  • treeRight(kara) to check if there is a tree right of Kara,
  • onLeaf(kara) to check if there is a leaf beneath Kara and
  • mushroomFront(kara) to check if Kara stands in front of a mushroom.

Alternative methods of creating/loading a world

JuliaKara is aware of the xml syntax the original Kara uses for storing worlds in files. It's possible to load a world through the GUI or with the command @World [path]. In contrast to the GUI version @World [path] opens a new window and registers world and kara in global scope as references.

@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.world

In case one loads a world through the GUI and wants the above behaviour, the reference to Kara must be restored by:

kara = get_kara(world)

JuliaKara supports multiple worlds and multiple Karas. In case you want to reproduce the example run it from within the test directory of JuliaKara e.g ~/.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)

Other useful methods

  • reset!(world): Resets world to the state after loading or the last call to store!(world).
  • store!(world): Stores the current state of world.
  • place_kara(world,X,Y,orientation): Places Kara in world at X, Y oriented orientation. Valid orientations are :NORTH, :EAST, :SOUTH and :WEST. orientation is optional and defaults to :NORTH.
  • place_mushroom(world,X,Y): Places a mushroom in world at X, Y.
  • place_tree(world,X,Y): Places a tree in world at X, Y.
  • place_leaf(world,X,Y): Places a leaf in world at X, Y.

The above used macro for interaction e.g. @w1 basically translate @w1 f(args...) to f(w1,args...). Thus as all the above methods have world as their first argument they can also be called using the world macro. This also works for custom methods:

function turnAround(wo,ka)
	turnLeft(wo,ka)
	turnLeft(wo,ka)
end

@w1 turnAround(lara)

Examples

The examples page for JuliaKara contains further material showing the usage of JuliaKara.

juliakara.jl's People

Contributors

juliatagbot avatar sebastianpech avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.