The following are the requirements of the game:
- The game starts when the "ENTER" key is pressed.
- A "monster" will be displayed in random location of the canvas per set milliseconds.
- Hit - when the monster is clicked.
- Miss - when the monster is missed - only during click
- Monster turns yellow when hit.
- Monster turns red when hit.
- The game is over when there are already five (5) misses.
- The top score is recorded - this will reset on every page load, though.
index.html
<!DOCTYPE html> <html lang="en"> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> </head> <body> <canvas id="canvas" width="450" height="450"></canvas> <script src="pop.js" type="text/javascript"></script> </body> </html>
pop.js
$(document).ready(function() { // canvas var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var w = canvas.width; var h = canvas.height; // monster var locX; var locY; var monsterSize = 50; var monSpaceX; // space occupied by monster in X var monSpaceY; // space occupied by monster in Y // colors var bgColor = "white"; var strokeColor = "black"; var monsterColor = "blue"; var monsterHitColor; // other variables var text; // label on canvas var topScore = 0; var topText; var hitScore; // number of hits var isHit; var missLimit; var interval; var msec = 700; var play; // game is ongoing init(); // ** ----- FUNCTIONS ----- ** // initialize function init() { // initialize variables hitScore = 0; missScore = 0; missLimit = 5; text = "Click ENTER key to play."; topText = "Top Score: " + topScore; play = false; window.clearInterval(interval); // draw canvas paintCanvas(); } // draw canvas function paintCanvas() { // format canvas by setting BG color and border ctx.fillStyle = bgColor; ctx.fillRect(0, 0, w, h); ctx.strokeStyle = strokeColor; ctx.strokeRect(0, 0, w, h); setLabel(); } // draw monster function placeMonster() { // set score label text = "Score: " + hitScore + "; Chance left: " + missLimit; setLocation(); // random location paintCanvas(); // draw canvas to cover past monsters // monster ctx.fillStyle = monsterColor; ctx.fillRect(locX, locY, monsterSize, monsterSize); } // paint monster to indicate it is hit or not function paintMonsterHit() { ctx.fillStyle = monsterHitColor; ctx.fillRect(locX, locY, monsterSize, monsterSize); } // place label on canvas function setLabel() { // set top score label above ctx.fillStyle = strokeColor; ctx.fillText(topText, 5, 10); // set label below ctx.fillStyle = strokeColor; ctx.fillText(text, 5, h - 5); } // randomly generate location to where monster will be placed function setLocation() { locX = Math.floor((Math.random() * (w - monsterSize)) + 0); locY = Math.floor((Math.random() * (h -monsterSize)) + 0); getMonsterSpace(); } // get the coordinates of the space occupied by monster function getMonsterSpace() { monSpaceX = locX + monsterSize; monSpaceY = locY + monsterSize; } // check if monster is hit or missed function isMonsterHit() { if(isHit) hitScore++; else missLimit--; } // check if game is over or not function checkGameOver() { if(missLimit == 0) { alert('Game Over. Score: ' + hitScore); if(hitScore > topScore) { alert('Congratulations! New Top Score!'); topScore = hitScore; } init(); } } // ** ----- EVENTS ----- ** $(document).click(function() { if(play) { if(event.x >= locX && event.x <= monSpaceX && event.y >= locY && event.y <= monSpaceY) { monsterHitColor = "yellow"; isHit = true; } else { monsterHitColor = "red"; isHit = false; } paintMonsterHit(); isMonsterHit(); checkGameOver(); // check if game is over } }); $(document).keydown(function(e) { if(!play) { var key = e.which; if(key == '13') { interval = window.setInterval(placeMonster, msec); play = true; } } }); });
Improvements in the future:
- A miss should also be counted when user fails to do a click every time a monster appears.
- Use image for monster.
NOTE: Only works for Google Chrome. :/
No comments:
Post a Comment