Getting Started (ComputerCraft)

Please note that this guide is very much a WiP (Work in Progress) at this time. Please PM CoderJ on the forums with any comments or corrections

Introduction
ComputerCraft consists primarily of three major components; the Computer, Turtles, and the Peripherals that attach to both to extend their basic functionality. It is possible to craft all three without ever writing an actual program, just using the built-in programs provided by the mod... but by doing so one ignores the true potential of ComputerCraft. This guide assumes that the user has no to little experience with Lua, the programming language used by ComputerCraft and will give some basics as it progresses. Please also note that this guide is only going to touch on some of the basic concepts and components of ComputerCraft; additional information can be found at ComputerCraft's Official Site as well as throughout this wiki and guides that will come at later dates.

The Computer
The first and most basic component of ComputerCraft is the Computer. The recipe is fairly inexpensive and can be made relatively early if one lucks out finding redstone. The computer may be placed down wherever the player likes and can be picked up again by breaking it with any tool.

Right-clicking on the Computer brings up the CraftOS command line (CraftOS is the default operating system for computers); it's from here where most users run programs on their computers.

Basic CraftOS Commands
The basic commands used in CraftOS are, for the most part, either identical or very similar to the basic commands used in nearly all distributions of *nix operating systems; as such, most users (even those who have only occasionally used a command line in other OS's, such as Windows or OSX) should be familiar or easily able to become familiar with them. All commands are run from the CraftOS. Note that parameters in italics are considered optional. There are many more commands, but one can easily read up on those by using the help command.

Keyboard Shortcuts
The following keyboard shortcuts can be used to control the computer and are handy for escaping from an infinite loop or testing startup scripts.

Programming
To start a new program, simply type edit followed by a file name. This guide will start with the first two obvious programs to get the user's feet wet, but will quickly move to specific examples that apply to CraftOS and ComputerCraft's interaction with other objects in the world. Functions and API methods used in examples will have links that will explain them further.

Hello World
The traditional first step in almost any programming language is learning how to output a simple line of text (usually "Hello world.") to the screen. This example will show the reader how to do that via basic use of the print function.

Open a new program file in the editor (recommended name: hello), and type the following in... print("Hello world.")

Simple, right? Save the file and exit the editor, then type in the name of the program. All going well, the following will appear in the CraftOS window... > hello Hello world. >

Congratulations on taking the first step in any programming language. Although only one line, this program demonstrates how to output text to the window. This is usually the primary way to return information to a user (aside from graphics, which are beyond the scope of this guide).

Hello Username
While outputting text is important, it is also important to receive input (whether it is information to be used by the program or navigation through a program's interface). This program will expand upon the print function, as well as introduce variables and the read and write functions.

Open a new program file in the editor (recommended name: hello2). Enter the following in... write("Please enter your name: ") local username = read print("Hello ", username, ".")

Save and exit the editor, then execute the program. It will expect some input from the user, but should overall look like this...

>hello2 Please enter your name: CoderJ Hello CoderJ. >

Computer Light Switch
This example requires a little more setup than just the basic computer. To the left of the computer, place either some redstone or red alloy wire (only one block is needed). Next to that, place a lamp (it doesn't matter which type). Please note one can place this setup on any side of the computer, however, the will affect how the code needs to be written (it is pretty self explanatory, though).

In this example, quite a few new functions/statements are introduced including the while loop, if...then...else statements, os.pullEvent, write, [redstone.setOutput, and comments (for ease of navigating/identifying sections of code).

Enter the following code (feel free to omit comments, they are there for ease of reading the code but it's understandable if one feels it's a bit much to type in)...

-- Computer Light Switch local side = "left"     -- Set the side for the redstone output local userinput = ""    -- Initialize user input local event = ""        -- Initialize event

redstone.setOutput(side, false)   -- Clear output, just in case.

while true do

-- First part of the loop, lamp is off. term.clear                      -- clear the screen term.setCursorPos(1,1)            -- Put the cursor at the top left corner. print("To turn lamp on, press L.") print("To exit, press any other key.") -- Wait for user input (as a character), convert it to uppercase. event, userinput = os.pullEvent("char") userinput = string.upper(userinput)

-- Check to see if the input is an L, otherwise, break the loop. if userinput == "L" then redstone.setOutput(side, true) -- Turn on the redstone output else term.clear break end

term.clear                    -- clear the screen term.setCursorPos(1,1)          -- Put the cursor at the top left corner print("To turn lamp off, press L.") print("To exit, press any other key.")

-- Wait for user input (as a character), convert it to uppercase. event, userinput = os.pullEvent("char") userinput = string.upper(userinput)

-- Check to see if the input is an L, otherwise, break the loop. if userinput == "L" then redstone.setOutput(side, false) -- Turn off the redstone output else term.clear break end

end -- End of while true loop.

Running this code will show something like the following on the screen...

To turn lamp on, press L. To exit, press any other key.

(Assuming user presses L, the lamp turns on and the following shows up...)

To turn lamp off, press L. To exit, press any other key.

Pressing any other key will return the user to the CraftOS prompt. This program looks complicated, but in reality it's just very messy (and actually violating a few conventions). However, writing this code shows the user the essence of what is happening and sets one up for the next example.

Computer Light Switch Mk. II
This example will use the setup from the previous example. Here, the user will learn to use functions as well as other aspects of the Redstone API to control the lamp and avoid "bulky" code. It is recommended to start a new program file rather than editing the old one (due to the way the CraftOS editor works)

Content Coming

Smart Computer Light Switch
Content coming.

What To Do When Things Don't Work
It will happen; one will spend time meticulously writing code only to save and run their program to find... it won't work. There's usually a few important things to check before throwing the mouse at the nearest innocent bystander...


 * 1) Check the error message... 99.999% of the time it will tell one exactly where the mistake was made (improper syntax, missing end statement, etc).
 * 2) Check the use of case (upper and lower case letters). Remember, functions are usually start with a lower case letter but additional 'words' will have upper case in them (for example - redstone.setOutput).
 * 3) Check control statements (while, for, if, etc). Make sure they're declared right and terminated correctly (sometimes a missing end statement won't register for quite a few lines).
 * 4) When in doubt, write it out. One can sometimes be surprised how glaring an error is when rewriting something... despite missing it the first time.
 * 5) Ask the Community. Sometimes things are trickier than they appear to be but chances are someone has made the same mistake and figured it out, however, there's also a good chance that with another pair of eyes on the problem everyone can learn how to do it... maybe even find a better way! Just remember to search the forums for previous posts before making a new thread.