Scheme REPL with Cocos2Dx
This is a demo for developers. Please don't give low ratings based on playability - it's not meant to be a complete game! It may still be entertaining though, you can drive a truck up hills and fall back down.
=== What this is about ===
We have wanted to try REPL-based game development for a long time, and this is our attempt.
A REPL is like a command-line interface to the inside of your running program. It's like having a debugger running constantly, but perhaps less troublesome.
REPL-based development should allow us to develop games and apps much faster. Your new code takes effect immediately, and can be executed on your target hardware.
Bret Victor has a very nice talk about immediate feedback in his "Inventing on Principle" talk: http://vimeo.com/36579366
This project is an attempt to accomplish this, and so far it seems to have worked fairly well!
=== How we are doing this ===
The demo combines three third-party libraries:
- Chicken Scheme for the REPL
- Cocos2Dx for graphics
- Chipmunk for physics
Cocos2Dx is a C++ library with 2D-games in mind. It lets you manage things like sprites, their animations and touch events. It is fast and portable (Android, iOS and others). Chipmunk is a physics engine writtten in C. It's fast with a very nice API. Chicken Scheme is a Scheme-to-C compiler and interpreter.
All should also run on iOS, but I don't have a Mac.
=== Bindings ===
The Cocos2Dx bindings are in an early-stage. Basic functions to manipulate sprites are available:
- (CCSprite::create "CloseNormal.png")
- (setPosition *sprite* x y)
- (getLocatino touch-event)
The Chipmunk API is more mature. You can read about the `chickmunk` project on https://github.com/kristianlm/chickmunk.
=== Try it yourself ===
You can connect to the REPL directly from your laptop if your phone is on the same WiFi, or use USB. Try Settings->Wireless Networks->Wifi Settings-> [Menu]->Advanced when looking for you phone's IP.
With netcat (or Emacs, with netcat [ip] [port] as your Scheme interpreter), you could try:
$ nc [phone ip] [port]
Alternatively, you could use USB with adb and forward:
$ adb forward tcp:1234 tcp:1234
$ nc localhost 1234