From b6e052ddd1a5cc2f19278138427c9e933290873a Mon Sep 17 00:00:00 2001 From: Zainab Baker <119340513@umail.ucc.ie> Date: Mon, 5 Apr 2021 13:50:25 +0100 Subject: [PATCH 1/3] bullet logic --- Javascript/practice.js | 256 ------------------------------------ Javascript/sprites.js | 285 +++++++++++++++++++++++++---------------- html/game.html | 6 + styles/Pearl.png | Bin 0 -> 1245 bytes styles/sprites.css | 3 +- 5 files changed, 180 insertions(+), 370 deletions(-) delete mode 100644 Javascript/practice.js create mode 100644 styles/Pearl.png diff --git a/Javascript/practice.js b/Javascript/practice.js deleted file mode 100644 index e40eb2e..0000000 --- a/Javascript/practice.js +++ /dev/null @@ -1,256 +0,0 @@ -let canvas; -let context; - -let request_id; -let fpsInterval = 1000 / 30; // The denominator is frames per second. -let now; -let then = Date.now(); - -let backgroundImage = new Image(); - -let tilesPerRow = 6; -let tileSize = 16; - -let background = [ - [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64], - [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,20,20,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61], - [60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60], - [59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59], - [58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61], - [60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60], - [ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], - [59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59], - [58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61], - [0,0,0,0,0,0,0,0,30,31,32,33,34,35,22,21,20,19,18,22,21,20,19,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,36,37,38,39,40,41,28,27,26,25,24,28,27,26,25,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] -] - -let player = { - x : 0, - y : 0, - width : 32, - height : 48, - frameX : 0, - frameY : 0, - xChange : 0, - yChange : 0, -}; - -let enemy = { - x : 0, - y : 0, - width : 32, - height : 48, - frameX : 0, - frameY : 0, - xChange : 3, - yChange : 0, -} - -let playerImage = new Image(); -let enemyImage = new Image(); - -let floor; - -let moveLeft = false; -let moveRight = false; -let moveUp = false; -let moveDown = false; - -document.addEventListener("DOMContentLoaded", init, false) - -function init() { - canvas = document.querySelector("canvas"); - context = canvas.getContext("2d"); - - backgroundImage.src = "../styles/dungeon.png"; - playerImage.src = "../styles/girl.png"; - enemyImage.src = "../styles/ghost.png"; - - floor = canvas.height - 27; - player.x = canvas.width / 2; - player.y = player.height; - enemy.x = canvas.width / 2; - enemy.y = floor - player.height; - - window.addEventListener("keydown",activate,false); - window.addEventListener("keyup",deactivate,false); - - draw(); -} - -function draw() { - request_id = window.requestAnimationFrame(draw); - let now = Date.now(); - let elapsed = now - then; - if (elapsed <= fpsInterval) { - return; - } - then = now - (elapsed % fpsInterval); - - // Draw background on canvas. - context.clearRect(0, 0, canvas.width, canvas.height); - context.fillStyle = "#87cefa"; // Light sky blue. - context.fillRect(0, 0, canvas.width, canvas.height); - for (let r = 0; r < 40; r += 1) { - for (let c = 0; c < 64; c += 1) { - let tile = background[r][c]; - if (tile >= 0) { - let tileRow = Math.floor(tile / tilesPerRow); - let tileCol = Math.floor(tile % tilesPerRow); - context.drawImage(backgroundImage, - tileCol * tileSize, tileRow * tileSize, tileSize, tileSize, - c * tileSize, r * tileSize, tileSize, tileSize); - } - } - } - - // Draw player. - context.drawImage(playerImage, - player.width * player.frameX, player.height * player.frameY, player.width, player.height, - player.x, player.y, player.width, player.height); - if ((moveLeft || moveRight) && ! (moveLeft && moveRight)) { - player.frameX = (player.frameX + 1) % 4; - } - if ((moveUp || moveDown) && ! (moveUp && moveDown )) { - player.frameX = (player.frameX + 1) % 4; - } - - - // Draw other objects. - context.drawImage(enemyImage, - enemy.width * enemy.frameX, enemy.height * enemy.frameY, enemy.width, enemy.height, - enemy.x, enemy.y, enemy.width, enemy.height); - - - // Handle key presses. - if (moveLeft) { - player.xChange = player.xChange - 0.5; - player.frameY = 1; - } - if (moveRight) { - player.xChange = player.xChange + 0.5; - player.frameY = 2; - } - if (moveUp) { - player.yChange = player.yChange - 0.5; - player.frameY = 3; - - } - if (moveDown) { - player.yChange = player.yChange + 0.5; - player.frameY = 0; - } - - - // Update the player. - player.x = player.x + player.xChange; - player.y = player.y + player.yChange; - - //Update enemy - enemy.x = enemy.x + enemy.xChange; - enemy.y = enemy.y + enemy.yChange; - - if (enemy) { - if (enemy.frameY === 0) { - enemy.frameY = 1; - } - if(enemy.x + enemy.xChange > canvas.width) { - enemy.xChange = -enemy.xChange; - enemy.frameY = 2; - } - if (enemy.x + enemy.xChange < 0) { - enemy.xChange= -enemy.xChange; - enemy.frameY = 1; - } - - - } - - - - // Update the other objects. - - - // // Physics. - // player.yChange = player.yChange + 0.1; // Gravity! - player.xChange = player.xChange * 0.9; // Friction! - player.yChange = player.yChange * 0.9; // Friction! - - // // Collisions. - // if (player.y + player.height) { - // player.y = 10; - // player.yChange = player.y + player.yChange; - // } - - - - // // Going off left or right. - if (player.x + player.width < 0) { - player.x = canvas.width; - } else if (player.x > canvas.width) { - player.x = -player.width; - } - - // // Going off up or down. - if (player.y + player.height < 0) { - player.y = canvas.height; - } else if (player.y > canvas.height) { - player.y = -player.height; - } -} - -function activate(event) { - let key = event.key; - if (key === "ArrowLeft") { - moveLeft = true; - } else if (key === "ArrowRight") { - moveRight = true; - } else if (key === "ArrowUp") { - moveUp = true; - } else if (key === "ArrowDown") { - moveDown = true; - } -} - -function deactivate(event) { - let key = event.key; - if (key === "ArrowLeft") { - moveLeft = false; - } else if (key === "ArrowRight") { - moveRight = false; - } else if (key === "ArrowUp") { - moveUp = false; - } else if (key === "ArrowDown") { - moveDown = false; - } -} diff --git a/Javascript/sprites.js b/Javascript/sprites.js index b8e0f66..7edaf77 100644 --- a/Javascript/sprites.js +++ b/Javascript/sprites.js @@ -14,74 +14,87 @@ let tileSize = 16; let background = [ - [22,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,30,31,32,33,34,35,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21], - [28,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,36,37,38,39,40,41,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,20,20,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61], - [60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60], - [59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59], - [58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61], - [60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60], - [ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], - [59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59], - [58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56], - [55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55], - [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63], - [62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62], - [ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], - [22,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,30,31,32,33,34,35,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21,20,19,18,22,21], - [28,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,36,37,38,39,40,41,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27,26,25,24,28,27], + [22, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 30, 31, 32, 33, 34, 35, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21], + [28, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 36, 37, 38, 39, 40, 41, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27], + [62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62], + [61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 20, 20, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61], + [60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60], + [59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59], + [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63], + [62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62], + [61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61], + [60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60], + [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], + [59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59], + [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56], + [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + [63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63], + [62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62], + [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], + [22, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 30, 31, 32, 33, 34, 35, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21], + [28, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 36, 37, 38, 39, 40, 41, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27], ] + + let player = { - x : 0, - y : 0, - width : 32, - height : 48, - frameX : 0, - frameY : 0, - xChange : 0, - yChange : 0, + x: 0, + y: 0, + width: 32, + height: 48, + frameX: 0, + frameY: 0, + xChange: 0, + yChange: 0, }; let enemy = { - x : 0, - y : 0, - width : 32, - height : 48, - frameX : 0, - frameY : 0, - xChange : 3, - yChange : 0, + x: 0, + y: 0, + width: 32, + height: 48, + frameX: 0, + frameY: 0, + xChange: 3, + yChange: 0, } -let bullet; +let bullet = { + x: 0, + y: 0, + width: 32, + height: 48, + frameX: 0, + frameY: 0, + xChange: 0, + yChange: 0, +}; + let playerImage = new Image(); let enemyImage = new Image(); +let bulletImage = new Image(); let floor; @@ -101,15 +114,18 @@ function init() { backgroundImage.src = "../styles/dungeon.png"; playerImage.src = "../styles/girl.png"; enemyImage.src = "../styles/ghost.png"; + bulletImage.src = "../styles/Pearl.png"; floor = canvas.height - 27; player.x = canvas.width / 2; player.y = player.height; enemy.x = canvas.width / 2; enemy.y = floor - player.height; + + + window.addEventListener("keydown", activate, false); + window.addEventListener("keyup", deactivate, false); - window.addEventListener("keydown",activate,false); - window.addEventListener("keyup",deactivate,false); draw(); } @@ -144,25 +160,26 @@ function draw() { context.drawImage(playerImage, player.width * player.frameX, player.height * player.frameY, player.width, player.height, player.x, player.y, player.width, player.height); - if ((moveLeft || moveRight) && ! (moveLeft && moveRight)) { + + if ((moveLeft || moveRight) && !(moveLeft && moveRight)) { player.frameX = (player.frameX + 1) % 4; } - if ((moveUp || moveDown) && ! (moveUp && moveDown )) { + if ((moveUp || moveDown) && !(moveUp && moveDown)) { player.frameX = (player.frameX + 1) % 4; } + // draw bullet + if (bullet_on_screen(bullet)) { + context.drawImage(bulletImage, + bullet.width * bullet.frameX, bullet.height * bullet.frameY, bullet.width, bullet.height, + bullet.x, bullet.y, bullet.width, bullet.height); - // Drawing bullet - // having severe issues - - - + } - // Draw other objects. + // Draw enemy context.drawImage(enemyImage, enemy.width * enemy.frameX, enemy.height * enemy.frameY, enemy.width, enemy.height, enemy.x, enemy.y, enemy.width, enemy.height); - // Handle key presses. if (moveLeft) { player.xChange = player.xChange - 0.5; @@ -172,21 +189,44 @@ function draw() { player.xChange = player.xChange + 0.5; player.frameY = 2; } - if (moveUp) { + if ((moveUp) && !(moveUp && moveRight) && !(moveUp && moveLeft)) { player.yChange = player.yChange - 0.5; player.frameY = 3; - + } - if (moveDown) { + if ((moveDown) && !(moveDown && moveRight) && !(moveDown && moveLeft)) { player.yChange = player.yChange + 0.5; player.frameY = 0; } if (spaceBar) { + if (!bullet_on_screen(bullet)) { + bullet.y = player.y; + bullet.x = player.x; + + if (player.frameY === 0) { + bullet.yChange = 8; + bullet.xChange = 0 + } + if (player.frameY === 1) { + bullet.xChange = -8; + bullet.yChange = 0 + } + if (player.frameY === 2) { + bullet.xChange = 8; + bullet.yChange = 0 + } + if (player.frameY === 3) { + bullet.yChange = -8; + bullet.xChange = 0 + } + + } + } - + // Update the player. @@ -197,68 +237,66 @@ function draw() { enemy.x = enemy.x + enemy.xChange; enemy.y = enemy.y + enemy.yChange; + //Update bullet + bullet.x = bullet.x + bullet.xChange; + bullet.y = bullet.y + bullet.yChange; + + + //enemy frames if (enemy) { if (enemy.frameY === 0) { enemy.frameY = 1; } - if(enemy.x + enemy.xChange > canvas.width) { + if (enemy.x + enemy.xChange > canvas.width) { enemy.xChange = -enemy.xChange; enemy.frameY = 2; } - if (enemy.x + enemy.xChange < 0) { - enemy.xChange= -enemy.xChange; - enemy.frameY = 1; + if (enemy.x + enemy.xChange < 0) { + enemy.xChange = -enemy.xChange; + enemy.frameY = 1; } - - } + } - // Update the other objects. - - - // // Physics. - // player.yChange = player.yChange + 0.1; // Gravity! + // Physics. player.xChange = player.xChange * 0.9; // Friction! player.yChange = player.yChange * 0.9; // Friction! - // // Collisions. - // if (player.y + player.height > floor) { - // player.in_air = false; - // player.y = floor - player.height; - // player.yChange = 0; - // } - // // Going off left or right. + // Going off left or right. if (player.x + player.width < 0) { player.x = canvas.width; } else if (player.x > canvas.width) { player.x = -player.width; } - // // Going off up or down. + // Going off up or down. if (player.y + player.height < 0) { player.y = canvas.height; } else if (player.y > canvas.height) { player.y = -player.height; } - - if (player.x + player.size >= canvas.width){ - stop("You win"); - return; - } + + // if the bullet collides with the enemy + // moved enemy to area off canvas + if (enemy_collides(bullet)) { + context.drawImage(enemyImage, + enemy.x = 1050, enemy.y = 1050); + } if (player_collides(enemy)) { - stop("You lose"); - return; + stop("You lose"); + return; } - } + + function activate(event) { let key = event.key; if (key === "ArrowLeft") { @@ -269,9 +307,9 @@ function activate(event) { moveUp = true; } else if (key === "ArrowDown") { moveDown = true; - } else if (key === "SpaceBar") { + } else if (key === " ") { spaceBar = true; -} + } } function deactivate(event) { @@ -284,23 +322,46 @@ function deactivate(event) { moveUp = false; } else if (key === "ArrowDown") { moveDown = false; - } else if (key === "SpaceBar") { + } else if (key === " ") { spaceBar = false; } - + +} + + +// if bullet is on the screen +function bullet_on_screen(bullet) { + return ((bullet.x > 0 && bullet.x < canvas.width) && (bullet.y > 0 && bullet.y < canvas.height)) + +} + +// enemy colliding with bullet +function enemy_collides(bullet) { + if (enemy.x + enemy.width < bullet.x || + bullet.x + bullet.width < enemy.x || + enemy.y > bullet.height + bullet.y || + bullet.y > enemy.height + enemy.y) { + return false; + } else { + return true; + } } +// enemy and the player collide function player_collides(enemy) { - if (player.x + player.size < enemy.x || - enemy.x + enemy.size < player.x || - player.y > enemy.size + enemy.y || - enemy.y > player.size + player.y) { - return false; - } else { - return true; - } + if (player.x + player.width < enemy.x || + enemy.x + enemy.width < player.x || + player.y > enemy.height + enemy.y || + enemy.y > player.height + player.y) { + return false; + } else { + return true; + } } + + +// stop the game function stop(outcome) { window.removeEventListener("keydown", activate, false); window.removeEventListener("keyup", activate, false); @@ -308,8 +369,6 @@ function stop(outcome) { let outcome_element = document.querySelector("#outcome"); outcome_element.innerHTML = outcome; - } - diff --git a/html/game.html b/html/game.html index 94d1f8f..48fd17a 100644 --- a/html/game.html +++ b/html/game.html @@ -9,4 +9,10 @@ + +

