duck.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. function SoundDuck() {
  2. var ctx = Game.context;
  3. var canvasHM = Game.canvas.height/2;
  4. var canvasWM = Game.canvas.width/2;
  5. var debug = false;
  6. var RADIUS = 8;
  7. var FIELD_SIZE = 600;
  8. var DOT_SIZE = 3;
  9. var DOT_DISTANCE = 4 * 5;
  10. var DOT_NUM = FIELD_SIZE / DOT_DISTANCE - 1;
  11. var box = [
  12. {x: 0, y: 0},
  13. {x: 0, y: FIELD_SIZE},
  14. {x: FIELD_SIZE, y: FIELD_SIZE},
  15. {x: FIELD_SIZE, y: 0}
  16. ];
  17. var dots = [];
  18. for(var i = 1; i <= DOT_NUM; ++i) {
  19. for(var j = 1; j <= DOT_NUM; ++j) {
  20. if((i % 2 == 1 && j % 2 == 0) || (i % 4 == 0 && j % 4 != 2) || (i % 4 == 2 && j % 4 != 0)) {
  21. dots.push({x: j * DOT_DISTANCE, y: i * DOT_DISTANCE});
  22. }
  23. }
  24. }
  25. var player = {
  26. x: FIELD_SIZE / 2,
  27. y: FIELD_SIZE / 2,
  28. angle: 0,
  29. dx: 100,
  30. da: Math.PI
  31. };
  32. var reference = {
  33. x: canvasWM,
  34. y: canvasHM
  35. };
  36. function translatePoints(point) {
  37. var x = point.x - player.x;
  38. var y = point.y - player.y;
  39. var nx = x * Math.cos(-player.angle) + y * Math.sin(-player.angle);
  40. var ny = -x * Math.sin(-player.angle) + y * Math.cos(-player.angle);
  41. return {x: nx + reference.x, y: ny + reference.y};
  42. }
  43. this.update = function(dt) {
  44. if(38 in Game.keysDown) {
  45. player.x += Math.cos(Math.PI/2+player.angle) * player.dx * dt;
  46. player.y -= Math.sin(Math.PI/2+player.angle) * player.dx * dt;
  47. }
  48. if(37 in Game.keysDown) {
  49. player.angle -= player.da * dt;
  50. }
  51. if(39 in Game.keysDown) {
  52. player.angle += player.da * dt;
  53. }
  54. player.x = clamp(player.x, 0, FIELD_SIZE);
  55. player.y = clamp(player.y, 0, FIELD_SIZE);
  56. };
  57. this.draw = function() {
  58. drawBG();
  59. ctx.beginPath();
  60. box.forEach(function(p, i) {
  61. var pos = translatePoints(p);
  62. if(i == 0) {
  63. ctx.moveTo(pos.x, pos.y);
  64. }
  65. else {
  66. ctx.lineTo(pos.x, pos.y);
  67. }
  68. });
  69. ctx.fillStyle = 'gray';
  70. dots.forEach(function(p) {
  71. var pos = translatePoints(p);
  72. ctx.fillRect(pos.x-1, pos.y-1, 3, 3);
  73. });
  74. ctx.closePath();
  75. ctx.lineWidth = 2;
  76. ctx.strokeStyle = 'white';
  77. ctx.stroke();
  78. // player
  79. drawCircle(reference, RADIUS, 3, 'white');
  80. };
  81. var onKeyUp = function(e) {
  82. switch(e.charCode) {
  83. case 80: // P
  84. case 112: // p
  85. case 32: // space
  86. Game.pause();
  87. soundManager.play('pause');
  88. break;
  89. case 68: // D
  90. debug = !debug;
  91. break;
  92. }
  93. };
  94. this.load = this.resume = function() {
  95. addEventListener('keypress', onKeyUp);
  96. }
  97. this.unload = this.pause = function() {
  98. removeEventListener('keypress', onKeyUp);
  99. }
  100. }
  101. SoundDuck.prototype = new Scene();