├── 000 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── boot-game.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── play-game.js └── webpack.config.js ├── 001 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ └── emptytile.png │ ├── boot-game.js │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── play-game.js └── webpack.config.js ├── 002 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 003 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 004 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 005 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 006 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 007 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 008 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 009 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 010 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 011 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 012 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 013 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 014 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 015 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 016 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 017 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 018 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 019 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 020 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 021 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 022 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 023 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 024 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 025 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 026 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 027 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ ├── make-resize-game.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 028 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── 029 ├── .babelrc ├── .browserslistrc ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── font.fnt │ │ │ └── font.png │ │ ├── sounds │ │ │ ├── grow.mp3 │ │ │ ├── grow.ogg │ │ │ ├── move.mp3 │ │ │ └── move.ogg │ │ └── sprites │ │ │ ├── emptytile.png │ │ │ ├── fullscreen.png │ │ │ ├── gametitle.png │ │ │ ├── howtoplay.png │ │ │ ├── logo.png │ │ │ ├── restart.png │ │ │ ├── scorelabels.png │ │ │ ├── scorepanel.png │ │ │ └── tiles.png │ ├── game-options.js │ ├── index.html │ ├── index.js │ └── scenes │ │ ├── boot-game.js │ │ ├── index.js │ │ └── play-game.js └── webpack.config.js ├── README.md ├── TODO └── cordovafolder ├── .gitignore ├── config.xml ├── hooks └── README.md ├── package-lock.json ├── package.json ├── platforms └── android │ ├── .gitignore │ ├── CordovaLib │ ├── AndroidManifest.xml │ ├── CordovaLib.iml │ ├── build.gradle │ ├── cordova.gradle │ ├── project.properties │ └── src │ │ └── org │ │ └── apache │ │ └── cordova │ │ ├── AuthenticationToken.java │ │ ├── BuildHelper.java │ │ ├── CallbackContext.java │ │ ├── CallbackMap.java │ │ ├── Config.java │ │ ├── ConfigXmlParser.java │ │ ├── CordovaActivity.java │ │ ├── CordovaArgs.java │ │ ├── CordovaBridge.java │ │ ├── CordovaClientCertRequest.java │ │ ├── CordovaDialogsHelper.java │ │ ├── CordovaHttpAuthHandler.java │ │ ├── CordovaInterface.java │ │ ├── CordovaInterfaceImpl.java │ │ ├── CordovaPlugin.java │ │ ├── CordovaPreferences.java │ │ ├── CordovaResourceApi.java │ │ ├── CordovaWebView.java │ │ ├── CordovaWebViewEngine.java │ │ ├── CordovaWebViewImpl.java │ │ ├── CoreAndroid.java │ │ ├── ExposedJsApi.java │ │ ├── ICordovaClientCertRequest.java │ │ ├── ICordovaCookieManager.java │ │ ├── ICordovaHttpAuthHandler.java │ │ ├── LOG.java │ │ ├── NativeToJsMessageQueue.java │ │ ├── PermissionHelper.java │ │ ├── PluginEntry.java │ │ ├── PluginManager.java │ │ ├── PluginResult.java │ │ ├── ResumeCallback.java │ │ ├── Whitelist.java │ │ └── engine │ │ ├── SystemCookieManager.java │ │ ├── SystemExposedJsApi.java │ │ ├── SystemWebChromeClient.java │ │ ├── SystemWebView.java │ │ ├── SystemWebViewClient.java │ │ └── SystemWebViewEngine.java │ ├── android.iml │ ├── android.json │ ├── app │ ├── app.iml │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── www │ │ │ ├── 05cf183c9f396342019b7b41a4cf2c5c.mp3 │ │ │ ├── 0bf06b0fd712e657f6bbda07936a3321.png │ │ │ ├── 144d504eff90ac62d04caf0a36b668f9.png │ │ │ ├── 180f716f5635a1e58f8578b0ffd28f00.png │ │ │ ├── 21c1ad9d5230937941717a54f97aa467.png │ │ │ ├── 2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3 │ │ │ ├── 3a5a21c67311261b80eb3857987248be.fnt │ │ │ ├── 3b6fe7d0433f73d031c160a45f5de3fc.png │ │ │ ├── 4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png │ │ │ ├── 81c42d5e25fa9841a62aeee9f94e4c1c.png │ │ │ ├── b2893590601c5b128cff28d4d0a53f71.png │ │ │ ├── ccded6b9b4ea23c94c390e89cb25dc44.png │ │ │ ├── cordova-js-src │ │ │ ├── android │ │ │ │ ├── nativeapiprovider.js │ │ │ │ └── promptbasednativeapi.js │ │ │ ├── exec.js │ │ │ ├── platform.js │ │ │ └── plugin │ │ │ │ └── android │ │ │ │ └── app.js │ │ │ ├── cordova.js │ │ │ ├── cordova_plugins.js │ │ │ ├── d45b431900f759a42b185127b9ea034a.png │ │ │ ├── dd7ce68917a25e9883b1b2db6360e5e5.ogg │ │ │ ├── f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg │ │ │ ├── index.html │ │ │ └── main.js │ │ ├── java │ │ ├── com │ │ │ └── emanueleferonato │ │ │ │ └── game4096 │ │ │ │ └── MainActivity.java │ │ └── org │ │ │ └── apache │ │ │ └── cordova │ │ │ └── whitelist │ │ │ └── WhitelistPlugin.java │ │ └── res │ │ ├── drawable-land-hdpi │ │ └── screen.png │ │ ├── drawable-land-ldpi │ │ └── screen.png │ │ ├── drawable-land-mdpi │ │ └── screen.png │ │ ├── drawable-land-xhdpi │ │ └── screen.png │ │ ├── drawable-land-xxhdpi │ │ └── screen.png │ │ ├── drawable-land-xxxhdpi │ │ └── screen.png │ │ ├── drawable-port-hdpi │ │ └── screen.png │ │ ├── drawable-port-ldpi │ │ └── screen.png │ │ ├── drawable-port-mdpi │ │ └── screen.png │ │ ├── drawable-port-xhdpi │ │ └── screen.png │ │ ├── drawable-port-xxhdpi │ │ └── screen.png │ │ ├── drawable-port-xxxhdpi │ │ └── screen.png │ │ ├── mipmap-hdpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_background.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values │ │ └── strings.xml │ │ └── xml │ │ └── config.xml │ ├── build.gradle │ ├── cordova │ ├── Api.js │ ├── android_sdk_version │ ├── android_sdk_version.bat │ ├── build │ ├── build.bat │ ├── check_reqs │ ├── check_reqs.bat │ ├── clean │ ├── clean.bat │ ├── defaults.xml │ ├── lib │ │ ├── Adb.js │ │ ├── AndroidManifest.js │ │ ├── AndroidProject.js │ │ ├── android_sdk.js │ │ ├── build.js │ │ ├── builders │ │ │ ├── ProjectBuilder.js │ │ │ └── builders.js │ │ ├── check_reqs.js │ │ ├── config │ │ │ └── GradlePropertiesParser.js │ │ ├── device.js │ │ ├── emulator.js │ │ ├── getASPath.bat │ │ ├── install-device │ │ ├── install-device.bat │ │ ├── install-emulator │ │ ├── install-emulator.bat │ │ ├── list-devices │ │ ├── list-devices.bat │ │ ├── list-emulator-images │ │ ├── list-emulator-images.bat │ │ ├── list-started-emulators │ │ ├── list-started-emulators.bat │ │ ├── log.js │ │ ├── plugin-build.gradle │ │ ├── pluginHandlers.js │ │ ├── prepare.js │ │ ├── retry.js │ │ ├── run.js │ │ ├── start-emulator │ │ └── start-emulator.bat │ ├── log │ ├── log.bat │ ├── loggingHelper.js │ ├── run │ ├── run.bat │ ├── version │ └── version.bat │ ├── gradle.properties │ ├── platform_www │ ├── cordova-js-src │ │ ├── android │ │ │ ├── nativeapiprovider.js │ │ │ └── promptbasednativeapi.js │ │ ├── exec.js │ │ ├── platform.js │ │ └── plugin │ │ │ └── android │ │ │ └── app.js │ ├── cordova.js │ └── cordova_plugins.js │ ├── project.properties │ ├── settings.gradle │ └── wrapper.gradle ├── plugins ├── android.json ├── cordova-plugin-whitelist │ ├── .github │ │ └── PULL_REQUEST_TEMPLATE.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── RELEASENOTES.md │ ├── doc │ │ ├── de │ │ │ └── README.md │ │ ├── es │ │ │ └── README.md │ │ ├── fr │ │ │ └── README.md │ │ ├── it │ │ │ └── README.md │ │ ├── ja │ │ │ └── README.md │ │ ├── ko │ │ │ └── README.md │ │ ├── pl │ │ │ └── README.md │ │ └── zh │ │ │ └── README.md │ ├── package.json │ ├── plugin.xml │ └── src │ │ └── android │ │ └── WhitelistPlugin.java └── fetch.json └── www ├── 05cf183c9f396342019b7b41a4cf2c5c.mp3 ├── 0bf06b0fd712e657f6bbda07936a3321.png ├── 144d504eff90ac62d04caf0a36b668f9.png ├── 180f716f5635a1e58f8578b0ffd28f00.png ├── 21c1ad9d5230937941717a54f97aa467.png ├── 2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3 ├── 3a5a21c67311261b80eb3857987248be.fnt ├── 3b6fe7d0433f73d031c160a45f5de3fc.png ├── 4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png ├── 81c42d5e25fa9841a62aeee9f94e4c1c.png ├── b2893590601c5b128cff28d4d0a53f71.png ├── ccded6b9b4ea23c94c390e89cb25dc44.png ├── d45b431900f759a42b185127b9ea034a.png ├── dd7ce68917a25e9883b1b2db6360e5e5.ogg ├── f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg ├── index.html └── main.js /000/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /000/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 0.25% 2 | not dead 3 | -------------------------------------------------------------------------------- /000/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /000/src/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | class BootGame extends Phaser.Scene { 4 | constructor () { 5 | super('BootGame') 6 | } 7 | 8 | create () { 9 | console.log('game is booting...') 10 | this.scene.start('PlayGame') 11 | } 12 | } 13 | 14 | export default BootGame 15 | -------------------------------------------------------------------------------- /000/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /000/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import BootGame from './boot-game' 4 | import makeResizeGame from './make-resize-game' 5 | import PlayGame from './play-game' 6 | 7 | window.onload = function () { 8 | const gameConfig = { 9 | backgroundColor: 0xff0000, 10 | height: 640, 11 | scene: [BootGame, PlayGame], 12 | width: 480 13 | } 14 | 15 | const game = new Phaser.Game(gameConfig) 16 | window.focus() 17 | const resizeGame = makeResizeGame(game) 18 | resizeGame() 19 | window.addEventListener('resize', resizeGame) 20 | } 21 | -------------------------------------------------------------------------------- /000/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /000/src/play-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | class PlayGame extends Phaser.Scene { 4 | constructor () { 5 | super('PlayGame') 6 | } 7 | 8 | create () { 9 | console.log('this is my awesome game') 10 | } 11 | } 12 | 13 | export default PlayGame 14 | -------------------------------------------------------------------------------- /000/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }] 17 | }, 18 | plugins: [ 19 | new HtmlWebpackPlugin({ 20 | filename: './index.html', 21 | template: './src/index.html' 22 | }) 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /001/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /001/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /001/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /001/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/001/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /001/src/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import emptytile from './assets/sprites/emptytile.png' 4 | 5 | class BootGame extends Phaser.Scene { 6 | constructor () { 7 | super('BootGame') 8 | } 9 | 10 | preload () { 11 | this.load.image('emptytile', emptytile) 12 | } 13 | 14 | create () { 15 | console.log('game is booting...') 16 | this.scene.start('PlayGame') 17 | } 18 | } 19 | 20 | export default BootGame 21 | -------------------------------------------------------------------------------- /001/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20 8 | } 9 | -------------------------------------------------------------------------------- /001/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /001/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /001/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /002/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /002/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /002/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /002/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/002/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /002/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/002/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /002/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20 8 | } 9 | -------------------------------------------------------------------------------- /002/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /002/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /002/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /002/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /002/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /002/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /003/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /003/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /003/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /003/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/003/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /003/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/003/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /003/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20 8 | } 9 | -------------------------------------------------------------------------------- /003/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /003/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /003/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /003/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /003/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /003/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /004/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /004/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /004/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /004/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/004/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /004/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/004/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /004/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20, 8 | tweenSpeed: 2000 9 | } 10 | -------------------------------------------------------------------------------- /004/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /004/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /004/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /004/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /004/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /004/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /005/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /005/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /005/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /005/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/005/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /005/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/005/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /005/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20, 8 | tweenSpeed: 2000 9 | } 10 | -------------------------------------------------------------------------------- /005/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /005/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /005/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /005/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /005/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /005/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /006/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /006/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /006/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /006/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/006/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /006/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/006/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /006/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20, 8 | tweenSpeed: 2000 9 | } 10 | -------------------------------------------------------------------------------- /006/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /006/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /006/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /006/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /006/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /006/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /007/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /007/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /007/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /007/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/007/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /007/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/007/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /007/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | tileSize: 200, 7 | tileSpacing: 20, 8 | tweenSpeed: 2000 9 | } 10 | 11 | const LEFT = 0 12 | const RIGHT = 1 13 | const UP = 2 14 | const DOWN = 3 15 | 16 | export const constants = { 17 | LEFT, 18 | RIGHT, 19 | UP, 20 | DOWN 21 | } 22 | -------------------------------------------------------------------------------- /007/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /007/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /007/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /007/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /007/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /007/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /008/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /008/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /008/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /008/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/008/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /008/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/008/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /008/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 2000 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const constants = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /008/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /008/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /008/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /008/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /008/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /008/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /009/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /009/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /009/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /009/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/009/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /009/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/009/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /009/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const constants = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /009/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /009/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /009/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /009/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /009/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /009/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /010/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /010/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /010/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /010/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/010/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /010/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/010/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /010/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const constants = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /010/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /010/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /010/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /010/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /010/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /010/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /011/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /011/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /011/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /011/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/011/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /011/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/011/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /011/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const constants = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /011/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /011/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /011/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /011/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /011/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /011/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /012/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /012/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /012/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /012/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/012/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /012/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/012/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /012/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /012/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /012/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /012/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /012/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /012/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /012/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /013/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /013/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /013/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /013/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/013/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /013/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/013/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /013/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /013/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /013/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /013/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /013/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /013/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /013/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /014/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /014/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /014/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /014/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/014/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /014/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/014/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /014/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /014/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /014/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /014/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /014/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /014/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /014/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /015/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /015/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /015/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /015/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/015/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /015/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/015/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /015/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /015/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /015/src/index.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import { BootGame, PlayGame } from './scenes' 4 | 5 | import gameOptions from './game-options' 6 | import makeResizeGame from './make-resize-game' 7 | 8 | window.onload = function () { 9 | const gameConfig = { 10 | backgroundColor: 0xecf0f1, 11 | height: gameOptions.boardSize.rows * (gameOptions.tileSize + 12 | gameOptions.tileSpacing) + gameOptions.tileSpacing, 13 | scene: [BootGame, PlayGame], 14 | width: gameOptions.boardSize.cols * (gameOptions.tileSize + 15 | gameOptions.tileSpacing) + gameOptions.tileSpacing 16 | } 17 | 18 | const game = new Phaser.Game(gameConfig) 19 | window.focus() 20 | const resizeGame = makeResizeGame(game) 21 | resizeGame() 22 | window.addEventListener('resize', resizeGame) 23 | } 24 | -------------------------------------------------------------------------------- /015/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /015/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /015/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /015/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /016/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /016/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /016/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /016/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/016/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /016/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/016/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /016/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /016/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /016/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /016/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /016/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /016/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /017/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /017/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /017/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /017/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/017/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /017/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/017/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /017/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /017/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /017/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /017/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /017/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /017/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /018/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /018/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /018/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /018/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/018/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /018/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/018/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /018/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /018/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /018/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /018/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /018/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /018/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /019/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /019/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /019/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /019/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/019/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /019/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/019/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /019/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 200 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /019/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /019/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /019/src/scenes/boot-game.js: -------------------------------------------------------------------------------- 1 | import Phaser from 'phaser' 2 | 3 | import gameOptions from '../game-options' 4 | 5 | import emptytile from '../assets/sprites/emptytile.png' 6 | import tiles from '../assets/sprites/tiles.png' 7 | 8 | class BootGame extends Phaser.Scene { 9 | constructor () { 10 | super('BootGame') 11 | } 12 | 13 | preload () { 14 | this.load.image('emptytile', emptytile) 15 | 16 | this.load.spritesheet('tiles', tiles, { 17 | frameHeight: gameOptions.tileSize, 18 | frameWidth: gameOptions.tileSize 19 | }) 20 | } 21 | 22 | create () { 23 | this.scene.start('PlayGame') 24 | } 25 | } 26 | 27 | export default BootGame 28 | -------------------------------------------------------------------------------- /019/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /019/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(gif|jpg|png|svg)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /020/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /020/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /020/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /020/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /020/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /020/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /020/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /020/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /020/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/020/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /020/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | boardSize: { 3 | cols: 4, 4 | rows: 4 5 | }, 6 | swipeMaxTime: 1000, 7 | swipeMinDistance: 20, 8 | swipeMinNormal: 0.85, 9 | tileSize: 200, 10 | tileSpacing: 20, 11 | tweenSpeed: 50 12 | } 13 | 14 | const LEFT = 0 15 | const RIGHT = 1 16 | const UP = 2 17 | const DOWN = 3 18 | 19 | export const directions = { 20 | LEFT, 21 | RIGHT, 22 | UP, 23 | DOWN 24 | } 25 | -------------------------------------------------------------------------------- /020/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | My Awesome Game 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /020/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /020/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /020/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /021/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /021/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /021/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /021/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /021/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /021/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /021/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /021/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /021/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/021/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /021/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | swipeMaxTime: 1000, 8 | swipeMinDistance: 20, 9 | swipeMinNormal: 0.85, 10 | tileSize: 200, 11 | tileSpacing: 20, 12 | tweenSpeed: 50 13 | } 14 | 15 | const LEFT = 0 16 | const RIGHT = 1 17 | const UP = 2 18 | const DOWN = 3 19 | 20 | export const directions = { 21 | LEFT, 22 | RIGHT, 23 | UP, 24 | DOWN 25 | } 26 | -------------------------------------------------------------------------------- /021/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /021/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /021/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /021/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /022/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /022/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /022/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /022/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /022/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /022/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /022/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /022/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /022/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /022/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /022/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /022/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /022/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /022/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /022/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/022/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /022/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | swipeMaxTime: 1000, 8 | swipeMinDistance: 20, 9 | swipeMinNormal: 0.85, 10 | tileSize: 200, 11 | tileSpacing: 20, 12 | tweenSpeed: 50 13 | } 14 | 15 | const LEFT = 0 16 | const RIGHT = 1 17 | const UP = 2 18 | const DOWN = 3 19 | 20 | export const directions = { 21 | LEFT, 22 | RIGHT, 23 | UP, 24 | DOWN 25 | } 26 | -------------------------------------------------------------------------------- /022/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /022/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /022/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /022/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /023/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /023/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /023/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /023/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /023/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /023/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /023/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /023/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /023/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /023/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /023/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /023/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /023/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /023/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /023/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/023/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /023/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | swipeMaxTime: 1000, 8 | swipeMinDistance: 20, 9 | swipeMinNormal: 0.85, 10 | tileSize: 200, 11 | tileSpacing: 20, 12 | tweenSpeed: 50 13 | } 14 | 15 | const LEFT = 0 16 | const RIGHT = 1 17 | const UP = 2 18 | const DOWN = 3 19 | 20 | export const directions = { 21 | LEFT, 22 | RIGHT, 23 | UP, 24 | DOWN 25 | } 26 | -------------------------------------------------------------------------------- /023/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /023/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /023/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /023/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /024/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /024/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /024/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /024/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/fonts/font.png -------------------------------------------------------------------------------- /024/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /024/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /024/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /024/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /024/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /024/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /024/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /024/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /024/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /024/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /024/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /024/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/024/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /024/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | swipeMaxTime: 1000, 8 | swipeMinDistance: 20, 9 | swipeMinNormal: 0.85, 10 | tileSize: 200, 11 | tileSpacing: 20, 12 | tweenSpeed: 50 13 | } 14 | 15 | const LEFT = 0 16 | const RIGHT = 1 17 | const UP = 2 18 | const DOWN = 3 19 | 20 | export const directions = { 21 | LEFT, 22 | RIGHT, 23 | UP, 24 | DOWN 25 | } 26 | -------------------------------------------------------------------------------- /024/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /024/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /024/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /024/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /025/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /025/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /025/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /025/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/fonts/font.png -------------------------------------------------------------------------------- /025/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /025/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /025/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /025/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /025/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /025/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /025/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /025/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /025/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /025/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /025/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /025/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/025/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /025/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | swipeMaxTime: 1000, 8 | swipeMinDistance: 20, 9 | swipeMinNormal: 0.85, 10 | tileSize: 200, 11 | tileSpacing: 20, 12 | tweenSpeed: 50 13 | } 14 | 15 | const LEFT = 0 16 | const RIGHT = 1 17 | const UP = 2 18 | const DOWN = 3 19 | 20 | export const directions = { 21 | LEFT, 22 | RIGHT, 23 | UP, 24 | DOWN 25 | } 26 | -------------------------------------------------------------------------------- /025/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /025/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /025/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /025/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /026/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /026/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /026/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /026/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/fonts/font.png -------------------------------------------------------------------------------- /026/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /026/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /026/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /026/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /026/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /026/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /026/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /026/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /026/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /026/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /026/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /026/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/026/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /026/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | localStorageName: 'topscore4096', 8 | swipeMaxTime: 1000, 9 | swipeMinDistance: 20, 10 | swipeMinNormal: 0.85, 11 | tileSize: 200, 12 | tileSpacing: 20, 13 | tweenSpeed: 50 14 | } 15 | 16 | const LEFT = 0 17 | const RIGHT = 1 18 | const UP = 2 19 | const DOWN = 3 20 | 21 | export const directions = { 22 | LEFT, 23 | RIGHT, 24 | UP, 25 | DOWN 26 | } 27 | -------------------------------------------------------------------------------- /026/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /026/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /026/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /026/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /027/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /027/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /027/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /027/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/fonts/font.png -------------------------------------------------------------------------------- /027/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /027/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /027/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /027/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /027/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /027/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /027/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /027/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /027/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /027/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /027/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /027/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/027/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /027/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | localStorageName: 'topscore4096', 8 | swipeMaxTime: 1000, 9 | swipeMinDistance: 20, 10 | swipeMinNormal: 0.85, 11 | tileSize: 200, 12 | tileSpacing: 20, 13 | tweenSpeed: 50 14 | } 15 | 16 | const LEFT = 0 17 | const RIGHT = 1 18 | const UP = 2 19 | const DOWN = 3 20 | 21 | export const directions = { 22 | LEFT, 23 | RIGHT, 24 | UP, 25 | DOWN 26 | } 27 | -------------------------------------------------------------------------------- /027/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | My Awesome Game 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /027/src/make-resize-game.js: -------------------------------------------------------------------------------- 1 | export default game => function () { 2 | const canvas = document.querySelector('canvas') 3 | const windowWidth = window.innerWidth 4 | const windowHeight = window.innerHeight 5 | const windowRatio = windowWidth / windowHeight 6 | const gameRatio = game.config.width / game.config.height 7 | 8 | if (windowRatio < gameRatio) { 9 | canvas.style.width = `${windowWidth}px` 10 | canvas.style.height = `${windowWidth / gameRatio}px` 11 | } else { 12 | canvas.style.width = `${windowHeight * gameRatio}px` 13 | canvas.style.height = `${windowHeight}px` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /027/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /027/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /028/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /028/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /028/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /028/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/fonts/font.png -------------------------------------------------------------------------------- /028/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /028/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /028/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /028/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /028/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /028/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /028/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /028/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /028/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /028/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /028/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /028/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/028/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /028/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | localStorageName: 'topscore4096', 8 | swipeMaxTime: 1000, 9 | swipeMinDistance: 20, 10 | swipeMinNormal: 0.85, 11 | tileSize: 200, 12 | tileSpacing: 20, 13 | tweenSpeed: 50 14 | } 15 | 16 | const LEFT = 0 17 | const RIGHT = 1 18 | const UP = 2 19 | const DOWN = 3 20 | 21 | export const directions = { 22 | LEFT, 23 | RIGHT, 24 | UP, 25 | DOWN 26 | } 27 | -------------------------------------------------------------------------------- /028/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | 4096 16 | 17 | 18 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /028/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /028/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /029/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [[ 3 | "@babel/preset-env", { 4 | "corejs": 3, 5 | "useBuiltIns": "entry" 6 | } 7 | ]] 8 | } 9 | -------------------------------------------------------------------------------- /029/.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | not dead 3 | -------------------------------------------------------------------------------- /029/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /029/src/assets/fonts/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/fonts/font.png -------------------------------------------------------------------------------- /029/src/assets/sounds/grow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sounds/grow.mp3 -------------------------------------------------------------------------------- /029/src/assets/sounds/grow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sounds/grow.ogg -------------------------------------------------------------------------------- /029/src/assets/sounds/move.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sounds/move.mp3 -------------------------------------------------------------------------------- /029/src/assets/sounds/move.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sounds/move.ogg -------------------------------------------------------------------------------- /029/src/assets/sprites/emptytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/emptytile.png -------------------------------------------------------------------------------- /029/src/assets/sprites/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/fullscreen.png -------------------------------------------------------------------------------- /029/src/assets/sprites/gametitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/gametitle.png -------------------------------------------------------------------------------- /029/src/assets/sprites/howtoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/howtoplay.png -------------------------------------------------------------------------------- /029/src/assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/logo.png -------------------------------------------------------------------------------- /029/src/assets/sprites/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/restart.png -------------------------------------------------------------------------------- /029/src/assets/sprites/scorelabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/scorelabels.png -------------------------------------------------------------------------------- /029/src/assets/sprites/scorepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/scorepanel.png -------------------------------------------------------------------------------- /029/src/assets/sprites/tiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/029/src/assets/sprites/tiles.png -------------------------------------------------------------------------------- /029/src/game-options.js: -------------------------------------------------------------------------------- 1 | export default { 2 | aspectRatio: 16 / 9, 3 | boardSize: { 4 | cols: 4, 5 | rows: 4 6 | }, 7 | localStorageName: 'topscore4096', 8 | swipeMaxTime: 1000, 9 | swipeMinDistance: 20, 10 | swipeMinNormal: 0.85, 11 | tileSize: 200, 12 | tileSpacing: 20, 13 | tweenSpeed: 50 14 | } 15 | 16 | const LEFT = 0 17 | const RIGHT = 1 18 | const UP = 2 19 | const DOWN = 3 20 | 21 | export const directions = { 22 | DOWN, 23 | LEFT, 24 | RIGHT, 25 | UP 26 | } 27 | -------------------------------------------------------------------------------- /029/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | 4096 16 | 17 | 18 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /029/src/scenes/index.js: -------------------------------------------------------------------------------- 1 | import BootGame from './boot-game' 2 | import PlayGame from './play-game' 3 | 4 | export { 5 | BootGame, 6 | PlayGame 7 | } 8 | -------------------------------------------------------------------------------- /029/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackPlugin = require('html-webpack-plugin') 2 | 3 | module.exports = { 4 | module: { 5 | rules: [{ 6 | exclude: /node_modules/, 7 | test: /\.js$/, 8 | use: { 9 | loader: 'babel-loader' 10 | } 11 | }, { 12 | test: /\.html$/, 13 | use: [{ 14 | loader: 'html-loader' 15 | }] 16 | }, { 17 | test: /\.(fnt|mp3|ogg|png)$/, 18 | use: [ 19 | 'file-loader' 20 | ] 21 | }] 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | filename: './index.html', 26 | template: './src/index.html' 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | Page 183 2 | -------------------------------------------------------------------------------- /cordovafolder/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /cordovafolder/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.emanueleferonato.game4096", 3 | "displayName": "4096", 4 | "version": "1.0.0", 5 | "description": "A sample Apache Cordova application that responds to the deviceready event.", 6 | "main": "index.js", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [ 11 | "ecosystem:cordova" 12 | ], 13 | "author": "Apache Cordova Team", 14 | "license": "Apache-2.0", 15 | "dependencies": { 16 | "cordova-android": "^8.0.0" 17 | }, 18 | "devDependencies": { 19 | "cordova-plugin-whitelist": "^1.3.3" 20 | }, 21 | "cordova": { 22 | "plugins": { 23 | "cordova-plugin-whitelist": {} 24 | }, 25 | "platforms": [ 26 | "android" 27 | ] 28 | } 29 | } -------------------------------------------------------------------------------- /cordovafolder/platforms/android/.gitignore: -------------------------------------------------------------------------------- 1 | # Non-project-specific build files: 2 | build.xml 3 | local.properties 4 | /gradlew 5 | /gradlew.bat 6 | /gradle 7 | # Ant builds 8 | ant-build 9 | ant-gen 10 | # Eclipse builds 11 | gen 12 | out 13 | # Gradle build artifacts 14 | .gradle 15 | .gradletasknamecache 16 | /build 17 | /CordovaLib/build 18 | /app/build 19 | gradle-app.setting 20 | # Android Studio 21 | .idea 22 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/CordovaLib/project.properties: -------------------------------------------------------------------------------- 1 | # This file was originally created by the Android Tools, but is now 2 | # used by cordova-android to manage the project configuration. 3 | 4 | # Indicates whether an apk should be generated for each density. 5 | split.density=false 6 | 7 | # Project target. 8 | target=android-28 9 | apk-configurations= 10 | renderscript.opt.level=O0 11 | android.library=true 12 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/05cf183c9f396342019b7b41a4cf2c5c.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/05cf183c9f396342019b7b41a4cf2c5c.mp3 -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/0bf06b0fd712e657f6bbda07936a3321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/0bf06b0fd712e657f6bbda07936a3321.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/144d504eff90ac62d04caf0a36b668f9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/144d504eff90ac62d04caf0a36b668f9.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/180f716f5635a1e58f8578b0ffd28f00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/180f716f5635a1e58f8578b0ffd28f00.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/21c1ad9d5230937941717a54f97aa467.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/21c1ad9d5230937941717a54f97aa467.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3 -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/3b6fe7d0433f73d031c160a45f5de3fc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/3b6fe7d0433f73d031c160a45f5de3fc.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/81c42d5e25fa9841a62aeee9f94e4c1c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/81c42d5e25fa9841a62aeee9f94e4c1c.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/b2893590601c5b128cff28d4d0a53f71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/b2893590601c5b128cff28d4d0a53f71.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/ccded6b9b4ea23c94c390e89cb25dc44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/ccded6b9b4ea23c94c390e89cb25dc44.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/cordova_plugins.js: -------------------------------------------------------------------------------- 1 | cordova.define('cordova/plugin_list', function(require, exports, module) { 2 | module.exports = []; 3 | module.exports.metadata = { 4 | "cordova-plugin-whitelist": "1.3.3" 5 | }; 6 | }); -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/d45b431900f759a42b185127b9ea034a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/d45b431900f759a42b185127b9ea034a.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/dd7ce68917a25e9883b1b2db6360e5e5.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/dd7ce68917a25e9883b1b2db6360e5e5.ogg -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/assets/www/f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/assets/www/f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-hdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-hdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-ldpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-ldpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-mdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-mdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-xhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-xhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-xxhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-xxhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-land-xxxhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-land-xxxhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-hdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-hdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-ldpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-ldpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-mdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-mdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-xhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-xhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-xxhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-xxhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/drawable-port-xxxhdpi/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/drawable-port-xxxhdpi/screen.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher_background.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cordovafolder/platforms/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4096 4 | @string/app_name 5 | @string/launcher_name 6 | 7 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/cordova/lib/getASPath.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | for /f "tokens=2*" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Android Studio" /v Path') do set "ASPath=%%~b" 3 | ECHO %ASPath% -------------------------------------------------------------------------------- /cordovafolder/platforms/android/cordova/loggingHelper.js: -------------------------------------------------------------------------------- 1 | var CordovaLogger = require('cordova-common').CordovaLogger; 2 | 3 | module.exports = { 4 | adjustLoggerLevel: function (opts) { 5 | if (opts instanceof Array) { 6 | opts.silent = opts.indexOf('--silent') !== -1; 7 | opts.verbose = opts.indexOf('--verbose') !== -1; 8 | } 9 | 10 | if (opts.silent) { 11 | CordovaLogger.get().setLevel('error'); 12 | } 13 | 14 | if (opts.verbose) { 15 | CordovaLogger.get().setLevel('verbose'); 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.daemon=true 2 | org.gradle.jvmargs=-Xmx2048m 3 | android.useDeprecatedNdk=true -------------------------------------------------------------------------------- /cordovafolder/platforms/android/platform_www/cordova_plugins.js: -------------------------------------------------------------------------------- 1 | cordova.define('cordova/plugin_list', function(require, exports, module) { 2 | module.exports = []; 3 | module.exports.metadata = { 4 | "cordova-plugin-whitelist": "1.3.3" 5 | }; 6 | }); -------------------------------------------------------------------------------- /cordovafolder/platforms/android/project.properties: -------------------------------------------------------------------------------- 1 | # This file was originally created by the Android Tools, but is now 2 | # used by cordova-android to manage the state of the various third party 3 | # libraries used in your application 4 | 5 | # This is the Library Module that contains the Cordova Library, this is not 6 | # required when using an AAR 7 | 8 | # This is the application project. This is only required for Android Studio Gradle projects 9 | 10 | # Project target. 11 | target=android-28 12 | android.library.reference.1=CordovaLib 13 | android.library.reference.2=app 14 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/settings.gradle: -------------------------------------------------------------------------------- 1 | // GENERATED FILE - DO NOT EDIT 2 | include ":" 3 | include ":CordovaLib" 4 | include ":app" 5 | -------------------------------------------------------------------------------- /cordovafolder/platforms/android/wrapper.gradle: -------------------------------------------------------------------------------- 1 | //This file is intentionally just a comment 2 | -------------------------------------------------------------------------------- /cordovafolder/plugins/android.json: -------------------------------------------------------------------------------- 1 | { 2 | "prepare_queue": { 3 | "installed": [], 4 | "uninstalled": [] 5 | }, 6 | "config_munge": { 7 | "files": {} 8 | }, 9 | "installed_plugins": { 10 | "cordova-plugin-whitelist": { 11 | "PACKAGE_NAME": "com.emanueleferonato.game4096" 12 | } 13 | }, 14 | "dependent_plugins": {} 15 | } 16 | -------------------------------------------------------------------------------- /cordovafolder/plugins/cordova-plugin-whitelist/NOTICE: -------------------------------------------------------------------------------- 1 | Apache Cordova 2 | Copyright 2012 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /cordovafolder/plugins/fetch.json: -------------------------------------------------------------------------------- 1 | { 2 | "cordova-plugin-whitelist": { 3 | "source": { 4 | "type": "registry", 5 | "id": "cordova-plugin-whitelist@1" 6 | }, 7 | "is_top_level": true, 8 | "variables": {} 9 | } 10 | } -------------------------------------------------------------------------------- /cordovafolder/www/05cf183c9f396342019b7b41a4cf2c5c.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/05cf183c9f396342019b7b41a4cf2c5c.mp3 -------------------------------------------------------------------------------- /cordovafolder/www/0bf06b0fd712e657f6bbda07936a3321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/0bf06b0fd712e657f6bbda07936a3321.png -------------------------------------------------------------------------------- /cordovafolder/www/144d504eff90ac62d04caf0a36b668f9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/144d504eff90ac62d04caf0a36b668f9.png -------------------------------------------------------------------------------- /cordovafolder/www/180f716f5635a1e58f8578b0ffd28f00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/180f716f5635a1e58f8578b0ffd28f00.png -------------------------------------------------------------------------------- /cordovafolder/www/21c1ad9d5230937941717a54f97aa467.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/21c1ad9d5230937941717a54f97aa467.png -------------------------------------------------------------------------------- /cordovafolder/www/2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/2cdbf576ab8c8dc655a870bc5b9a6ab4.mp3 -------------------------------------------------------------------------------- /cordovafolder/www/3b6fe7d0433f73d031c160a45f5de3fc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/3b6fe7d0433f73d031c160a45f5de3fc.png -------------------------------------------------------------------------------- /cordovafolder/www/4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/4a1a1c0e5ef7f50a7f7d1fb06e04bbe0.png -------------------------------------------------------------------------------- /cordovafolder/www/81c42d5e25fa9841a62aeee9f94e4c1c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/81c42d5e25fa9841a62aeee9f94e4c1c.png -------------------------------------------------------------------------------- /cordovafolder/www/b2893590601c5b128cff28d4d0a53f71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/b2893590601c5b128cff28d4d0a53f71.png -------------------------------------------------------------------------------- /cordovafolder/www/ccded6b9b4ea23c94c390e89cb25dc44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/ccded6b9b4ea23c94c390e89cb25dc44.png -------------------------------------------------------------------------------- /cordovafolder/www/d45b431900f759a42b185127b9ea034a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/d45b431900f759a42b185127b9ea034a.png -------------------------------------------------------------------------------- /cordovafolder/www/dd7ce68917a25e9883b1b2db6360e5e5.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/dd7ce68917a25e9883b1b2db6360e5e5.ogg -------------------------------------------------------------------------------- /cordovafolder/www/f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajbkr/HTML5-Cross-Platform-Game-Development-Using-Phaser-3/d939321031bc5c0dfa7be1359cb9b69c2163e131/cordovafolder/www/f6cd2fcbcafcf78f2a0e7fe8be1d3ff1.ogg -------------------------------------------------------------------------------- /cordovafolder/www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | 4096 16 | 17 | 18 | 19 |
20 | 21 | 22 | --------------------------------------------------------------------------------