+ +

+ + \ No newline at end of file diff --git a/styles/Pearl.png b/styles/Pearl.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a104d120fb6d8a1ebe8672c601fbd06b87c68 GIT binary patch literal 1245 zcmV<31S0#1P)*KfAde*ZR9GCyQn3XS7 zbv<^olvep$rC<(M@#~4UGU(3do+2~@st`a0MJYLP&8>I*6YQukYbwpifWEx_QRWsF znP1$%ri-`GG%Xmr?8Sl+zW(SVa-1;fmbm7&JJ zP`54iF90lxAVmO#<=V^vRs=CD(OI20) z;Bn4ktfgoHRg_H5J(_#w78m&H!*{spo*kGKZLnqroH1By&>|ESO3JuNh2b|eCvu8d zzeH#UIAd|4!FfBi^8kVxD5VFcXC&pk{t_6gSmy}AQ*r_wEiWAbm0T3xT2fl)Z6Xprt6JtVk+UG>DPEpMmqbQD`0kvRFplOFV zuc#`92{~p`AJ-31QX-AVcwgb`z+i4jEsDW`ft-3mXt2JGpC$&7R_LRb~rb^35`c`#yXE0WzY`r-eax9`sJQ?Qy(gk z7$d5}m%HBM&K<7;tD0c;Jo7U!52l6$Yel+#Y%NL|;2%2T%i7Xr>0j5UY|7)WV49S4gGeDT3& zY<=zhRWXhQ06_1%?h@KTgSD2EPCgOq9LC6WD^f_3IJEB&F(pKVCtu&arvGCFfPc*M z`)|06$~v+Zv Date: Mon, 5 Apr 2021 15:43:46 +0100 Subject: [PATCH 2/3] cleaned it up --- html/game.html | 1 - 1 file changed, 1 deletion(-) diff --git a/html/game.html b/html/game.html index 48fd17a..f5db133 100644 --- a/html/game.html +++ b/html/game.html @@ -14,5 +14,4 @@

