原生js实现canvas星际飞船射击类游戏代码

代码语言:html

所属分类:游戏

代码描述:原生js实现canvas星际飞船射击类游戏代码,按住键盘的上下左右键移动位置,按空格键开火。

代码标签: canvas 飞船 射击 游戏

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <style>
        @import url("https://fonts.googleapis.com/css2?family=Fredericka+the+Great&display=swap");
        * {
          box-sizing: border-box;
          margin: 0;
          padding: 0;
        }
        
        html {
          font-size: 62.5%;
        }
        
        body {
          background: #221d38;
          color: whitesmoke;
        }
        
        canvas {
          background: #867443;
          background: radial-gradient(circle at 33% 115%, #867443 4%, #805a42 15%, #221d38 34%);
          background-position-y: 147px;
        }
        
        .wrapper {
          font-family: "Fredericka the Great", cursive;
          position: relative;
        }
        
        .game_space {
          background-color: #5f5f5f;
          background: radial-gradient(circle, #867443 4%, #805a42 15%, #221d38 34%);
          border: 1px solid #666;
          color: whitesmoke;
          left: 50%;
          margin-top: -6px;
          position: fixed;
          top: 21rem;
          transform: translate(-50%, -50%);
          width: 720px;
        }
        
        .game_space.playing {
          cursor: none;
        }
        
        .canvasWrapper {
          animation: ship_move_y 3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, ship_move_x 2.5s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;
          background: url("//repo.bfw.wiki/bfwrepo/webp/ship_dark.webp");
          background-repeat: no-repeat;
          background-position: -210px 190px;
          height: 300px;
          position: relative;
          width: 720px;
          z-index: 0;
        }
        
        @keyframes ship_move_x {
          0% {
            background-position-x: -210px;
          }
          50%, 100% {
            background-position-x: 350px;
          }
        }
        @keyframes ship_move_y {
          0% {
            background-position-y: 190px;
          }
          50%, 100% {
            background-position-y: 75px;
          }
        }
        .messaging {
          font-size: 4rem;
          left: 50%;
          pointer-events: none;
          position: absolute;
          text-align: center;
          text-shadow: 1px 1px 10px whitesmoke;
          top: 50%;
          transform: translate(-50%, -50%);
          z-index: 1;
        }
        
        .messaging span {
          display: inline-block;
        }
        
        .messaging span.h2 {
          font-size: 2.5rem;
          text-shadow: 1px 1px 10px firebrick;
        }
        
        .messaging span.h3 {
          font-size: 1.9rem;
          margin-top: 10px;
          text-align: left;
          text-shadow: 1px 1px 10px #241e9e;
        }
        
        .messaging span.h3 .action {
          margin-top: 0;
          width: 55px;
        }
        
        .level_display,
        .score_display {
          animation: reveal_score_display 1.5s ease-out forwards;
          animation-delay: 1.5s;
          font-size: 1.6rem;
          height: 2.5rem;
          margin: -8rem auto 0;
          overflow: hidden;
          padding: 0 8px;
          text-align: right;
          width: 720px;
        }
        
        .level_display {
          animation: reveal_level_display 1.5s ease-out forwards;
          text-align: left;
        }
        
        .level_display.hidden,
        .score_display.hidden {
          margin-top: -8rem;
        }
        
        @keyframes reveal_score_display {
          0% {
            margin-top: -8rem;
          }
          50%, 100% {
            margin-top: 3rem;
          }
        }
        @keyframes reveal_level_display {
          0% {
            margin-top: -8rem;
          }
          50%, 100% {
            margin-top: -2.5rem;
          }
        }
        .loading_font {
          position: fixed;
          top: -9999px;
        }
        
        .hidden {
          display: none;
        }
    </style>



</head>

<body>
    <div class="wrapper">
        <div class="game_space loading">
            <div class="canvasWrapper"></div>
            <div class="messaging"></div>
        </div>

        <div class="score_display hidden">Score: <span class="score">0</span></div>
        <div class="level_display hidden">Level: <span class="level">_</span></div>

        <div class="loading_font" aria-hidden="true">&nbsp;</div>
    </div>


    <script>
        // Pen-ified version of this project:
        // https://codepen.io/2Mogs/project/editor/DddNpw
        
        /***
        CLASSES FIRST
        Main code all the way down at the bottom (approx line 1200)
        ***/
        
        /* CONSTANTS */
        class EventIDs {
          constructor() {
            this.ENTER_PRESSED = 'enter key pressed';
            this.EXPLODE = 'explode';
            this.FIRE = 'fire';
            this.GAME_OVER = 'game over';
            this.GET_READY = 'Get next level ready';
            this.LEVEL_COMPLETE = 'level complete';
            this.RESET_GAME = 'reset game';
            this.START = 'start';
          }}
        
        class Messaging {
          constructor() {
            this.gameOver = 'Game Over';
            this.levelOver = 'You beat the level';
            this.start = 'Click to Play';
          }}
        
        class MyMath {
          constructor() {
            this.mFloor = Math.floor;
            this.mRound = Math.round;
            this.mRandom = Math.random;
            this.mSqrt = Math.sqrt;
            this.tau = Math.PI * 2;
          }}
        
        class EnemyPatterns {
          constructor() {
            this.baseRules = {
              baseX: 535,
              baseY: 44,
              scalar: .5,
              spaceY: 40,
              spaceX: 50,
              speed: .6 };
        
            this.patterns = [
            {
              id: 'code',
              rows: ['0111001100111001111',
              '1000010010100101000',
              '1000010010100101110',
              '1000010010100101000',
              '0111001100111001111'] },
        
            {
              id: 'pen',
              rows: ['111001111010001',
              '100101000011001',
              '100101110010101',
              '111001000010011',
              '100001111010001'] },
        
            this.generatePattern()];
        
          }
        
          generatePattern() {
            return {
              id: 'generated',
              baseX: 750,
              speed: 1.2,
              rows: [this.generateRow(),
              this.generateRow(),
              this.generateRow(),
              this.generateRow(),
              this.generateRow()] };
        
          }
        
          generateRow(size = 10) {
            let row = '';
            for (let i = 0; i < size; i++) {
              row += math.mRandom() < .85 ? '1' : '0';
            }
            return row;
          }}
        
        
        let eventIDs = new EventIDs();
        let math = new MyMath();
        let messaging = new Messaging();
        let formations = new EnemyPatterns();
        /* CONSTANTS - END */
        
        /* MANAGERS & WATCHERS */
        class EventManager {
          constructor() {
            this.subscribers = {};
          }
          subscribe(event, handler) {
            if (this.subscribers[event]) {
              this.subscribers[event].push(handler);
            } else
            {
              this.subscribers[event] = [handler];
            }
          }
          dispatch(event, data) {
            if (this.subscribers[event]) {
              this.subscribers[event].forEach(function (handler) {
                handler(data);
              });
            }
          }}
        
        let eventManager = new EventManager();
        
        class KeyWatcher {
          constructor() {
            this.goRIGHT = false;
            this.goLEFT = false;
            this.goUP = false;
            this.goDOWN = false;
            this.SPACEBAR = false;
            this.keycodeSPACE = 32;
            this.keycodeRIGHT = 39;
            this.keycodeLEFT = 37;
            this.keycodeUP = 38;
            this.keycodeDOWN = 40;
            this.keycodeW = 87;
            this.keycodeA = 65;
            this.keycodeS = 83;
            this.keycodeD = 68;
            this.keycodeENTER = 13;
        
            this.allowEnter = false;
            this.playing = false;
            this.gameOver = false;
        
            this.keyDownListener = this.handleKeyDown.bind(this);
            this.keyUpListener = this.handleKeyUp.bind(this);
        
            document.addEventListener('keydown', this.keyDownListener);
            document.addEventListener('keyup', this.keyUpListener);
        
            eventManager.subscribe(eventIDs.GAME_OVER, () => this.handleGameOver());
            eventManager.subscribe(eventIDs.GET_READY, () => this.allowEnter = true);
            eventManager.subscribe(eventIDs.LEVEL_COMPLETE, () => this.stopWatching());
            eventManager.subscribe(eventIDs.START, () => this.startWatching());
          }
        
          startWatching() {
            this.resetAllActions();
            this.playing = true;
          }
        
          stopWatching() {
            this.resetAllActions();
            this.allowEnter = false;
            this.playing = false;
          }
        
          resetAllActions() {
            this.goRIGHT = false;
            this.goLEFT = false;
            this.goUP = false;
            this.goDOWN = false;
            this.SPACEBAR = false;
          }
        
          handleGameOver() {
            this.stopWatching();
            this.gameOver = true;
            this.allowEnter = true;
          }
        
          handleKeyDown(e) {
            if (!this.playing) return;
        
            if (e.keyCode === this.keycodeRIGHT || e.keyCode === this.keycodeD) {
              this.goRIGHT = true;
            }
            if (e.keyCode === this.keycodeLEFT || e.keyCode === this.keycodeA) {
              this.goLEFT = true;
            }
            if (e.keyCode === this.keycodeUP || e.keyCode === this.keycodeW) {
              this.goUP = true;
            }
            if (e.keyCode === this.keycodeDOWN || e.keyCode === this.keycodeS) {
              this.goDOWN = true;
            }
            if (e.keyCode === this.keycodeSPACE) {
              this.SPACEBAR = true;
            }
          }
        
          handleKeyUp(e) {
            if (this.gameOver) {
              this.gameOver = false;
            }
            if (!this.playing && this.allowEnter) {
              if (e.keyCode === this.keycodeENTER) {
                eventManager.dispatch(eventIDs.ENTER_PRESSED);
              }
            } else
            {
              if (e.keyCode === this.keycodeRIGHT || e.keyCode === this.keycodeD) {
                this.goRIGHT = false;
              }
              if (e.keyCode === this.keycodeLEFT || e.keyCode === this.keycodeA) {
                this.goLEFT = false;
              }
              if (e.keyCode === this.keycodeUP || e.keyCode === this.keycodeW) {
                this.goUP = false;
              }
              if (e.keyCode === this.keycodeDOWN || e.keyCode === this.keycodeS) {
                this.goDOWN = false;
              }
              if (e.keyCode === this.keycodeSPACE) {
                this.SPACEBAR = false;
              }
            }
          }}
        
        let keyWatcher = new KeyWatcher();
        
        class CollisionManager {
          constructor({ enemies, missile, ship }) {
            this.ship = ship;
            this.missile = missile;
            this.enemies = enemies;
        
            this.running = false;
        
            eventManager.subscribe(eventIDs.LEVEL_COMPLETE, () => this.stopTesting());
            eventManager.subscribe(eventIDs.START, () => this.startTesting());
          }
        
          startTesting() {this.running = true;}
        
          stopTesting() {this.running = false;}
        
          testCollision({ objA, objB, radius }) {
            const dx = objA.x - objB.x;
            const dy = objA.y - objB.y;
            return math.mSqrt(dx * dx + dy * dy) < radius ? true : false;
          }
          update() {
            if (!this.running) return;
        
            const missilePt = { x: this.missile.sprite.x, y: this.missile.sprite.y };
            const shipPt = { x: this.ship.sprite.x, y: this.ship.sprite.y };
            let enemyPt;
            let hit = false;
            this.enemies.enemies.map((enemy, i) => {
              if (!enemy.alive) return;
        
              enemyPt = { x: enemy.sprite.x, y: enemy.sprite.y };
        
              // Test against missile
              if (this.missile.active && enemyPt.x < 700) {
                hit = this.testCollision({ objA: missilePt, objB: enemyPt, radius: enemy.radius });
                if (hit) {
                  this.missile.active = false;
                  this.enemies.killSprite(i);
                  eventManager.dispatch(eventIDs.EXPLODE, { x: enemyPt.x, y: enemyPt.y, type: explosions.types.missile, value: enemy.variant + 1 });
                }
              }
        
              // Test against ship
              hit = this.testCollision({ objA: shipPt, objB: enemyPt, radius: ship.radius });
              if (hit) {
                this.enemies.killSprite(i);
                this.ship.takeDamage(1);
                eventManager.dispatch(eventIDs.EXPLODE, { x: enemyPt.x, y: enemyPt.y, type: explosions.types.missile, value: (enemy.variant + 1) * 2 });
              }
            });
          }}
        
        /* MANAGERS & WATCHERS - END */
        
        /* CONFIGS */
        class EnemiesConfig {
          constructor() {
            this.height = 60;
            this.radius = 34;
            this.width = 68;
            this.winLineX = 120;
          }}
        
        class ExplosionsConfig {
          constructor() {
            this.durations = {
              missile: 15,
              ship: 30 };
        
            this.hsl = {
              missile: '0,100%,100%',
              ship: '10,70%,60%' };
        
            this.types = {
              missile: 'missile',
              ship: 'ship' };
        
          }}
        
        class GlowsConfig {
          constructor() {
            this.colours = [
            'silver', 'yellowgreen', 'darkorange', 'firebrick'];
        
        
            this.groundBurn = '#521';
            this.missile = '#fff';
        
            this.glowSizes = {
              ship: 20,
              enemy: 7,
              ground: 12,
              missile: 3 };
        
          }}
        
        class MissileConfig {
          constructor() {
            this.height = 4;
            this.radius = 6;
            this.speed = 8;
            this.variants = 4;
            this.width = 20;
            this.xAdjust = 46;
            this.yAdjust = -2;
          }}
        
        class RocketFlamesConfig {
          constructor() {
            this.baseDepth = 14;
            this.colours = [
            'hsla(0,70%,60%,.2)',
            'hsla(45,70%,60%,.2)',
            'hsla(190,70%,60%,.2)',
            'hsla(310,70%,60%,.2)'];
        
            this.colourArrayLength = this.colours.length - 1;
            this.flickerBase = 2;
            this.flickerVariance = 10;
            this.maxLengthVariance = 20;
            this.minLength = 12;
            this.layers = 6;
            this.xAdjust = -42;
            this.yAdjust = 6.5;
          }}
        
        class ShipConfig {
          constructor() {
            this.damageLevel = 0;
            this.dead = false;
            this.health = 0;
            this.healthBase = 10;
            this.height = 67;
            this.maxX = 500;
            this.maxY = 210;
            this.minX = 85;
            this.minY = 50;
            this.radius = 40;
            this.width = 102;
            this.initialX = -200;
            this.initialY = 150;
        
            this.autoFly = {
              status: true,
              state: 0, // 0/1
              steps: 30, // Equates to speed - bigger slower,
              tolerance: 1, // How close is 'Arrived'
              dest: [
              { x: 120, y: 120 }, // Flying in
              { x: 1000, y: 110 } // Flying off
              ] };
        
          }}
        
        
        let enemies = new EnemiesConfig();
        let explosions = new ExplosionsConfig();
        let glows = new GlowsConfig();
        let missile = new MissileConfig();
        let rocketFlames = new RocketFlamesConfig();
        let ship = new ShipConfig();
        /* CONFIGS - END */
        
        class GameCanvas {
          constructor() {
            this.canvas = null;
            this.ctx = null;
            this.id = '';
            this.height = 0;
            this.width = 0;
          }
          createCanvas({ domElement, id, w, h }) {
            this.canvas = document.createElement('canvas');
            this.resize(w, h);
            this.id = this.canvas.id = id;
            domElement.appendChild(this.canvas);
            this.ctx = this.canvas.getContext('2d');
          }
          resize(w, h) {
            this.width = this.canvas.width = w;
            this.height = this.canvas.height = h;
          }}
        
        
        class Backgrounds {
          constructor({ speed, ctx, x = 0, y = 0, h, w, initialVariant = 0 }) {
            this.bgSprites = [];
            this.spriteData = new SpriteData();
            this.ctx = ctx;
            this.x = x;
            this.y = y;
            this.h = h;
            this.w = w;
            this.speed = speed;
            this.previousBgId = initialVariant;
            this.numBgVariants = 5;
            this.lastBgX = 0;
            this.minLastBgX = w;
        
            this.init();
          }
          init() {
            while (this.lastBgX < this.minLastBgX) {
              this.addBg();
            }
          }
          addBg() {
            this.bgSprites.push(
            new SpriteSheet(
            { spriteData: this.spriteData.scenes[this.previousBgId++],
              w: this.w,
              h: this.h,
              ctx: this.ctx,
              x: this.lastBgX,
              y: this.y,
              centerX: false }));
        
            this.lastBgX += this.minLastBgX;
            if (this.previousBgId >= this.numBgVariants) {this.previousBgId = 0;}
          }
          update() {
            // Move bgs 
            this.bgSprites.map(bg => {
              bg.x -= this.speed;
            });
        
            // Crop bgs outside view
            this.bgSprites = this.bgSprites.filter(bg => bg.x > -this.w);
        
            // Add new bg if last bg is in view
            this.lastBgX -= this.speed;
            if (this.lastBgX < this.minLastBgX) {
              this.addBg();
            }
          }
          draw() {
            this.bgSprites.map(bg => {
              bg.draw();
            });
          }}
        
        class Ground {
          constructor({ ctx, w, h, x, y }) {
            this.ctx = ctx;
            this.spriteData = new SpriteData();
            this.sprite = new SpriteSimple({ spriteData: this.spriteData.ground, w: w, h: h, ctx: ctx, x: x, y: y });
          }
          update() {return;}
          draw() {
            this.ctx.shadowBlur = glows.glowSizes['ground'];
            this.ctx.shadowColor = glows.groundBurn;
            this.sprite.draw();
            this.ctx.shadowBlur = 0;
          }}
        
        class Plants {
          constructor({ speed, ctx, x = 0, y = 0, w, minY = 15, maxY = 40, minGap = 120, maxGap = 230, scalar = 1 }) {
            this.plantSprites = [];
            this.spriteData = new SpriteData();
            this.ctx = ctx;
            this.x = x;
            this.y = y;
            this.speed = speed;
            this.minY = minY;
            this.maxY = maxY - this.minY;
            this.previousPlantId = 0;
            this.numPlantVariants = 8;
            this.lastPlantX = 55;
            this.minLastPlantX = w + 50;
            this.minGap = minGap;
            this.maxGap = maxGap - this.minGap;
            this.scalar = scalar;
        
            this.init();
          }
          init() {
            while (this.lastPlantX < this.minLastPlantX) {
              this.addPlant();
            }
          }
          addPlant() {
            this.plantSprites.push(
            new SpriteSheet(
            { spriteData: this.spriteData.plants,
              w: 40,
              h: 53,
              ctx: this.ctx,
              x: this.lastPlantX,
              y: this.getY(),
              variant: this.getVariant(),
              scalar: this.scalar }));
        
            this.lastPlantX += math.mRandom() * this.maxGap + this.minGap;
          }
          getVariant() {
            const nextPlantId = math.mFloor(math.mRandom() * this.numPlantVariants);
            if (nextPlantId !== this.previousPlantId) {
              this.previousPlantId = nextPlantId;
              return nextPlantId;
            } else
            {
              this.getVariant();
            }
          }
          getY() {
            return this.y - math.mRandom() * this.maxY + this.minY;
          }
          update() {
            // Move plants 
            this.plantSprites.map(plant => {
              plant.x -= this.speed;
            });
        
            // Crop plants outside view
            this.plantSprites = this.plantSprites.filter(plant => plant.x > -30);
        
            // Add new plant if last plant is in view
            this.lastPlantX -= this.speed;
            if (this.lastPlantX < this.minLastPlantX) {
              this.addPlant();
            }
          }
          draw() {
            this.plantSprites.map(plant => {
              plant.draw();
            });
          }}
        
        class WinLine {
          constructor({ ctx, h }) {
            this.ctx = ctx;
            this.height = h;
          }
          update() {return;}
          draw() {
            this.ctx.setLineDash([5, 10]);
            // Home base line
            this.ctx.strokeStyle = 'hsla(0,60%,50%,.4)';
            this.ctx.beginPath();
            this.ctx.moveTo(enemies.winLineX, 0);
            this.ctx.lineTo(enemies.winLineX, this.height);
            this.ctx.stroke();
            // Max ship range line
            this.ctx.strokeStyle = 'hsla(0,100%,100%,.4)';
            this.ctx.beginPath();
            this.ctx.moveTo(ship.maxX, 0);
            this.ctx.lineTo(ship.maxX, this.height);
            this.ctx.stroke();
          }}
        
        class UI {
          constructor() {
            this.levelEl = document.querySelector('.level');
            this.messageEl = document.querySelector('.messaging');
            this.scoreEl = document.querySelector('.score');
            this.gameSpace = document.querySelector('.game_space');
        
            this.level = 0;
            this.score = 0;
            this.scoreMultiplier = 9;
        
            this.gameRunning = false;
            this.listening = false;
        
            this.firstMessage = true;
            this.startMessages = [
            'Defender 404<br><span class="h2">Stop the invasion before<br>it crosses your home line</span><br><span class="h3"><span class="action">Start</span>: Click / ENTER<br><span class="action">Move</span>: Arrow Keys / WASD<br><span class="action">Fire</span>: SPACEBAR</span>',
            'Beat the next wave'];
        
            this.levelClear = 'Level cleared';
            this.gameOver = 'GAME OVER<br>Play again?';
        
            eventManager.subscribe(eventIDs.ENTER_PRESSED, () => this.handleStart());
            eventManager.subscribe(eventIDs.EXPLODE, data => this.handleExplode(data));
            eventManager.subscribe(eventIDs.GAME_OVER, () => this.handleGameOver());
            eventManager.subscribe(eventIDs.GET_READY, () => this.handleReady());
            eventManager.subscribe(eventIDs.LEVEL_COMPLETE, () => this.handleLevelOver());
        
            this.startListener = this.handleStart.bind(this);
            this.gameSpace.addEventListener('click', this.startListener);
          }
        
          handleReady() {
            this.listening = true;
            this.setMessage(this.firstMessage ? this.startMessages[0] : this.startMessages[1]);
            this.levelEl.innerHTML = ++this.level;
            this.firstMessage = false;
            this.gameRunning = true;
          }
        
          handleStart() {
            if (!this.gameRunning && !this.listening) {
              this.reset();
              return;
            }
            this.toggleCursor({ hide: true });
            eventManager.dispatch(eventIDs.START);
            this.listening = false;
            this.setMessage('');
          }
        
          handleLevelOver() {
            this.toggleCursor({ hide: false });
            this.setMessage(this.levelClear);
          }
        
          handleExplode(data) {
            if (!data.value) return;
            this.score += data.value * this.scoreMultiplier;
            this.scoreEl.innerHTML = this.score;
          }
        
          handleGameOver() {
            this.toggleCursor({ hide: false });
            this.setMessage(this.gameOver);
            this.gameRunning = false;
          }
        
          setMessage(message) {
            this.messageEl.innerHTML = message;
          }
        
          toggleCursor({ hide }) {
            hide ? this.gameSpace.classList.add('playing') : this.gameSpace.classList.remove('playing');
          }
        
          reset() {
            eventManager.dispatch(eventIDs.RESET_GAME);
            this.level = 0;
            this.score = 0;
            this.levelEl.innerHTML = this.level;
            this.scoreEl.innerHTML = this.score;
            this.gameRunning = true;
            this.firstMessage = true;
            this.handleReady();
          }}
        
        
        class SpriteData {
          constructor() {
            this.ground = 'data:image/png;base64,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.........完整代码请登录后点击上方下载按钮下载查看

网友评论0