Giter Site home page Giter Site logo

andybalaam / rabbit-escape Goto Github PK

View Code? Open in Web Editor NEW
72.0 9.0 38.0 60.59 MB

Android and PC game inspired by Lemmings and Pingus

Home Page: http://artificialworlds.net/rabbit-escape

License: GNU General Public License v2.0

Makefile 1.10% Java 98.05% Shell 0.72% Batchfile 0.06% Python 0.07%

rabbit-escape's Introduction

Rabbit Escape

Rabbit Escape is a mobile and desktop game inspired by Lemmings and Pingus in which you must rescue some rabbits from a hostile environment by giving them special abilities.

Find out more at Rabbit Escape.

Screenshots

Rabbit Escape works on Android:

On PC (Linux, Windows, Mac) it runs via a Swing interface:

and, of course, text:

################################
# r                            #
#rf                            #
#ff                            #
#f            b                #
#     Q     /\z           #    #
#  #     /######\/#\     ###   #
#\ #\   /###########\   b###  O#
################################

Running

On PC:

./runrabbit swing   # Launch the UI
./runrabbit         # Launch text interface

Make Levels

See the instructions and video at Creating Levels.

Developers

See INSTALL.md.

Credits

Code, graphics, sound effects by Andy Balaam and the Rabbit Escape Developers.

Music samples by tryad.

rabbit-escape's People

Contributors

andybalaam avatar antonpiatek avatar codesmith00 avatar colonelfazackerley avatar tttppp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rabbit-escape's Issues

Level: "Saw"

New level from @colonelfazackerley:

:name=Saw
:description=One way
:num_rabbits=6
:num_to_save=4
:rabbit_delay=5
:bridge=7
:dig=3
:block=2
:music=tryad-witness


                   Q     

   O                /### 
 ///////////////// /#  # 
 ####################  # 
 ####################### 

Level: "F"

Another medium/easy one, I think

:name=F
:description=
:num_rabbits=9
:num_to_save=8
:rabbit_delay=10
:bridge=3
:block=2
:bash=3
:music=tryad-witness
####################
#     Q            #
#                  #
#     #########    #
#     #########    #
#     ##           #
#     ## Q         #
#     ##           #
#     ########     #
#     ########     #
#     ##           #
#     ##           #
#Q    ##           #
#     ##     O     #
####################

Level: "Prison break"

New level from @colonelfazackerley:

:name=Prison break
:description=In which order should you free them?
:num_rabbits=3
:num_to_save=3
:bash=2
:bridge=3
:dig=2
:music=tryad-witness
            ########          
            #  Q   # ######## 
 ########   #      # #   Q  # 
 #  Q   #   ######## #      # 
 #      #            ######## 
 ########                     

                       O      
            \       /######## 
            ##########        

 ##########                   

Level: "Slot Machine"

Quite an easy level as there aren't that many options, but I thought it was a fun idea.

:name=Slot Machine
:description=Drop in a token and see where the rabbit ends up.
:num_rabbits=1
:num_to_save=1
:dig=1
:music=tryad-witness
         Q         

#       /#\       #
#########p#########
 c     d #   #bd d 
 # i   # O   (## # 
   #b *  #  *  #b# 
    #(  c )    ### 
c #b#i  #  i i     
# b#b#c # i# #c   i
######## ##   #  (#
:*=b(
:*=i(

doxygen?

or javadoc, or neither?

I have found doxygen handy before. Do you mind if I add comments in the correct style as I go, and add a makefile target?

Level: "Spare 2 blockers?"

:name=Spare 2 blockers?
:description=How to rescue 10?
:num_rabbits=10
:num_to_save=10
:rabbit_delay=4
:bridge=4
:block=10
:explode=10
:dig=1
:bash=1
:music=tryad-witness

                           O  
     /  /  /              ### 

                           #\ 
  Q                           
                           #\ 

 ###############\          #\ 
 ##################           

Level: "UFO"

This was fun to make! Possibly I've gone too far from the original "underground" series, past "outdoors" and into "space". I'd be interested to know how people solve this - I have a solution in mind, but there might be others too.

:name=UFO
:description=
:num_rabbits=20
:num_to_save=18
:dig=1
:bridge=3
:explode=3
:climb=2
:rabbit_delay=4
    #            #        #
          #          #     
 #    #        #           





            /#\            
       / /### ###\ \       
      / (    #    ) \      
     / / ##\ O /## \ \     
   #( \  #Q#####Q#  / )#   
    #\ \ #   #   # / /#    
     #\  ### # ###  /#     
    / #\           /# \    
   /#  #############  #\   

Bug: after dig through bridge, rabbits walk on air

Not sure if this is a manifestation of a known issue. Watch this run without doing anything.

:name=Bug
:num_rabbits=10
:num_to_save=12
:rabbit_delay=5,5,1
:bridge=3
:dig=3
:block=2
:music=tryad-witness


      Q        
 )          (  
  )k  )k   (   
   )   )  (    
    )   )(     
     ) d()     
      )(  )    
      (O   )   
 ############  

