首页 > 编程语言 >Java Script-使用DOM编程实现移动坦克

Java Script-使用DOM编程实现移动坦克

时间:2024-06-24 12:32:11浏览次数:25  
标签:function tank tankPositionX img Script DOM var Java png

要求:

实现:

将坦克图片放在页面上:

<img id="mytank" src="./img/right.png"/>

在css中设置坦克的初始位置以及页面背景:

<style type="text/css">
        input { font-size: 26px; margin-top: 20px; }
        body { background-image: url("./img/grassland.png"); }
        #mytank { position: absolute; left: 10px; top: 100px; }
    </style>

加入提示(如何操作):

移动控制以及图片的转变:

 document.addEventListener("keydown", function(event) {
            var keyCode = event.keyCode;

            switch(keyCode) {
                case 65: // 左箭头键
                    moveTankLeft();
                    tank.src = "./img/left.png";
                    break;
                case 87: // 上箭头键
                    moveTankUp();
                    tank.src = "./img/up.png";
                    break;
                case 68: // 右箭头键
                    moveTankRight();
                    tank.src = "./img/right.png";
                    break;
                case 83: // 下箭头键
                    moveTankDown();
                    tank.src = "./img/down.png";
                    break;
            }
        });

边界检查,确保坦克不会移出边界:

function moveTankLeft() {
            if (tankPositionX > 0) {
                tank.style.left = (tankPositionX -= moveStep) + "px";
            }
        }

        function moveTankUp() {
            if (tankPositionY > 0) {
                tank.style.top = (tankPositionY -= moveStep) + "px";
            }
        }

        function moveTankRight() {
            var tankWidth = tank.clientWidth;
            var screenWidth = window.innerWidth;

            if (tankPositionX + tankWidth < screenWidth) {
                tank.style.left = (tankPositionX += moveStep) + "px";
            }
        }

        function moveTankDown() {
            var tankHeight = tank.clientHeight;
            var screenHeight = window.innerHeight;

            if (tankPositionY + tankHeight < screenHeight) {
                tank.style.top = (tankPositionY += moveStep) + "px";
            }
        }

禁用鼠标右键
        document.addEventListener("contextmenu", function(event) {
                event.preventDefault(); // 阻止默认右键菜单
            });

完整代码:

<body>
    <img id="mytank" src="./img/right.png"/>

    <script>
        //219970544-郑北东
        
        var tank = document.getElementById("mytank");
        var tankPositionX = 10;
        var tankPositionY = 100;
        var moveStep = 20;
        
        alert("使用键盘上的箭头键来移动坦克:\n" +
                      "A:向左移动\n" +
                      "W:向上移动\n" +
                      "D:向右移动\n" +
                      "S:向下移动");

        document.addEventListener("keydown", function(event) {
            var keyCode = event.keyCode;

            switch(keyCode) {
                case 65: // 左箭头键
                    moveTankLeft();
                    tank.src = "./img/left.png";
                    break;
                case 87: // 上箭头键
                    moveTankUp();
                    tank.src = "./img/up.png";
                    break;
                case 68: // 右箭头键
                    moveTankRight();
                    tank.src = "./img/right.png";
                    break;
                case 83: // 下箭头键
                    moveTankDown();
                    tank.src = "./img/down.png";
                    break;
            }
        });

         // 边界检查:确保坦克不会移出边界
        function moveTankLeft() {
            if (tankPositionX > 0) {
                tank.style.left = (tankPositionX -= moveStep) + "px";
            }
        }

        function moveTankUp() {
            if (tankPositionY > 0) {
                tank.style.top = (tankPositionY -= moveStep) + "px";
            }
        }

        function moveTankRight() {
            var tankWidth = tank.clientWidth;
            var screenWidth = window.innerWidth;

            if (tankPositionX + tankWidth < screenWidth) {
                tank.style.left = (tankPositionX += moveStep) + "px";
            }
        }

        function moveTankDown() {
            var tankHeight = tank.clientHeight;
            var screenHeight = window.innerHeight;

            if (tankPositionY + tankHeight < screenHeight) {
                tank.style.top = (tankPositionY += moveStep) + "px";
            }
        }
        
        //禁用鼠标右键
        document.addEventListener("contextmenu", function(event) {
                event.preventDefault(); // 阻止默认右键菜单
            });
    </script>
</body>

css样式:

<style type="text/css">
        input { font-size: 26px; margin-top: 20px; }
        body { background-image: url("./img/grassland.png"); }
        #mytank { position: absolute; left: 10px; top: 100px; }
    </style>

标签:function,tank,tankPositionX,img,Script,DOM,var,Java,png
From: https://blog.csdn.net/weixin_63390098/article/details/139921955

相关文章

  • 七、若依--P17--P18【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi
    学习视频【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-Vue3前后端分离版本,从前端到后端再到AI智能化应用全通关】https://www.bilibili.com/video/BV1pf421B71v/?p=6&share_source=copy_web&vd_source=3949d51b57b2891ea14d6e51c792bef6二次开发P17:新......
  • JavaScript第十二讲:DOM编程“创建,删除,替换,插入节点”
    目录1.创建节点2.删除节点3.替换节点4.插入节点使用appendChild()使用insertBefore()深入解析与注意事项1.创建节点在HTMLDOM中,我们通常使用JavaScript的document.createElement()方法来创建元素节点,使用document.createTextNode()方法来创建文本节点。示例......
  • SSM-学情分析系统-56772(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、APP
    学情分析系统摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于学情分析系统当然也不能排除在外,随着网络技术的不断成熟,带动了学情分析系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这......
  • 基于SpringBoot的高校大学生学科竞赛管理系统+53135(免费领源码)可做计算机毕业设计JAVA
    springboot高校大学生学科竞赛管理系统的设计与实现摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设高校大学生学科竞赛管理系统。......
  • java java.nio.channels.ClosedChannelException
    java.nio.channels.ClosedChannelException报错信息"java.nio.channels.ClosedChannelException"表示尝试在一个已经关闭的通道上进行操作。在JavaNIO中,通道(Channel)表示一个可以进行IO操作的对象,例如读取或写入数据。当你尝试在一个已经被关闭的通道上进行读取、写入或者其他......
  • Java大文件上传、分片上传、多文件上传、断点续传、上传文件minio、分片上传minio等解
    上传说明    文件上传花样百出,根据不同场景使用不同方案进行实现尤为必要。通常开发过程中,文件较小,直接将文件转化为字节流上传到服务器,但是文件较大时,用普通的方法上传,显然效果不是很好,当文件上传一半中断再次上传时,发现需要重新开始,这种体验不是很爽,下面介绍几种好一......
  • java的输入流FileInput Stream类
    一、定义使用InputStream类的FileInputStream子类实现文本文件内容的读取。二、常用构造方法三、使用FileInputStream类按多字节读取数据1.示例 2、分析四、常见错误  今天的总结就到这里啦,拜拜!  ......
  • java 并发编程面试(1)
    一、单例模式的DCL为啥要加volatile?避免指令重排,获取到未初始化完成的对象。单例模式的懒汉模式确保线程安全的机制DCLpublicclassMyTest{privatestaticMyTestmyTest;publicstaticMyTestgetInstance(){if(myTest==null){//check......
  • Java毕业设计基于SSM的网月科技公司门户网站
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了网月科技公司门户网站的开发全过程。通过分析高校学生综合素质评价管理方面的不足,创建了一个计算机管理网月科技公司门户网站的方案。文章介绍了网月科技公司门户网站的系统......
  • Java毕业设计基于SSM的超好听乐器销售购物商城系统
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本缪斯乐器购物网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......