# Space Invaders: the First Day
The next round at the Recurse Center was pairing programming. One of the tasks they are suggesting to implement is Space Invaders game. I haven’t done much GUI development in recent years, so I felt like it’s a nice opportunity to try something new. Once you submit the initial implementation, you pick up the next simple task to implement during pairing programming.
After a quick Googling, I landed on a Tcl page which explains how to build native GUI applications in Python. This sounded reasonable, and I was especially convinced since it’s an integral part of Python.
To my surprise, a standard Python which is shipped in macOS doesn’t play nicely with GUI. I had to install a new version with Tcl support. I’m sticking with 3.7.5 for no particular reason, just something I’ve been using for some time at
my work.
```bash
$ pyenv uninstall 3.7.5
$ brew install tcl-tk
$ env \
PATH="$(brew --prefix tcl-tk)/bin:$PATH" \
LDFLAGS="-L$(brew --prefix tcl-tk)/lib" \
CPPFLAGS="-I$(brew --prefix tcl-tk)/include" \
PKG_CONFIG_PATH="$(brew --prefix tcl-tk)/lib/pkgconfig" \
CFLAGS="-I$(brew --prefix tcl-tk)/include" \
PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I$(brew --prefix tcl-tk)/include' --with-tcltk-libs='-L$(brew --prefix tcl-tk)/lib -ltcl8.6 -ltk8.6'" \
pyenv install 3.7.5
```
Anyway, it turned out to be too much of a boilerplate to create something simplistic like a game in Tcl, so I decided to explore other options.
I ended up at Pygame website, a mature framework to create Python games. Kudos to the maintainers.
I think about a game engine and objects as pure functions that receive signals and produce outputs. A close analogy is Erlang signals. Simply put, there’re actors and messages they are passing between each other. For example, World is going to listen to “tick” events, and a player could launch a rocket, etc.
With this idea in mind, coding was fairly straightforward. I just needed to arrange objects on the screen and implement their reactions.
Here’s a Day 1 result:
![[pygame-invaders-1.png]]
Source code: https://github.com/oneearedrabbit/invaders-py