Level: "Half The World Away"

Not a bug report this time - just a normal level!

:name=Half The World Away
:description=Dreaming of jetpacks...
:num_rabbits=2
:num_to_save=2
:rabbit_delay=2
:climb=1
:bash=2
:dig=1
:bridge=3
:music=tryad-witness
#########          
#                 O
#                  
#Q                 
#       #          
#                  
###### #           
#      #           
#      #           
#    ###           
#                  
#########          

Level: "No bunny left behind"

New level from @colonelfazackerley:

:name=No bunny left behind
:description=They are going too fast!
:num_rabbits=5
:num_to_save=5
:rabbit_delay=2
:bridge=5
:dig=1
:music=tryad-witness
###################
#######           #
#######   Q       #
#######           #
#O                #
#####   ######### #
####              #
####              #
####    ###########
####    #          
####    #          
####    #          
#########          

Level: "C"

:name=C
:description=
:num_rabbits=9
:num_to_save=9
:rabbit_delay=10
:bridge=4
:dig=4
:block=4
:bash=3
:explode=2
:music=tryad-witness
    Q                

    #########        
   # #####   #       
  ########\   #      
 # # #    #\  #      
 ####      ####      
 ####                
 ####                
 #  #                
 ####                
 ####      ####      
 #####    #####      
 ##  ######  O#      
  ## ######  #       
   ##########        
    ########         

Level: "Home sweet home"

New level from @colonelfazackerley:

:name=Home sweet home
:description=Save the chimney bunnies!
:num_rabbits=8
:num_to_save=6
:rabbit_delay=4
:bash=3
:bridge=5
:block=2
:explode=2
:music=tryad-witness

             /## #            
            /### #            
           /#    #            
       Q  /#     #            
         /#      #\           
        /####### ##\          
       /      #     \         
       #      #     #         
       #      #     #         
       ##############         
       #    #       #         
 Q     #    #       #         
       #    #       #      O  
 #############################

Level: "Cups and bridges"

New level from @colonelfazackerley:

:name=Cups and bridges
:description=
:num_rabbits=9
:num_to_save=6
:rabbit_delay=32
:bridge=4
:dig=3
:block=4
:explode=2
:music=tryad-witness

#        #  #       #  #        #
#        #  #       #  #        #
#        #  #       #  #        #
#        #  #       #  #        #
# Q      #  # Q     #  # Q      #
#        #  #       #  #        #
#\      /#  #\     /#  #\      /#
 ##    ##    ##   ##    ##    ## 
  ######      #####      ######  

  O                              
  ######      #####      ######  

Level: "The Mothership"

