This shows off raft movement, jumps, and the cannon. I could have written it with just a simple loop, but this way was much more fun.

The program starts with the cannon's raft moving north. The cannon destroys the west-most + on the top row and then moves back again. After a couple jumps, the raft of +s start moving up (if possible), thus moving a new line into position if the last had all been destroyed by the cannon. A couple more jumps and the raft of .s starts moving toward the raft of +s. The .s are to slow program execution before the raft reaches its position. As the program flow leaves that raft to board the raft of +s, the current memory position is reset to 0 and the raft sent moving back to its former position. Program flow runs along the lines of the raft, incrementing the current memory position by one each time. Since another + gets destroyed each time through, we ultimately end up counting down from 99. After that raft, the program jumps the printing out " bottles of beer on the wall" before jumping back to the cannon raft and the process repeats.

What follows is a syntax highlighted version of the code. A source file that can be downloaded and run can be found here.

[~                                     ~=~ ~]







                          o

                                      ]_
                                        o_s_
o_f..............!a            ++++++++++=========~
                             [o++++++++++========~_]
                         ld[ [o++++++++++=======~_]
                         =   [o++++++++++======~_]
                         $f  [o++++++++++=====~_]
                    ~@+s.j   [o++++++++++====~_]
                         o   [o++++++++++===~_]
                             [o++++++++++==~_]
                             [o++++++++++=~_]  ^ ^ ^ ^  ^ ^ ^ ^
                             [o++++++++++~_]   0 2 f 4  c 5 3 0
                                               2 6 6 7  6 6 7 2
                                         _#====v"v"v"v""v"v"v"v"k
                                                                <6f>
                   [_                            l""=^"]        "
                                                 <6c>0          <66>
                                                 "   a          "
                                                 <61>v          <20>
                                                 "              "
                                                 <77>           <62>
                                                 "              "
                                                 <20>           <65>
                                                 "              "
                                                 <65>           "
                                                 j"^"^"^"-"^"^"^h
                                                   6 7 2   6 2 7
                                                   8 4 0   f 0 2
                                                   v v v   v v v