| @ -0,0 +1,393 @@ | |||
| <script src="/socket.io/socket.io.js"></script> | |||
| <script> | |||
| window.addEventListener("keydown", function(e) | |||
| { | |||
| // space and arrow keys | |||
| if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) | |||
| { | |||
| e.preventDefault(); | |||
| } | |||
| }, false); | |||
| window.onload = function() | |||
| { | |||
| var canvas = document.getElementById("canvasZP"); | |||
| var c = canvas.getContext('2d'); | |||
| c.fillStyle= "black"; | |||
| c.fillRect(0,0,canvas.width,canvas.height); | |||
| }; | |||
| function playZP() | |||
| { | |||
| var animate = window.requestAnimationFrame || window.webkitRequestAnimationFrame || | |||
| window.mozRequestAnimationFrame || function (callback) | |||
| { | |||
| window.setTimeout(callback, 1000 / 60) | |||
| }; | |||
| var canvas = document.getElementById("canvasZP"); | |||
| var width = 700; | |||
| var height = 700; | |||
| canvas.style.textAlign = 'center'; | |||
| var context = canvas.getContext('2d'); | |||
| var keysDown = {}; | |||
| var score = 0; | |||
| var dead = false; | |||
| //player | |||
| var Player = function(x,y) | |||
| { | |||
| this.x = x; | |||
| this.y = y; | |||
| this.width = 25; | |||
| this.height = 25; | |||
| this.speed = 3; | |||
| this.facing = 40; | |||
| this.updateDirection = function(key) | |||
| { | |||
| facing = key; | |||
| } | |||
| this.render = function() | |||
| { | |||
| context.fillStyle = "rgba(0, 45, 160, 1)"; //green | |||
| context.fillRect(this.x, this.y, this.width,this.height); | |||
| } | |||
| this.move = function() | |||
| { | |||
| for (var key in keysDown) | |||
| { | |||
| var value = Number(key); | |||
| if (value == 37) //left | |||
| { | |||
| this.x = this.x - this.speed; | |||
| } | |||
| else if (value == 39) //right | |||
| { | |||
| this.x = this.x + this.speed | |||
| } | |||
| else if(value == 38) //up | |||
| { | |||
| this.y = this.y - this.speed | |||
| } | |||
| else if(value == 40) //down | |||
| { | |||
| this.y = this.y + this.speed | |||
| } | |||
| else if(value == 32) | |||
| { | |||
| var added = false; | |||
| for(i = 0; i< bullets.length; i++) | |||
| { | |||
| if(bullets[i] == -1) | |||
| { | |||
| bullets[i] = new Bullet(); | |||
| added = true; | |||
| break; | |||
| } | |||
| } | |||
| if(added == false) | |||
| { | |||
| bullets.push(new Bullet()); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| var p = new Player(350, 350); | |||
| //bullet | |||
| var Bullet = function() | |||
| { | |||
| this.x = p.x; | |||
| this.y = p.y; | |||
| this.width = 10; | |||
| this.height = 10; | |||
| this.speed = 4; | |||
| this.facing = p.facing; | |||
| this.move = function() | |||
| { | |||
| if (this.facing == 37) //left | |||
| { | |||
| this.x = this.x - this.speed; | |||
| } | |||
| else if (this.facing == 39) //right | |||
| { | |||
| this.x = this.x + this.speed | |||
| } | |||
| else if(this.facing == 38) //up | |||
| { | |||
| this.y = this.y - this.speed | |||
| } | |||
| else if(this.facing == 40) //down | |||
| { | |||
| this.y = this.y + this.speed | |||
| } | |||
| } | |||
| this.render = function() | |||
| { | |||
| context.fillStyle = "rgba(255, 0, 199, 1)"; //green | |||
| context.fillRect(this.x, this.y, this.width,this.height); | |||
| } | |||
| } | |||
| var bullets = []; | |||
| function getRandomIntInclusive(min, max) { | |||
| min = Math.ceil(min); | |||
| max = Math.floor(max); | |||
| return Math.floor(Math.random() * (max - min + 1)) + min; | |||
| } | |||
| //zombie | |||
| var Zombie = function(x,y) | |||
| { | |||
| this.x = x; | |||
| this.y = y; | |||
| this.width = 25; | |||
| this.height = 25; | |||
| this.speed = 3; | |||
| var side = getRandomIntInclusive(0,3); | |||
| var mid = getRandomIntInclusive(0,700); | |||
| if(side === 1) | |||
| { | |||
| this.x = mid; | |||
| this.y = 0; | |||
| } | |||
| else if(side === 2) | |||
| { | |||
| this.x = 700; | |||
| this.y = mid; | |||
| } | |||
| else if(side === 3) | |||
| { | |||
| this.y = 700; | |||
| this.x = mid; | |||
| } | |||
| else | |||
| { | |||
| this.x = 0; | |||
| this.y = mid; | |||
| } | |||
| this.render = function() | |||
| { | |||
| context.fillStyle = "rgba(0, 160, 0, 1)"; //green | |||
| context.fillRect(this.x, this.y, this.width,this.height); | |||
| } | |||
| this.move = function() | |||
| { | |||
| if(this.x > p.x + this.speed) | |||
| this.x -= this.speed; | |||
| else if(this.x + this.speed < p.x ) | |||
| this.x += this.speed; | |||
| if(this.y > p.y + this.speed) | |||
| this.y -= this.speed; | |||
| else if(this.y + this.speed < p.y ) | |||
| this.y += this.speed; | |||
| } | |||
| } | |||
| var zombies = []; | |||
| zombies.push(new Zombie()); | |||
| var render = function() | |||
| { | |||
| context.fillStyle = "#000000"; | |||
| context.fillRect(0, 0, width, height); | |||
| context.fillStyle = "rgba(255, 255, 255, 1)"; | |||
| context.font= "20px Georgia"; | |||
| context.fillText("Score: " + score,10,25); | |||
| for(i = 0; i< zombies.length; i++) | |||
| { | |||
| if(zombies[i] != -1) | |||
| { | |||
| zombies[i].render(); | |||
| } | |||
| } | |||
| for(i = 0; i< bullets.length; i++) | |||
| { | |||
| if(bullets[i] != -1) | |||
| { | |||
| bullets[i].render(); | |||
| } | |||
| } | |||
| p.render(); | |||
| } | |||
| var update = function() | |||
| { | |||
| addZombie(); | |||
| p.move(); | |||
| for(i = 0; i< zombies.length; i++) | |||
| { | |||
| for(z = 0;z < bullets.length; z++) | |||
| { | |||
| if(zombies[i] != -1 && bullets[z] != -1) | |||
| { | |||
| if(Math.abs(zombies[i].x - bullets[z].x) < 25 && | |||
| Math.abs(zombies[i].y - bullets[z].y) < 25) | |||
| { | |||
| score++; | |||
| zombies[i] = -1; | |||
| bullets[z] = -1; | |||
| } | |||
| } | |||
| } | |||
| if(zombies[i] != -1) | |||
| { | |||
| zombies[i].move(); | |||
| } | |||
| } | |||
| for(i = 0; i< bullets.length; i++) | |||
| { | |||
| //checks to see if goes out of bounds | |||
| if(bullets[i].x < 0 || bullets[i].y < 0 || bullets[i].x > 700 || bullets[i].y > 700) | |||
| { | |||
| bullets[i] = -1; | |||
| } | |||
| if(bullets[i] != -1) | |||
| { | |||
| bullets[i].move(); | |||
| } | |||
| } | |||
| for(i=0; i<zombies.length; i++) | |||
| { | |||
| if(zombies[i] != -1 && Math.abs(p.x - zombies[i].x) < 25 && | |||
| Math.abs(p.y - zombies[i].y) < 25) | |||
| { | |||
| dead = true; | |||
| } | |||
| } | |||
| } | |||
| var counter2 = 0; | |||
| var counter = 0; | |||
| var rate = 180; | |||
| var addZombie = function() | |||
| { | |||
| counter2++; | |||
| counter++; | |||
| var added = false; | |||
| if(counter >= rate) | |||
| { | |||
| for(i = 0; i< zombies.length; i++) | |||
| { | |||
| if(zombies[i] == -1) | |||
| { | |||
| zombies[i] = new Zombie(); | |||
| added = true; | |||
| break; | |||
| } | |||
| } | |||
| if(added == false) | |||
| { | |||
| zombies.push(new Zombie()); | |||
| } | |||
| counter = 0; | |||
| } | |||
| if(counter2 >= 60) | |||
| { | |||
| if(rate > 30) | |||
| { | |||
| rate = rate -5; | |||
| } | |||
| counter2 = 0; | |||
| } | |||
| } | |||
| var sent = false; | |||
| var tic = function() | |||
| { | |||
| if(dead) | |||
| { | |||
| context.fillStyle = "#000000"; | |||
| context.fillRect(0, 0, width, height); | |||
| context.fillStyle = "rgba(255, 255, 255, 1)"; //green | |||
| context.font= "20px Georgia"; | |||
| context.fillText("You died with a score of " + score,200,340); | |||
| } | |||
| else | |||
| { | |||
| update(); | |||
| render() | |||
| } | |||
| animate(tic); | |||
| } | |||
| window.addEventListener("keydown", function (event) | |||
| { | |||
| if(event.keyCode >=37 && event.keyCode <=40) | |||
| { | |||
| p.facing = event.keyCode; | |||
| } | |||
| keysDown[event.keyCode] = true; | |||
| }); | |||
| window.addEventListener("keyup", function (event) | |||
| { | |||
| delete keysDown[event.keyCode]; | |||
| }); | |||
| animate(tic); | |||
| } | |||
| var socket = io(); | |||
| </script> | |||
| <div><canvas id="canvasZP" width="700" height="700"></canvas></div> | |||
| <div><input type="submit" name="play" value="Play Game" onclick="this.blur();playZP()"/></div> | |||