I think I plugged some of the methods from UFO (#53). This is getting a bit on the large size though!

:name=The Mothership
:description=
:num_rabbits=20
:num_to_save=18
:dig=1
:bridge=3
:explode=3
:climb=2
:rabbit_delay=4
    #            #        #
          #          #     
 #    #        #           





      /     /#\     \      
     /   /### ###\   \     
    /   (    #    )   \    
  )/ / / ##\ O /## \ \ \(  
 #()(# # ######### # #)()# 
  #\ # # #Q#####Q# # # /#  
   #\ \  #   #   #  / /#   
    #\ \ ### # ### / /#    
    /#\     /#\     /#\    
   /# #\ /#\   /#\ /# #\   
  /## ############### ##\  

Level: "Dig For Victory"

Not an outside level, but I liked how this looks.

:name=Dig For Victory
:description=Can you navigate the warren?
:num_rabbits=10
:num_to_save=10
:dig=7
:music=tryad-witness
#########
# Q # Q #
#(((#)()#
#()(#(((#
#)()((((#
#)))())(#
#(()((()#
#)()()()#
#(()))()#
#)))()()#
#)())))(#
#()) ())#
#### ####
###   ###
### # ###
### O ###
#########

Compile fails on (Docker version of) Debian Jessie due to file encoding

At least in the Docker version of Debian Jessie (8.2):

$ docker run -it debian
# apt-get update && apt-get install git make openjdk-7-jdk ant sox inkscape
<snip>
# git clone https://github.com/andybalaam/rabbit-escape.git
<snip>
# cd rabbit-escape/
# make test
<snip>
compile:
    [mkdir] Created dir: /rabbit-escape/rabbit-escape-engine/bin
    [javac] Compiling 112 source files to /rabbit-escape/rabbit-escape-engine/bin
    [javac] /rabbit-escape/rabbit-escape-engine/test/rabbitescape/engine/i18n/TestTranslation.java:67: error: unmappable character for encoding ASCII
    [javac]             Translation.Instance.sanitise( "foo! bar% Baz$ BASH?? Quux\" =" ),
    [javac]                                                                ^

The fix is to add:

            <compilerarg value="-encoding"/>
            <compilerarg value="utf8"/>

To the javac command in build.xml

?missing dependency on linux

after installing everything listed in INSTALL.md "make rungui" yields

Gtk-Message: Failed to load module "canberra-gtk-module"

When audio is on on the Linux version, Rabbit Escape sometimes freezes.

$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Sometimes, the JVM actually crashes.

Disabling audio makes the problem go away.

When it freezes, one thread always has this stack trace in the debugger:

Daemon Thread [SwingWorker-pool-1-thread-2] (Suspended) 
    waiting for: PulseAudioClip$ClipThread  (id=32) 
    Object.wait(long) line: not available [native method]   
    PulseAudioClip$ClipThread(Thread).join(long) line: 1281 
    PulseAudioClip$ClipThread(Thread).join() line: 1355 
    PulseAudioClip.stop() line: 555 
    SwingSoundCache.get(String) line: 32    
    SwingSound.musicClip() line: 107    
    SwingSound.stopMusic() line: 91 
    SwingSound.setMusic(String) line: 63    
    SwingGameLaunch.<init>(SwingGameInit, World, LevelWinListener, SwingSound) line: 82 
    SwingSingleGameMain.createGameLaunch(World, LevelWinListener) line: 77  
    SwingSingleGameMain(Main).launchGame(String[], LevelWinListener) line: 52   
    MenuUi$1.doInBackground() line: 266 
    MenuUi$1.doInBackground() line: 260 
    SwingWorker$1.call() line: 296  
    SwingWorker$2(FutureTask<V>).run() line: 262    
    MenuUi$1(SwingWorker<T,V>).run() line: 335  
    ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145  
    ThreadPoolExecutor$Worker.run() line: 615   
    Thread.run() line: 745  

game is small on a high res screen

On my laptop I have a fairly high res screen and the game is a small window on it. If your tiles are svg it would probably look pretty good scaled up to full screen as it is, otherwise you might want to make it bigger but fill the edges with something more exciting at some point

Level: "K2"

:name=K2
:description=Climb up from base camp and down the other side.
:num_rabbits=10
:num_to_save=2
:bridge=5
:block=2
:explode=10
:music=tryad-witness

                   /\         
 \                /##\        
 #\              /#### /\     
 #       /\      ##### ##     
 ##\     ##\/\  /##### ##\   /
/#Q#\   /############# ###   #
#   #   #######/\###/\/###\ /#
#   #  /######/##\#/##\##  /##
# *   /###/\#/####/####\ /  O#
#########/##\####/###### #####
:*=cccccccccc

License permission for work by @ColonelFazackerley

@colonelfazackerley, do you agree I (and any company or organisation I one-day form) can distribute any levels, graphics, sound effects you have provided to me under all of the following licenses?

  • CC-BY-NC-SA: Creative Commons Attribution Non-Commercial ShareAlike license
  • CC-BY-SA: Creative Commons Attribution ShareAlike license
  • GPL: GNU General Public License, v2 or a later version

The first license (CC-BY-NC-SA) is used at the moment. By agreeing to all three, we make it easy to re-license to a completely Free Culture license if we decide to do this in future.

This allows me to use the work commercially, but prevents others from doing so. If/when we relicense to a Free Culture license, everyone will be allowed use it commercially.

speed up button

I often get to the point where I have everything in place but I'm bored waiting for all the rabbits to run. A 2x (or more) speed button would be good

Level: "The Bomb"

From @tttppp

:name=The Bomb
:description=Don't cut the red wire
:num_rabbits=1
:num_to_save=1
:climb=1
:bash=1
:dig=1
:bridge=1
:music=tryad-witness
################
#        #     #
# Q     # #    #
#       p  # O #
################

You can bridge through a blocker

If you place a bridge token next to an existing blocker, the rabbit that picks it up happily bridges right through the blocker. Later rabbits don't climb up the bridge, but turn around as normal.

The first rabbit should refuse to pick up the bridge token (and possibly bridge the other way after turning around).

Level: "London Bridge"

New level from @colonelfazackerley:

:name=London Bridge
:description=Don't fall down
:num_rabbits=6
:num_to_save=6
:rabbit_delay=10
:bridge=2
:dig=4
:bash=4
:block=1
:music=tryad-witness

   /\              /\   
  /  \            /  \  
  ####            ####  
  #  ##############  #  
 /#  ##############  #\ 
/##  #Q          Q#  ##\
# #  #            #  # #
  #  #            #  #  
  #  #            #  #  
#########      #########
#########      #########
#O     ##      ## ######
#########      #########

Level: "Blockers"

An easy level to introduce the freeing of blockers

:name=Blockers
:description=Free the blockers
:num_rabbits=10
:num_to_save=12
:rabbit_delay=1
:bridge=3
:dig=3
:music=tryad-witness
       Q       

    j     r    
    k     k    
    #######    



    #######    
 O          O  
 ###      ###  

Text interface does not work

Does the text interface work?

  • "make runmenu"
  • choose easy 1
  • I think "dig 7 2" (and beating the enter key) should solve it, but I just get exceptions.

Does not work on Android 2.2

We claim we work on Android 2.2 but today I received a crash notification showing that the version of the Java library in Android 2.2 does not have methods that we use:

java.lang.NoSuchMethodError: java.lang.String.isEmpty
    at rabbitescape.render.AnimationLoader.readAnimation(AnimationLoader.java:121)
    at rabbitescape.render.AnimationLoader.load(AnimationLoader.java:102)
    at rabbitescape.render.AnimationCache.<init>(AnimationCache.java:20)
    at rabbitescape.ui.android.AndroidGraphics.<init>(AndroidGraphics.java:83)
    at rabbitescape.ui.android.AndroidGameLaunch.<init>(AndroidGameLaunch.java:60)
    at rabbitescape.ui.android.Game.<init>(Game.java:29)
    at rabbitescape.ui.android.GameSurfaceView.surfaceCreated(GameSurfaceView.java:77)
    at android.view.SurfaceView.updateWindow(SurfaceView.java:540)
    at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    at android.view.View.draw(View.java:6742)
    at android.widget.FrameLayout.draw(FrameLayout.java:352)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1648)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    at android.view.View.draw(View.java:6742)
    at android.widget.FrameLayout.draw(FrameLayout.java:352)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1648)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    at android.view.View.draw(View.java:6742)
    at android.widget.FrameLayout.draw(FrameLayout.java:352)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1872)
    at android.view.ViewRoot.draw(ViewRoot.java:1422)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1167)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1744)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:4914)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)

