从零开始手把手教你使用javascript+canvas开发一个塔防游戏07塔的升级和出售

简介: 从零开始手把手教你使用javascript+canvas开发一个塔防游戏07塔的升级和出售

项目演示


image.png


项目演示地址:

体验一下

项目源码:

项目源码

代码结构


image.png

本节做完效果


image.png


info.js

//画出塔的攻击范围以及升级等信息
    drawScope : function(tower){
        var select = Game.canvasList.select;
        Canvas.clear(select,500,500);
        Canvas.fillArc(select,tower.x+25,tower.y+25,TowerType[tower.type]["level_"+tower.level].scope,"rgba(25,174,70,0.5)");
        if(tower.level < 3)Canvas.drawImg(select,Game.imgList.btn_img,0,0,20,20,tower.x,tower.y,20,20);
        Canvas.drawImg(select,Game.imgList.btn_img,20,0,20,20,tower.x+30,tower.y+30,20,20);
    },
    //升级或卖掉
    upgradeOrSell : function(x,y){
        var tower = Game.nowSelectTower;
        //升级
        if(tower.level < 3 && T.pointInRect({x:x,y:y},{x:tower.x,y:tower.y,width:20,height:20})){
            if(this.score - TowerType[tower.type]["level_"+(tower.level+1)].buyIt < 0)return false;
            tower.level += 1;
            this.updateScore(TowerType[tower.type]["level_"+tower.level].buyIt * -1);
            this.drawScope(tower);
            //update
        }
        //卖掉
        else if(T.pointInRect({x:x,y:y},{x:tower.x+30,y:tower.y+30,width:20,height:20})){
            var money = Math.floor((tower.level * TowerType[tower.type]["level_1"].buyIt)/2);
            this.updateScore(money);
            delete this.installTower[Math.floor(tower.x/50)+"_"+Math.floor(tower.y/50)];
            Game.towerList.remove(tower);
            Canvas.clearRect(Game.canvasList.tower,tower.x,tower.y,tower.width,tower.height);
            Canvas.clear(Game.canvasList.select,500,500);
            tower = null;
            //sell
        }
    }


enemy.js


image.png


game.js


image.png


新增initBind 函数

//初始化绑定塔的事件
    initBind : function(){
        var select = document.getElementById("select");
        select.onclick = function(e){
            var x = e.offsetX || e.layerX,
                y = e.offsetY || e.layerY;
            //遍历塔的列表
            for(var i=0,l=Game.towerList.length;i<l;i++){
                //判断是否选择到了塔
                if(T.pointInRect({x:x,y:y},Game.towerList[i])){
                    //画出范围
                    Info.drawScope(Game.towerList[i]);
                    if(Game.nowSelectTower){
                        //升级或卖掉
                        Info.upgradeOrSell(x,y);
                    }
                    Game.nowSelectTower = Game.towerList[i];
                    break;
                }
            }
            //没有选中,清除
            if(i == l){
                Canvas.clear(Game.canvasList.select,500,500);
                Game.nowSelectTower = null;
            }
        }
    }

//重新开始
    restart : function(){
        this.stop();
        this.towerList = [];
        this.enemyList = [];
        this.bulletList = [];
        this.mission = 0;
        this.missionEnemey = 0;
        this.missionLazy = 2000;
        this.enemyLazy = 0;
        this.nowSelectTower = null;
        Info.score = 100;
        Info.life = 10;
        Info.mission = 1;
        Info.installTower = {};
        Canvas.clear(this.canvasList.map,500,500);
        Canvas.clear(this.canvasList.main,500,500);
        Canvas.clear(this.canvasList.tower,500,500);
        Canvas.clear(this.canvasList.select,500,500);
        Info.redraw();
        this.start();
    },
    //停止
    stop : function(){
        clearInterval(this.timer);
    },
    //结束
    over : function(){
        this.stop();
        alert("你输了!");
    },
    //赢了
    win : function(){
        this.stop();
        alert("你赢了!");
    }


项目源码:


项目源码


目录
相关文章
|
1天前
|
JavaScript 前端开发 测试技术
探索现代JavaScript开发的最佳实践
本文探讨了现代JavaScript开发中的最佳实践,涵盖ES6+特性、现代框架使用、模块化与代码分割、测试驱动开发、代码质量与性能优化、异步编程、SPA与MPA架构选择、服务端渲染和静态站点生成等内容,旨在帮助开发者提升代码质量和开发效率。
|
4天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
9天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。
|
6天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
22 4
|
10天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第30天】本文将通过一个Node.js的简单示例,引导你进入Node.js的世界。我们将从基础概念讲起,然后一步步深入到代码实现,最后总结Node.js在后端开发中的优势和应用场景。无论你是前端开发者还是后端新手,这篇文章都将为你打开一扇了解Node.js的大门。
21 2
|
7天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
19 0
|
14天前
|
JavaScript 前端开发 安全
深入浅出Node.js后端开发
【10月更文挑战第26天】在这篇文章中,我们将一起探索Node.js的奇妙世界。不同于传统的Java或Python,Node.js以其异步非阻塞I/O和事件驱动的特性,在后端开发领域独树一帜。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和思考。从基础概念到实际应用,我们一步步深入Node.js的世界,让你了解其不仅仅是JavaScript运行环境那么简单。
|
Web App开发 移动开发 JavaScript
14个非常棒的 JavaScript 游戏开发框架推荐
您可能还喜欢   九个让人难以置信的HTML5和JavaScript实验 让人眼花缭乱的 HTML5 和 JavaScript 效果 推荐18个基于 HTML 5 Canvas 开发的图表库 29款基于 HTML5 Canvas 开发的网页游戏 五大主流浏览器 CSS3 和 HTML5 兼容性大比拼     随着JavaScript结合HTML5开发越来越受欢迎,很多浏览器支持的新功能正被用户使用,与此同时,许多新的游戏正在使用JavaScript进行开发。
1519 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
95 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
118 4