Sokoban

Sokoban with swipe controls in coffeescript.

by Dan Wolfe

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/phaser/2.1.3/phaser.min.js"></script>

CSS

body{
    background: #000000;
    padding:0px;
    margin:0px;
}

CoffeeScript

CRATE = undefined
EMPTY = undefined
PLAYER = undefined
SPOT = undefined
WALL = undefined
beginSwipe = undefined
crates = undefined
endSwipe = undefined
endX = undefined
endY = undefined
game = undefined
goFullScreen = undefined
isCrate = undefined
isWalkable = undefined
level = undefined
move = undefined
moveCrate = undefined
movePlayer = undefined
onCreate = undefined
onPreload = undefined
player = undefined
startX = undefined
startY = undefined
tileSize = undefined
onPreload = ->
  game.load.crossOrigin = 'anonymous'
  game.load.spritesheet "tiles", "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAoCAIAAACq4XLCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT5JREFUeNrs3EFthUAUBdBPUwNYwML3hAWQABbQggSwgAUk0EW7ZBYvHTKUnrOcTBgg3AzJDVTDMLxKWNe1yLrv97vIutu2FVm3aZrT8b7vsxw/9fz8t+v9eAG/JkggSCBIIEiAIIEgwd18ugXfUj1DqjeIzk+p6zrL+e/7Hpq/LEuWded5Ds2fpul0vOu60/FxHE/H27a91fXakcCrHQgSCBIgSCBIIEjwQOEeKdV7RHuMu7m6Lyol+h3OcRyn41VVhY6T6nmifVFqfup5y/XdkR0JBAkECQQJECQQJBAkIN4j/fW+KKXU90hXi55/tC+K/tcu2hdFv0eKXm+u+2lHAq92IEggSIAggSCBIMED+a/dj2j/k6svulsvd3UPk+p/Uvch+v+6UtdrRwKvdiBIIEiAIIEggSDBA30JMACyrmqBko4XEgAAAABJRU5ErkJggg==", 40, 40
  return

goFullScreen = ->
  game.scale.pageAlignHorizontally = true
  game.scale.pageAlignVertically = true
  game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL
  game.scale.setScreenSize true
  return

onCreate = ->
  fixedGroup = undefined
  i = undefined
  j = undefined
  movingGroup = undefined
  player = undefined
  tile = undefined
  goFullScreen()
  fixedGroup = game.add.group()
  movingGroup = game.add.group()
  tile = undefined
  i = 0
  while i < level.length
    crates[i] = []
    j = 0
    while j < level[i].length
      crates[i][j] = null
      switch level[j][i]
        when PLAYER, PLAYER + SPOT
          player = game.add.sprite(40 * i, 40 * j, "tiles")
          player.frame = level[j][i]
          player.posX = i
          player.posY = j
          movingGroup.add player
          tile = game.add.sprite(40 * i, 40 * j,...