I need to figure out an automated test for this, because it is bound to happen again as I only have an Android 2.3 phone to test on.

Level: "Re-entry"

New level from @colonelfazackerley:

:name=Re-entry
:description=
:num_rabbits=6
:num_to_save=4
:rabbit_delay=10
:bridge=1
:dig=3
:block=2
:bash=3
:music=tryad-witness
              #####  
             ##   ## 
            ##     ##
            #       #
            #   Q   #
            #       #
            ##     ##
       /\    ##   ## 
      /  \    #####  
     /    \          
    /Q     \         
    #      #         
    ########         
    #      #         
    #      #         
    ########         
    #      #         
    #      #         
    ########         
    #      #         
   /#      #\        
  /##########\     O 
#####################

keyboard shortcuts and hover descriptions

I often want to select an action quickly, number key shortcuts would be good - add a number icon next to each to make it obvious. Also add some hover over help so I can learn what each is faster

Level: "Platforms, large"

:name=Platforms, large
:description=Here and there
:num_rabbits=6
:num_to_save=5
:bash=1
:dig=1
:bridge=6
:climb=1
:block=1
:explode=10
:rabbit_delay=9
Q          Q               

###        #####           
                      #### 
#               ######     

  ######                   
             ######   ###  


                Q          

      ######               


