• HTML5坦克大战(2)绘制坦克复习


    html代码:

     1 <!DOCTYPE html>
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5     <title>坦克大战</title>
     6     <script src="tank.js"></script>
     7 </head>
     8 <body onkeydown="moveTank(hero)">
     9     <canvas id="canvas" width="1000" height="400" style="border:1px solid red; display:block; margin: 50px auto; background-color:black;"></canvas>
    10 
    11     <script type="text/javascript">
    12 
    13         var canvas = document.getElementById("canvas");
    14         var context = canvas.getContext("2d");
    15         var hero = new Tank(30, 30, 0, 5);
    16 
    17         //创建hero对象
    18         var hero = new Tank(30, 40, 0, 5);
    19 
    20         function moveTank(tank) {
    21             //上下左右移动坦克
    22             switch (event.keyCode) {
    23                 case 65://
    24                     tank.direct = 3;
    25                     tank.moveLeft();
    26                     break;
    27                 case 68://
    28                     tank.direct = 1;
    29                     tank.moveRight();
    30                     break;
    31                 case 87://
    32                     tank.direct = 0;
    33                     tank.moveUp();
    34                     break;
    35                 case 83://
    36                     tank.direct = 2;
    37                     tank.moveDown();
    38                     break;
    39                 default:
    40             }
    41             drawTank(hero);
    42         }
    43 
    44         drawTank(hero);
    45     </script>
    46 </body>
    47 </html>

    JavaScript代码:

    function Tank(x, y, direct, speed) {
        //创建坦克类,横纵坐标,方向,速度
        this.x = x;
        this.y = y;
        this.direct = direct;
        this.speed = speed;
        this.moveUp = function () {
            this.y -= this.speed;
        }
        this.moveDown = function () {
            this.y += this.speed;
        }
        this.moveLeft = function () {
            this.x -= this.speed;
        }
        this.moveRight = function () {
            this.x += this.speed;
        }
    }
    function drawTank(tank) {
        //画坦克
        switch (tank.direct) {
            case 0:
            case 2:
                //向上,向下
                //清屏
                context.clearRect(0, 0, canvas.width, canvas.height);
                //画坦克
                //画轮子和身体
                context.beginPath();
                context.fillStyle = "red";
                context.fillRect(tank.x, tank.y, 5, 30);//左轮
                context.fillRect(tank.x + 6, tank.y + 5, 8, 20);//身体
                context.fillRect(tank.x + 15, tank.y, 5, 30);//右轮
                context.fill();
                context.closePath();
                //画脑袋
                context.beginPath();
                context.fillStyle = "blue";
                context.arc(tank.x + 10, tank.y + 15, 4, 0, 2 * Math.PI);
                context.fill();
                context.closePath();
                //画炮筒
                context.beginPath();
                context.strokeStyle = "yellow";
                context.lineWidth = 2;
                context.moveTo(tank.x + 10, tank.y + 15);
                if (tank.direct == 0) {
                    context.lineTo(tank.x + 10, tank.y);
                } else if (tank.direct == 2) {
                    context.lineTo(tank.x + 10, tank.y + 30);
                }
                context.stroke();
                context.fill();
                context.closePath();
                break;
            case 1:
            case 3:
                //向左,向右
                //清屏
                context.clearRect(0, 0, canvas.width, canvas.height);
                //画坦克
                //画轮子和身体
                context.beginPath();
                context.fillStyle = "red";
                context.fillRect(tank.x, tank.y, 30, 5);//左轮
                context.fillRect(tank.x + 5, tank.y + 6, 20, 8);//身体
                context.fillRect(tank.x, tank.y + 15, 30, 5);//右轮
                context.fill();
                context.closePath();
                //画脑袋
                context.beginPath();
                context.fillStyle = "blue";
                context.arc(tank.x + 15, tank.y + 10, 4, 0, 2 * Math.PI);
                context.fill();
                context.closePath();
                //画炮筒
                context.beginPath();
                context.strokeStyle = "yellow";
                context.lineWidth = 2;
                context.moveTo(tank.x + 15, tank.y + 10);
                if (tank.direct == 1) {
                    context.lineTo(tank.x + 30, tank.y + 10);
                } else if (tank.direct == 3) {
                    context.lineTo(tank.x, tank.y + 10);
                }
                context.stroke();
                context.fill();
                context.closePath();
                break;
            default:
        }
    }
  • 相关阅读:
    vs2019+GLFW+GLAD出现无法解析的外部符号
    图的着色算法
    Head First C# 实验室2(冒险游戏)
    击中和击不中变换
    开运算和闭运算
    膨胀与腐蚀
    两数相加(C#数据结构和算法练习)
    C# 特性和索引(C#学习笔记06)
    C# 索引器(C#学习笔记05)
    C# yield checked,unchecked lock语句(C#学习笔记04)
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/5916197.html
Copyright © 2020-2023  润新知