\section{Your First Bot}
\label{sec:firstbot}
\fasttrack{Always move up.}

Alright, let’s get started.
If you think back to when you started programming, chances are the first program
you ever wrote was one which printed out the immortal phrase “Hello World”.
Well we can’t print stuff here, but our first bot is going to be almost as
useless as that: our bot is just going to continually move up.

Let’s have a look at the code:
\pythonfile{firstbot.py}

Pretty simple, huh?
It’s a function takes as input two parameters, and returns a string.
We’ll have a look at \texttt{board} and \texttt{position} later,
but the important thing here is that the returned value says which direction the
snake should move in. Each time the snake is allowed to make a move, the
function is called, it returns one of \py|'U', 'D', 'L', 'R'|
(indicating up, down, left and right, respectively), and the snake is moved in
that direction.

\subsection{Running the code}

Depending on how you have installed SnakeGame, there are a few different ways to
run the code. If you’re in some kind of programming class, ask your instructor
which method to use.

\subsubsection{Method A: CLI interface}

If you installed from the repository (using \texttt{pip}), this is the method
you should use.
Assuming you’ve put the \texttt{up\_bot} function in a file called
\texttt{mybot.py}, you can run this command:

\begin{shell}
$ snakegame mybot:up_bot
\end{shell}

To use different viewers, you can supply the \texttt{-v VIEWER} argument:
\begin{shell}
$ snakegame -v pyglet mybot:up_bot
$ snakegame -v pygame mybot:up_bot
$ snakegame -v curses mybot:up_bot
\end{shell}

You can specify multiple bots, and also control the width, height and number of
apples on the board:
\begin{shell}
$ snakegame -w 4 -h 20 -a 30 mybot:up_bot mybot:up_bot mybot:up_bot
\end{shell}

\subsubsection{Method B: Pyglet / Pygame}

You can also add some code to the file containing your bot so that you can run
that file as a normal Python program, which will run the game.
At the end of the file, add this:
\begin{pythoncode}
if __name__ == '__main__':
    from snakegame.engine import Engine
    from snakegame.viewers.pyglet import Viewer
    engine = Engine(10, 10, 25)
    engine.add_bot(up_bot)
    viewer = Viewer(engine)
    viewer.run()
\end{pythoncode}

If you want to use pygame instead, change \texttt{snakegame.viewers.pyglet} to
\texttt{snakegame.viewers.pygame}.

If neither of these work, there is also a console viewer, which works if you’re
in a terminal (it will not work in IDLE!):
use \texttt{snakegame.viewers.curses}.

\subsection{Got it running?}

Great, you should see a nice big board with some apples scattered over it,
and a snake continually moving upwards.

Once you’re ready, we’ll move on to something a little more interesting.