O              #######     
#######                    


make fails. seems inkscape related

on debian 8.2

** (inkscape:17742): CRITICAL **: bool sp_png_write_rgba_striped(SPDocument*, const gchar*, long unsigned int, long unsigned int, double, double, int (*)(const guchar**, int, int, void*), void*): assertion 'fp != NULL' failed
mkdir -p rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32; convert images-src/land_rising_left_2.png -resize 12.5% rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32/land_rising_left_2.png
convert: unable to open image `rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32/land_rising_left_2.png': Permission denied @ error/blob.c/OpenBlob/2709.
convert: WriteBlob Failed `rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32/land_rising_left_2.png' @ error/png.c/MagickPNGErrorHandler/1645.
Makefile:92: recipe for target 'rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32/land_rising_left_2.png' failed
make: *** [rabbit-escape-ui-swing/src/rabbitescape/ui/swing/images32/land_rising_left_2.png] Error 1

License permission for work by @tttppp

@tttppp, do you agree I (and any company or organisation I one-day form) can distribute any code, levels, graphics, sound effects you have provided to me under all of the following licenses?

  • CC-BY-NC-SA: Creative Commons Attribution Non-Commercial ShareAlike license
  • CC-BY-SA: Creative Commons Attribution ShareAlike license
  • GPL: GNU General Public License, v2 or a later version

The first license (CC-BY-NC-SA) is used for levels, graphics etc. at the moment, and the third (GPL) is used for code. By agreeing to all three, we make it easy to re-license to a completely Free Culture license if we decide to do this in future.

This allows me to use the work commercially, but prevents others from doing so. If/when we relicense to a Free Culture license, everyone will be allowed use it commercially.

Memory leak on Android when rotating the screen when a dialog is visible

Run on Android in debug mode (attached to a PC).
Start a level so the intro dialog is visible.
Rotate the screen.
Note this message in the debug console:

09-25 00:37:31.473  16120-16120/net.artificialworlds.rabbitescape E/WindowManager﹕ Activity rabbitescape.ui.android.AndroidGameActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40970bb8 that was originally added here
    android.view.WindowLeaked: Activity rabbitescape.ui.android.AndroidGameActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40970bb8 that was originally added here
        at android.view.ViewRoot.<init>(ViewRoot.java:277)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
        at android.view.Window$LocalWindowManager.addView(Window.java:433)
        at android.app.Dialog.show(Dialog.java:265)
        at rabbitescape.ui.android.Dialogs$IntroDialogs.show(Dialogs.java:75)
        at rabbitescape.ui.android.Dialogs$IntroDialogs$2.onClick(Dialogs.java:49)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:150)
        at android.app.ActivityThread.main(ActivityThread.java:4277)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:507)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
        at dalvik.system.NativeStart.main(Native Method)

Custom levels from file and URL

Something I would like to work on. I wanted to agree a specification before working on it. This is my interpretation of something on the TODO.

  • created a git ignored directory called dev, experimental or something. It should sit next to easy, medium, test, etc.
  • Bung new .rel files in there. don't worry about naming them level0_n_.
  • "make leveldev" or something would compile the project, like rungui, but would then present a menu.
  • The menu would probably just be in the terminal. it would list the levels in the dev directory for you to choose.
  • If the level is lost it would restart. (Can Alt-F4 or similar to kill the process)
  • If the level is won, process would exit.

