120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
  <head>
 | 
						|
    <meta charset="UTF-8" />
 | 
						|
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
						|
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
 | 
						|
    <title>Test Canvas Game</title>
 | 
						|
    <style>
 | 
						|
      body {
 | 
						|
        margin: 0;
 | 
						|
        padding: 0;
 | 
						|
      }
 | 
						|
    </style>
 | 
						|
  </head>
 | 
						|
 | 
						|
  <body>
 | 
						|
    <canvas id="gc"> </canvas>
 | 
						|
    <script>
 | 
						|
      //setup
 | 
						|
      c = document.getElementById("gc");
 | 
						|
      cc = c.getContext("2d");
 | 
						|
      c.height = window.innerHeight;
 | 
						|
      c.width = window.innerWidth;
 | 
						|
      c.addEventListener("mousemove", function (e) {
 | 
						|
        p1y = e.clientY - ph / 2;
 | 
						|
      });
 | 
						|
 | 
						|
      lastTime = Date.now();
 | 
						|
      deltaTime = 0;
 | 
						|
      fps = 0;
 | 
						|
 | 
						|
      //gameplay variables
 | 
						|
      p1y = p2y = 40;
 | 
						|
      pt = 10;
 | 
						|
      ph = 100;
 | 
						|
      bx = by = xv = yv = 500; //just making sure bx and by exist, they'll be reset when the game first starts
 | 
						|
      bd = 12;
 | 
						|
      score1 = score2 = 0;
 | 
						|
      ais = 5;
 | 
						|
 | 
						|
      function reset() {
 | 
						|
        bx = c.width / 2;
 | 
						|
        by = c.height / 2;
 | 
						|
        xv = -xv;
 | 
						|
        yv = 4;
 | 
						|
      }
 | 
						|
 | 
						|
      function update() {
 | 
						|
        //measure timing
 | 
						|
        now = Date.now();
 | 
						|
        deltaTime = (now - lastTime) / 1000;
 | 
						|
        lastTime = now;
 | 
						|
        fps = 1 / deltaTime;
 | 
						|
        //move ball
 | 
						|
        bx += xv * deltaTime;
 | 
						|
        by += yv * deltaTime;
 | 
						|
        if (by < 0 && yv < 0) {
 | 
						|
          yv = -yv;
 | 
						|
        }
 | 
						|
        if (by > c.height && yv > 0) {
 | 
						|
          yv = -yv;
 | 
						|
        }
 | 
						|
        //check collision with sides for scoring
 | 
						|
        if (bx > c.width) {
 | 
						|
          if (by > p2y && by < p2y + ph) {
 | 
						|
            xv = -xv;
 | 
						|
            dy = by - (p2y + ph / 2);
 | 
						|
            yv = dy * 10;
 | 
						|
          } else {
 | 
						|
            score1++;
 | 
						|
            reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
        if (bx < 0) {
 | 
						|
          if (by > p1y && by < p1y + ph) {
 | 
						|
            xv = -xv;
 | 
						|
            dy = by - (p1y + ph / 2);
 | 
						|
            yv = dy * 10; //.3
 | 
						|
          } else {
 | 
						|
            score2++;
 | 
						|
            reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
        //ai
 | 
						|
        if (p2y + ph / 2 < by) {
 | 
						|
          p2y += ais;
 | 
						|
        } else {
 | 
						|
          p2y -= ais;
 | 
						|
        }
 | 
						|
        //draw background
 | 
						|
        var gradient = cc.createLinearGradient(0, 0, c.width, c.height);
 | 
						|
        gradient.addColorStop("0", "#ff146e");
 | 
						|
        gradient.addColorStop("1", "#145aff");
 | 
						|
        cc.fillStyle = gradient;
 | 
						|
        //            cc.fillStyle="white";
 | 
						|
        cc.fillRect(0, 0, c.width, c.height);
 | 
						|
        //draw paddles
 | 
						|
        cc.fillStyle = "cyan";
 | 
						|
        cc.fillRect(0, p1y, pt, ph);
 | 
						|
        cc.fillStyle = "red";
 | 
						|
        cc.fillRect(c.width - pt, p2y, pt, ph);
 | 
						|
        //draw ball
 | 
						|
        cc.fillStyle = "lightgreen";
 | 
						|
        cc.fillRect(bx - bd / 2, by - bd / 2, bd, bd);
 | 
						|
        //draw scores
 | 
						|
        cc.fillStyle = "white";
 | 
						|
        cc.font = "20px Times";
 | 
						|
        cc.fillText(score1, 100, 100);
 | 
						|
        cc.fillText(score2, c.width - 100, 100);
 | 
						|
        //draw framerate
 | 
						|
        cc.fillText("framerate: " + fps, c.width / 2 - 100, 100);
 | 
						|
 | 
						|
        window.requestAnimationFrame(update); //Keep the game running
 | 
						|
      }
 | 
						|
      reset(); //prepare the game
 | 
						|
      update(); //start the game
 | 
						|
    </script>
 | 
						|
  </body>
 | 
						|
</html>
 |