canvas+processing实现一个牛顿重力小游戏代码

代码语言:html

所属分类:游戏

代码描述:canvas+processing实现一个牛顿重力小游戏代码,使用键盘上“向上”或“W”键跳转,左键或“A”键向左移动,右键或“D”键向右移动,您需要避免撞击重力向您投掷的炸弹、砖块和物体。您持续时间越长,获得的积分越多。开始时相当简单,但您很快就会发现它并不是这样。在游戏期间按P暂停/继续。让我知道您在评论中的高分是多少。祝你好运,小牛顿,暴风雨就要来了!

代码标签: canvas processing 牛顿 重力 游戏 代码

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


<!DOCTYPE html>
<html lang="en" >

<head>

  <meta charset="UTF-8">
  

  
  
  
  
<style>
* {
  margin: 0;
  box-sizing: border-box;
  overflow: hidden;
}

body {
  background: #222;
  width: 100%;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}
body canvas {
  box-shadow: 0.2em 0.2em 2em #0008;
  border: none;
  outline: none;
}
</style>



</head>

<body >
  <canvas id="canvas"></canvas>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/processing.min.js"></script>
  
      <script >
var sketchProc = function(processingInstance) {
  with (processingInstance) {
    size(600, 600); 
    frameRate(60);    
    smooth();
    
textFont(createFont("verdana"));

{
    //Key|Button stuff
    var clicked = false;
    var hover = false;
    var keys = [];
    keyPressed = function () {
        keys[keyCode] = true;
    };
    keyReleased = function () {
        keys[keyCode] = false;
    };
    mouseClicked = function () {
        clicked = true;
    };
} //Keys/Mouse

var Game = function(config) {
    this.page = "home";
    this.base = 570;
    
    this.titleFont = createFont("arial black");
    
    this.frequencyMax = 240;
    this.frequencyMin = 100;
    this.frequency = this.frequencyMax;
    this.frequencyTimer = 0;
    
    this.colors = [
        { //red
            back: color(205, 20, 54),
            front: color(237, 64, 66),
            brick: color(244, 120, 82)
        },
        { //blue
            back: color(84, 133, 229),
            front: color(94, 148, 255),
            brick: color(126, 169, 255)
        },
        { //green
            back: color(125, 181, 169),
            front: color(139, 201, 77),
            brick: color(162, 212, 113)
        },
        { //purple
            back: color(144, 101, 229),
            front: color(160, 113, 225),
            brick: color(179, 141, 255)
        }
    ];
    this.theme = 0;
    
    this.bricksRepository = [];
    this.bricks = [];
    this.brickPieces = [];
    
    this.enemiesRepository = [];
    this.enemies = [];
    
    this.bombsRepository = [];
    this.bombs = [];
    this.bombPiecesRepository = [];
    this.bombPieces = [];
    
    this.medkitsRepository = [];
    this.medkits = [];
    
    this.clouds = [];
    this.rain = [];
    this.drops = 0;
    
    this.storm = 0;
    
    this.score = 0;
    this.highscore = 0;
    this.health = 100;
    
    this.shake = 0;
    this.shakedown = 0.2;
    
    this.bombPieceCoords = [
        {
            x: 0,
            y: 0
        },
        {
            x: -0.5,
            y: 0 
        },
        {
            x: 0.5,
            y: 0 
        },
        {
            x: 0,
            y: -0.5 
        },
        {
            x: 0,
            y: 0.5 
        },
        {
            x: 0.25,
            y: 0.25 
        },
        {
            x: 0.25,
            y: -0.25 
        },
        {
            x: -0.25,
            y: 0.25 
        },
        {
            x: -0.25,
            y: -0.25 
        }
    ];
    
    this.leaderboardArr = [
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        },
        {
            user: "Could be you",
            score: 0
        }
    ];
    this.leaderboardArr.sort(function(a, b) {
       return b.score - a.score; 
    });
};
var game = new Game({});

{
    var Button = function (config) {
        this.pos = config.pos || new PVector(0, 0);
        this.size = config.size || 70;
        this.content = config.content || "Home";
        this.page = config.page || "home";
        this.textSize = config.textSize || this.size / 5;
        this.borderColor = color(12, 31, 3, 20);
        this.backColor = game.colors[game.theme].back;
        this.textColor = color(245, 242, 242);
        this.backColorHover = game.colors[game.theme].front;
        this.textColorHover = color(245, 242, 242);
        this.growth = 0;
    };

    Button.prototype.draw = function () {
        pushStyle();
        textAlign(CENTER, CENTER);
        textSize(this.textSize + (this.growth * 0.1));
        noStroke();

        //shadow
        fill(20, 20, 20, 30);
        ellipse(this.pos.x, this.pos.y + this.size * 0.52, (this.size + this.growth) * 0.8, (this.size + this.growth) * 0.3);

        //circles
        if (dist(mouseX, mouseY, this.pos.x, this.pos.y) <= this.size / 2) { //hover
            this.growth = constrain(this.growth + 0.5, 0, 10);
            if (clicked) {
                game.page = this.page;
                if(game.page === "home") {
                    game.player.x = 300;
                    game.player.y = game.base;
                    game.boss.x = 280;
                    game.boss.y = 54;
                }
                if(game.page === "play" || game.page === "replay") {
                    game.reset();
                }
            }

            fill(this.backColorHover);
            stroke(this.borderColor);
            ellipse(this.pos.x, this.pos.y, this.size + this.growth, this.size + this.growth);
            fill(this.textColorHover);
            switch(this.content) {
                case "Play":
                    triangle(this.pos.x + this.size*0.25, this.pos.y, this.pos.x - this.size*0.15, this.pos.y - this.size*0.25, this.pos.x - this.size*0.15, this.pos.y + this.size*0.25);
                    break;
                case "How":
                    pushStyle();
                        textSize(this.size*0.6);
                        text("?", this.pos.x, this.pos.y);
                    popStyle();
                    break;
                case "Story":
                    pushStyle();
                        noFill();
                        stroke(this.textColorHover);
                        strokeWeight(4);
                        line(this.pos.x-this.size*0.23, this.pos.y-this.size*0.2, this.pos.x+this.size*0.23, this.pos.y-this.size*0.2);
                        line(this.pos.x-this.size*0.23, this.pos.y, this.pos.x+this.size*0.23, this.pos.y);
                        line(this.pos.x-this.size*0.23, this.pos.y+this.size*0.2, this.pos.x+this.size*0.23, this.pos.y+this.size*0.2);
                    popStyle();
                    break;
                case "Themes":
                    arc(this.pos.x, this.pos.y, this.size + this.growth, this.size + this.growth, radians(271), radians(450));
                    break;
                case "Back":
                    pushStyle();
                    beginShape();
                        vertex(this.pos.x+this.size*0.25, this.pos.y); //1
                        vertex(this.pos.x+this.size*0.25, this.pos.y+this.size*0.25); //2
                        vertex(this.pos.x+this.size*0.07, this.pos.y+this.size*0.25); //3
                        vertex(this.pos.x+this.size*0.07, this.pos.y+this.size*0.12); //4
                        vertex(this.pos.x-this.size*0.07, this.pos.y+this.size*0.12); //5
                        vertex(this.pos.x-this.size*0.07, this.pos.y+this.size*0.25); //6
                        vertex(this.pos.x-this.size*0.25, this.pos.y+this.size*0.25); //7
                        vertex(this.pos.x-this.size*0.25, this.pos.y); //8
                        vertex(this.pos.x, this.pos.y-this.size*0.2); //9
                        vertex(this.pos.x+this.size*0.25, this.pos.y); //10
                    endShape();
                    noFill();
                    stroke(this.textColorHover);
                    strokeWeight(this.size*0.05);
                    line(this.pos.x-this.size*0.27, this.pos.y-this.size*0.05, this.pos.x, this.pos.y-this.size*0.27);
                    line(this.pos.x+this.size*0.27, this.pos.y-this.size*0.05, this.pos.x, this.pos.y-this.size*0.27);
                    line(this.pos.x+this.size*0.15, this.pos.y-this.size*0.19, this.pos.x+this.size*0.15, this.pos.y-this.size*0.25);
                    popStyle();
                    break;
                case "Leaderboard":
                    pushStyle();
                        noFill();
                        stroke(this.textColorHover);
                        strokeWeight(this.size * 0.14);
                        strokeCap(SQUARE);
                        
                        line(this.pos.x, this.pos.y + this.size * 0.25, this.pos.x, this.pos.y - this.size * 0.3);
                        line(this.pos.x - this.size * 0.2, this.pos.y + this.size * 0.25, this.pos.x - this.size * 0.2, this.pos.y - this.size * 0.1);
                        line(this.pos.x + this.size * 0.2, this.pos.y + this.size * 0.25, this.pos.x + this.size * 0.2, this.pos.y - this.size * 0.2);
                    popStyle();
                    break;
                case "Replay":
                    pushStyle();
                        noFill();
                        stroke(this.textColorHover);
                        strokeWeight(5);
                        pushMatrix();
                            translate(this.pos.x, this.pos.y);
                            rotate(radians(frameCount * 5));
                            arc(0, 0, this.size * 0.6, this.size * 0.6, 0, radians(275));
                            noStroke();
                            fill(this.textColorHover);
                            translate(this.size * 0.30, -this.size * 0.18);
                            rotate(radians(-70));
                            triangle(0, -this.size * 0.1, -this.size * 0.14, -this.size * 0.3, this.size * 0.14, -this.size * 0.3);
                        popMatrix();
                    popStyle();
                    break;
                default:
                    text(this.content, this.pos.x, this.pos.y);
            }
        }
        else { //not hover
            this.growth = constrain(this.growth - 0.5, 0, 10);
            fill(this.backColor);
            stroke(this.borderColor);
            strokeWeight(2);
            noStroke();
            ellipse(this.pos.x, this.pos.y, this.size + this.growth, this.size + this.growth);
            fill(this.textColor);
            switch(this.content) {
                case "Play":
                    triangle(this.pos.x + this.size*0.25, this.pos.y, this.pos.x - this.size*0.15, this.pos.y - this.size*0.25, this.pos.x - this.size*0.15, this.pos.y + this.size*0.25);
                    break;
                case "How":
                    pushStyle();
                        textSize(this.size*0.6);
                        text("?", this.pos.x, this.pos.y);
                    popStyle();
                    break;
                case "Story":
                    pushStyle();
                        noFill();
                        stroke(this.textColor);
                        strokeWe.........完整代码请登录后点击上方下载按钮下载查看

网友评论0