Java实现一个坦克大战的小游戏【附源码】

简介: Java实现一个坦克大战的小游戏【附源码】

1 前言

🚀获取源码,文末公众号回复【坦克】,即可。

⭐欢迎点赞留言

2 正文

13MB GIF可以欣赏:

https://ucc.alicdn.com/images/user-upload-01/img_convert/4721f22d97731adcdbc8baff4b520176.gif


2.2 项目结构

2.2 主要代码展示


var Bullet = function(context,owner,type,dir){
  this.ctx = context;
  this.x = 0;
  this.y = 0;
  this.owner = owner; //子弹的所属者
  this.type = type;//1、玩家  2、敌方
  this.dir = dir;
  this.speed = 3;
  this.size = 6;
  this.hit = false;
  this.isDestroyed = false;
  
  this.draw = function(){
    this.ctx.drawImage(RESOURCE_IMAGE,POS["bullet"][0]+this.dir*this.size,POS["bullet"][1],this.size,this.size,this.x,this.y,this.size,this.size);
    this.move();
  };
  
  this.move = function(){
    if(this.dir == UP){
      this.y -= this.speed;
    }else if(this.dir == DOWN){
      this.y += this.speed;
    }else if(this.dir == RIGHT){
      this.x += this.speed;
    }else if(this.dir == LEFT){
      this.x -= this.speed;
    }
    
    this.isHit();
  };
  
  /**
   * 碰撞检测
   */
  this.isHit = function(){
    if(this.isDestroyed){
      return;
    }
    //临界检测
    if(this.x < map.offsetX){
      this.x = map.offsetX;
      this.hit = true;
    }else if(this.x > map.offsetX + map.mapWidth - this.size){
      this.x = map.offsetX + map.mapWidth - this.size;
      this.hit = true;
    }
    if(this.y < map.offsetY){
      this.y = map.offsetY;
      this.hit = true;
    }else if(this.y > map.offsetY + map.mapHeight - this.size){
      this.y = map.offsetY + map.mapHeight - this.size;
      this.hit = true;
    }
    //子弹是否碰撞了其他子弹
    if(!this.hit){
      if(bulletArray != null && bulletArray.length > 0){
        for(var i=0;i<bulletArray.length;i++){
          if(bulletArray[i] != this && this.owner.isAI != bulletArray[i].owner.isAI && bulletArray[i].hit == false && CheckIntersect(bulletArray[i],this,0)){
            this.hit = true;
            bulletArray[i].hit = true;
            break;
          }
        }
      }
    }
    
    if(!this.hit){
      //地图检测
      if(bulletMapCollision(this,map)){
        this.hit = true;
      }
      //是否击中坦克
      if(this.type == BULLET_TYPE_PLAYER){
        if(enemyArray != null || enemyArray.length > 0){
          for(var i=0;i<enemyArray.length;i++){
            var enemyObj = enemyArray[i];
            if(!enemyObj.isDestroyed && CheckIntersect(this,enemyObj,0)){
              CheckIntersect(this,enemyObj,0);
              if(enemyObj.lives > 1){
                enemyObj.lives --;
              }else{
                enemyObj.distroy();
              }
              this.hit = true;
              break;
            }
          }
        }
      }else if(this.type == BULLET_TYPE_ENEMY){
        if(player1.lives > 0 && CheckIntersect(this,player1,0)){
          if(!player1.isProtected && !player1.isDestroyed){
            player1.distroy();
          }
          this.hit = true;
        }else if(player2.lives > 0 && CheckIntersect(this,player2,0)){
          if(!player2.isProtected && !player2.isDestroyed){
            player2.distroy();
          }
          this.hit = true;
        }
      }
    }
    
    
    if(this.hit){
      this.distroy();
    }
  };
  
  /**
   * 销毁
   */
  this.distroy = function(){
    this.isDestroyed = true;
    crackArray.push(new CrackAnimation(CRACK_TYPE_BULLET,this.ctx,this));
    if(!this.owner.isAI){
      BULLET_DESTROY_AUDIO.play();
    }
  };
  
  
};

2.3 按钮操作


var CrackAnimation = function(type,context,crackObj){
  this.times = 0;
  this.ctx = context;
  this.frame = 0;
  this.x = 0;
  this.y = 0;
  this.posName = "";
  this.size = 0;
  this.isOver = false;
  this.tempDir = 1;
  this.owner = crackObj;
  
  if(type == CRACK_TYPE_TANK){
    this.posName = "tankBomb";
    this.size = 66;
    this.frame = 4;
  }else{
    this.posName = "bulletBomb";
    this.size = 32;
    this.frame = 3;
  }
  this.x = crackObj.x + (parseInt(crackObj.size - this.size)/2);
  this.y = crackObj.y + (parseInt(crackObj.size - this.size)/2);
  
  this.draw = function(){
    var gaptime = 3;
    var temp = parseInt(this.times/gaptime);
    this.ctx.drawImage(RESOURCE_IMAGE,POS[this.posName][0]+temp*this.size,POS[this.posName][1],this.size,this.size,this.x,this.y,this.size,this.size);
    this.times += this.tempDir;
    if(this.times > this.frame * gaptime - parseInt(gaptime/2)){
      this.tempDir = -1;
    }
    if(this.times <= 0){
      this.isOver = true;
    }
  };
};

不会还有人没 点赞 + 关注 + 收藏 吧!

目录
相关文章
|
29天前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
4月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
211 3
|
5月前
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
169 6
家政系统源码,java版本
|
5月前
|
供应链 JavaScript 前端开发
Java基于SaaS模式多租户ERP系统源码
ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业的运营效率和管理水平,它是一种先进的企业管理理念和信息化管理系统。 适用于小微企业的 SaaS模式多租户ERP管理系统, 采用最新的技术栈开发, 让企业简单上云。专注于小微企业的应用需求,如企业基本的进销存、询价,报价, 采购、销售、MRP生产制造、品质管理、仓库库存管理、财务应收付款, OA办公单据、CRM等。
311 23
|
6月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
451 7
|
6月前
|
Java 关系型数据库 MySQL
Java汽车租赁系统源码(含数据库脚本)
Java汽车租赁系统源码(含数据库脚本)
119 4
|
6月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
6月前
|
Java
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
本文深入解析了ConcurrentHashMap的实现原理,涵盖JDK 7与JDK 8的区别、静态代码块、构造方法、put/get/remove核心方法等。JDK 8通过Node数组+链表/红黑树结构优化并发性能,采用CAS和synchronized实现高效锁机制。文章还详细讲解了hash计算、表初始化、扩容协助及计数更新等关键环节,帮助读者全面掌握ConcurrentHashMap的工作机制。
139 6
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
|
6月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
225 5

热门文章

最新文章