From bf0621881542e5030eedceb86c62df6b8dd8de73 Mon Sep 17 00:00:00 2001 From: Nathan DECHER Date: Mon, 6 Apr 2020 14:40:48 +0200 Subject: [PATCH] added super fruit (closes #8) --- Makefile | 16 +++++++++++++++- assets/peach.png | Bin 0 -> 23644 bytes levels/arcade-arcade.json | 5 ++++- src/js/assets.js | 22 ++++++++++++---------- src/js/snek.js | 38 +++++++++++++++++++++++++++++++++----- 5 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 assets/peach.png diff --git a/Makefile b/Makefile index 6a8c669..8f8dc79 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ .PHONY: all clean FIRE_ANIM = $(foreach angle, $(shell seq 0 6 359), build/fire$(angle).png) +PEACH_DECAY_ANIM = $(foreach percent, $(shell seq 100 -1 0), build/peach-decay$(percent).png) +PEACH_RAINBOW_ANIM = $(foreach percent, $(shell seq 100 2 299), build/peach-rainbow$(percent).png) IMAGES = $(foreach name, apple wall, public/assets/$(name)32.png) TILESETS = $(foreach name, hole, public/assets/$(name)-ts.png) -ANIMATIONS = $(foreach name, fire, public/assets/$(name)-anim.png) +ANIMATIONS = $(foreach name, fire peach-decay peach-rainbow, public/assets/$(name)-anim.png) JSON = $(foreach name, snake levelList config metaConfig, public/assets/$(name).json) ICON = public/assets/icon32.png public/assets/icon256.png public/favicon.ico CSS = public/css/snek.css @@ -44,6 +46,18 @@ public/assets/fire-anim.png: $(FIRE_ANIM) build/fire%.png: assets/fire.png convert $^ -distort ScaleRotateTranslate $(shell echo $@ | sed 's/[^0-9]*//g') -resize 32x $@ +public/assets/peach-decay-anim.png: $(PEACH_DECAY_ANIM) + convert $^ -append $@ + +build/peach-decay%.png: assets/peach.png + convert $^ -modulate 100,$(shell echo $@ | sed 's/[^0-9]*//g') -resize 32x $@ + +public/assets/peach-rainbow-anim.png: $(PEACH_RAINBOW_ANIM) + convert $^ -append $@ + +build/peach-rainbow%.png: assets/peach.png + convert $^ -modulate 100,100,$(shell echo $@ | sed 's/[^0-9]*//g') -resize 32x $@ + public/assets/%.json: assets/%.json cp $^ $@ diff --git a/assets/peach.png b/assets/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..970e31f0a3b4cd9c954cb0f6fc74674bc0615e6b GIT binary patch literal 23644 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 A+yDRo literal 0 HcmV?d00001 diff --git a/levels/arcade-arcade.json b/levels/arcade-arcade.json index 26a509e..29319b1 100644 --- a/levels/arcade-arcade.json +++ b/levels/arcade-arcade.json @@ -8,5 +8,8 @@ [16, 12], [16, 11], [16, 10] - ] + ], + "rules": { + "superFruitGrow": true + } } diff --git a/src/js/assets.js b/src/js/assets.js index 3c06c5d..211fa74 100644 --- a/src/js/assets.js +++ b/src/js/assets.js @@ -1,19 +1,21 @@ const ProgressBar=require('progress'); const assetSpecs=[ - { name: 'fruit', filename: 'apple32.png', type: 'image' }, - { name: 'wall', filename: 'wall32.png', type: 'image' }, - { name: 'hole', filename: 'hole-ts.png', type: 'image' }, - { name: 'fire', filename: 'fire-anim.png', type: 'image' }, - { name: 'snake', filename: 'snake.json', type: 'json' }, - { name: 'levelList', filename: 'levelList.json', type: 'json' }, - { name: 'config', filename: 'config.json', type: 'json' }, - { name: 'metaConfig', filename: 'metaConfig.json', type: 'json' } + { name: 'fruit', filename: 'apple32.png', type: 'image' }, + { name: 'superFruit', filename: 'peach-rainbow-anim.png', type: 'image' }, + { name: 'wall', filename: 'wall32.png', type: 'image' }, + { name: 'hole', filename: 'hole-ts.png', type: 'image' }, + { name: 'fire', filename: 'fire-anim.png', type: 'image' }, + { name: 'snake', filename: 'snake.json', type: 'json' }, + { name: 'levelList', filename: 'levelList.json', type: 'json' }, + { name: 'config', filename: 'config.json', type: 'json' }, + { name: 'metaConfig', filename: 'metaConfig.json', type: 'json' } ]; const tasks=[ - { from: 'hole', type: 'tileset', tiles: ['base', 'ul', 'dr', 'dl', 'ur', 'l', 'r', 'd', 'u'], steps: 3 }, - { from: 'fire', type: 'animation', steps: 6 } + { from: 'hole', type: 'tileset', steps: 3, tiles: ['base', 'ul', 'dr', 'dl', 'ur', 'l', 'r', 'd', 'u'] }, + { from: 'fire', type: 'animation', steps: 6 }, + { from: 'superFruit', type: 'animation', steps: 5 } ]; const cvs=document.createElement('canvas'); diff --git a/src/js/snek.js b/src/js/snek.js index ae94181..792b537 100644 --- a/src/js/snek.js +++ b/src/js/snek.js @@ -1,4 +1,4 @@ -const [EMPTY, FOOD, WALL, FIRE, HOLE, HOLE_S, SNAKE]=Array(7).keys(); +const [EMPTY, FOOD, SUPER_FOOD, WALL, FIRE, HOLE, HOLE_S, SNAKE]=Array(7).keys(); class SnekGame { constructor(settings, canvas, rules) { @@ -17,6 +17,7 @@ class SnekGame { switch(settings.world[y][x]) { case ' ': return EMPTY; case 'f': return FOOD; + case 'F': return SUPER_FOOD; case 'w': return WALL; case 'o': return HOLE; case 'i': return FIRE; @@ -60,6 +61,9 @@ class SnekGame { // add the food settings.food.forEach(([x, y]) => this.world[x][y]=FOOD); this.fruits=[...settings.food]; + + // add the super food + if(settings.superFood) settings.superFood.forEach(([x, y]) => this.world[x][y]=SUPER_FOOD); } // add the snake to the world @@ -88,6 +92,7 @@ class SnekGame { // load the custom rules this.rules=Object.assign({ fruitRegrow: true, + superFruitGrow: false, speedIncrease: true, worldWrap: true, winCondition: 'none', @@ -145,6 +150,7 @@ class SnekGame { const wall=assets.get('wall'); const hole=assets.get('hole'); const fire=assets.get('fire'); + const superFruit=assets.get('superFruit'); const putTile=(x, y, tile) => this.ctx.drawImage( tile, offsetX+cellSize*x, @@ -190,6 +196,10 @@ class SnekGame { // technically, this works for all shapes // however, the tileset only handles convex shapes } + + case SUPER_FOOD: + putTileAnim(x, y, superFruit); + break; } } } @@ -362,7 +372,12 @@ class SnekGame { ) return this.die(); break; - // you eat, you don't die + // you eat, you get a massive score boost + case SUPER_FOOD: + this.score+=10; + break; + + // you eat, you grow case FOOD: // re-grow the snake this.snake.push(tail); @@ -377,9 +392,9 @@ class SnekGame { // increase score this.score++; - // custom rules - if(this.rules.fruitRegrow) { - const emptyCells=this.world + // list empty cells + const getEmptyCells=() => + this.world .map( (l, x) => l .map( @@ -388,11 +403,24 @@ class SnekGame { a => a ) ).flat(); + + // custom rules + if(this.rules.fruitRegrow) { + const emptyCells=getEmptyCells(); + const cell=emptyCells[Math.floor(Math.random()*emptyCells.length)]; this.fruits.push(cell); this.world[cell[0]][cell[1]]=FOOD; } + if(this.rules.superFruitGrow) { + if(Math.random()<.1) { // 10% chance + const emptyCells=getEmptyCells(); + const cell=emptyCells[Math.floor(Math.random()*emptyCells.length)]; + this.world[cell[0]][cell[1]]=SUPER_FOOD; + } + } + if(this.rules.speedIncrease) { this.delay*=this.rules.speedMultiplier; if(this.delay