The default label of "Enhancement" would be OK, but a custom label of "RFC" or "specification" would be better for this issue.

Level: "Tree climb"

New level from @colonelfazackerley:

:name=Tree climb
:description=There's no ladder
:num_rabbits=4
:num_to_save=3
:rabbit_delay=15
:bash=3
:bridge=5
:dig=2
:block=1
:explode=1
:music=tryad-witness

            O  /#             
            #####             
              ##              
              ##              
              ##########\     
      #       ###      ##     
     /#####\  ###             
     #    #######             
             ####             
 Q           ####             
\           /####\           #
##############################

Level: "Platforms, small"

It's easy. Perhaps use it near the start of the outdoor set.

:name=Platforms, small
:description=
:num_rabbits=5
:num_to_save=5
:rabbit_delay=10
:bridge=3
:bash=3
:dig=2
:music=tryad-witness
         Q            



         ###     ###  
    ###               

    ##                
          ####        
O                     
#####                 


Level hard 4 "Stairs" is easier than I meant

I meant you to have to send a lone rabbit all the way up, over the gaps, down the slope, climb back up, and then become a blocker. In fact, you can do it an easier way than that by just making a blocker after the first gap.

Level: "Spare a blocker"

:name=Spare a blocker
:description=How to rescue 9?
:num_rabbits=10
:num_to_save=9
:rabbit_delay=4
:bridge=4
:block=10
:explode=10
:dig=1
:bash=1
:music=tryad-witness

                           O  
     /  /  /              ### 

                           #\ 
  Q                           
                           #\ 

 ##############\           #\ 
 ##################           

Single window

A window for level select and one for the game is annoying - you should merge them

Level: "Expect The Unexpected"

From @tttppp:

:name=Expect The Unexpected
:description=Things aren't always as they seem
:num_rabbits=3
:num_to_save=2
:rabbit_delay=10
:climb=3
:bridge=4
:block=2
:explode=2
:music=tryad-witness
########################
#///                \\\#
#///      /# # #\   \\\#
# //  /##### #      \\ #
#     #    # # \    ## #
#\    #    # # #\   ## #
##\   #      # ##\  ## #
#Q    # /#\ /#\    O## #
#     # #p /###\  #### #
#   /   ##             #
### ###########        #
#           #          #
#  /#####\     /#####\ #
############ ###########

Android system tests must be run individually, and are not command line

I have written a couple of system-level tests for the Android app here: https://github.com/andybalaam/rabbit-escape/tree/master/rabbit-escape-ui-android/app/src/androidTest/java/rabbitescape/ui/android

They are slow and hokey (especially the back() implementation) and don't always go through the real UI actions, but use knowledge of our code.

They have to be run individually. I think we need to make the ActivityMonitors global to avoid this.

There is no Makefile target to run them on the command line in various VMs, which would be cool.

They don't use the recommended UI testing facilities (https://developer.android.com/training/testing/ui-testing/index.html) - Espresso etc. because they rely on a later version of Android. Given that the reason I got around to writing them was to cover an old Android version, it looks like we are stuck with this, and have to make it up on our own.

Fix some of these things!

Level: "Rabbit hole descent"

New level from @colonelfazackerley:

:name=Rabbit hole descent
:description=Rabbit hole descent
:num_rabbits=4
:num_to_save=2
:rabbit_delay=25
:bridge=5
:dig=4
:bash=4
:block=1
:music=tryad-witness
###################


  Q                

#######   #########
#######   #########
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   ##       
     ##   O#       
#######   #########
#######   #########

Level: "Cloud bunnies"

New level from @colonelfazackerley:

:name=Cloud bunnies
:description=
:num_rabbits=9
:num_to_save=8
:rabbit_delay=20
:bridge=3
:dig=4
:block=2
:explode=2
:music=tryad-witness
 Q                                   
                        Q            
     /##\                            
    /#  #\                  /##\     
 /###    ###\              /#  #\    
 #          #           /###    ###\ 
 ##        ##           #          # 
  ##########            ##      O ## 
           Q   /##\      ##########  
              /#  #\                 
           /###    ###\              
           #          #              
           ##        ##              
            ##########               

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.