- \ No newline at end of file From af8168546040cea50852764b2d223365e52465fc Mon Sep 17 00:00:00 2001 From: Zainab Baker <119340513@umail.ucc.ie> Date: Mon, 5 Apr 2021 15:44:36 +0100 Subject: [PATCH 3/3] changed bullet function, added isDead to object --- Javascript/sprites.js | 80 ++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 55 deletions(-) diff --git a/Javascript/sprites.js b/Javascript/sprites.js index 7edaf77..71b2ca7 100644 --- a/Javascript/sprites.js +++ b/Javascript/sprites.js @@ -11,8 +11,6 @@ let backgroundImage = new Image(); let tilesPerRow = 6; let tileSize = 16; - - let background = [ [22, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 30, 31, 32, 33, 34, 35, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21, 20, 19, 18, 22, 21], [28, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 36, 37, 38, 39, 40, 41, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27], @@ -56,8 +54,6 @@ let background = [ [28, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 36, 37, 38, 39, 40, 41, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27, 26, 25, 24, 28, 27], ] - - let player = { x: 0, y: 0, @@ -76,9 +72,10 @@ let enemy = { height: 48, frameX: 0, frameY: 0, - xChange: 3, + xChange: 0, yChange: 0, -} + isDead: false, +}; let bullet = { x: 0, @@ -96,7 +93,6 @@ let playerImage = new Image(); let enemyImage = new Image(); let bulletImage = new Image(); - let floor; let moveLeft = false; @@ -121,12 +117,11 @@ function init() { player.y = player.height; enemy.x = canvas.width / 2; enemy.y = floor - player.height; - + window.addEventListener("keydown", activate, false); window.addEventListener("keyup", deactivate, false); - draw(); } @@ -160,7 +155,7 @@ function draw() { context.drawImage(playerImage, player.width * player.frameX, player.height * player.frameY, player.width, player.height, player.x, player.y, player.width, player.height); - + if ((moveLeft || moveRight) && !(moveLeft && moveRight)) { player.frameX = (player.frameX + 1) % 4; } @@ -172,13 +167,17 @@ function draw() { context.drawImage(bulletImage, bullet.width * bullet.frameX, bullet.height * bullet.frameY, bullet.width, bullet.height, bullet.x, bullet.y, bullet.width, bullet.height); - } - // Draw enemy - context.drawImage(enemyImage, - enemy.width * enemy.frameX, enemy.height * enemy.frameY, enemy.width, enemy.height, - enemy.x, enemy.y, enemy.width, enemy.height); + if (enemy_collides(bullet)) { + enemy.isDead = true; + } + + if (!enemy.isDead) { + context.drawImage(enemyImage, + enemy.width * enemy.frameX, enemy.height * enemy.frameY, enemy.width, enemy.height, + enemy.x, enemy.y, enemy.width, enemy.height); + } // Handle key presses. if (moveLeft) { @@ -192,13 +191,11 @@ function draw() { if ((moveUp) && !(moveUp && moveRight) && !(moveUp && moveLeft)) { player.yChange = player.yChange - 0.5; player.frameY = 3; - } if ((moveDown) && !(moveDown && moveRight) && !(moveDown && moveLeft)) { player.yChange = player.yChange + 0.5; player.frameY = 0; } - if (spaceBar) { if (!bullet_on_screen(bullet)) { bullet.y = player.y; @@ -220,15 +217,9 @@ function draw() { bullet.yChange = -8; bullet.xChange = 0 } - } - - } - - - // Update the player. player.x = player.x + player.xChange; player.y = player.y + player.yChange; @@ -241,7 +232,6 @@ function draw() { bullet.x = bullet.x + bullet.xChange; bullet.y = bullet.y + bullet.yChange; - //enemy frames if (enemy) { if (enemy.frameY === 0) { @@ -255,16 +245,12 @@ function draw() { enemy.xChange = -enemy.xChange; enemy.frameY = 1; } - - } - // Physics. player.xChange = player.xChange * 0.9; // Friction! player.yChange = player.yChange * 0.9; // Friction! - // Going off left or right. if (player.x + player.width < 0) { player.x = canvas.width; @@ -279,24 +265,12 @@ function draw() { player.y = -player.height; } - - // if the bullet collides with the enemy - // moved enemy to area off canvas - if (enemy_collides(bullet)) { - context.drawImage(enemyImage, - enemy.x = 1050, enemy.y = 1050); - } - if (player_collides(enemy)) { stop("You lose"); - return; - + return; } } - - - function activate(event) { let key = event.key; if (key === "ArrowLeft") { @@ -325,10 +299,8 @@ function deactivate(event) { } else if (key === " ") { spaceBar = false; } - } - // if bullet is on the screen function bullet_on_screen(bullet) { return ((bullet.x > 0 && bullet.x < canvas.width) && (bullet.y > 0 && bullet.y < canvas.height)) @@ -337,14 +309,16 @@ function bullet_on_screen(bullet) { // enemy colliding with bullet function enemy_collides(bullet) { - if (enemy.x + enemy.width < bullet.x || - bullet.x + bullet.width < enemy.x || - enemy.y > bullet.height + bullet.y || - bullet.y > enemy.height + enemy.y) { - return false; - } else { - return true; - } + let bulletStartX = bullet.x; + let bulletEndX = bullet.x + bullet.width; + let enemyStartX = enemy.x; + let enemyEndX = enemy.x + enemy.width; + let bulletStartY = bullet.y; + let bulletEndY = bullet.y + bullet.height; + let enemyStartY = enemy.y; + let enemyEndY = enemy.y + enemy.height; + return (((bulletStartX >= enemyStartX) || (bulletEndX >= enemyStartX)) && ((bulletEndX <= enemyEndX) || (bulletStartX <= enemyEndX))) && + (((bulletStartY >= enemyStartY) || (bulletEndY >= enemyStartY)) && ((bulletEndY <= enemyEndY) || (bulletStartY <= enemyEndY)) ) } // enemy and the player collide @@ -359,8 +333,6 @@ function player_collides(enemy) { } } - - // stop the game function stop(outcome) { window.removeEventListener("keydown", activate, false); @@ -370,5 +342,3 @@ function stop(outcome) { outcome_element.innerHTML = outcome; } - -