坦克大战—day 31

博客内容涉及创建了一个名为TankHouse的类,用于在游戏地图中表示玩家的大本营。TankHouse类包含了六个MapTile对象,分别表示老巢的六个部分,并提供了绘制这些地图块的方法。在GameMap类中,初始化地图时会创建一个TankHouse实例,并将其所有元素添加到地图中。整个过程利用了Random数生成器和碰撞检测来确保地图的生成和布局。
摘要由CSDN通过智能技术生成

坦克老巢的绘制

在map包中创建TankHouse类

package map;

import util.Constant;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 玩家的大本营
 */
public class TankHouse {
    //老巢的坐标
    public static final int HOUSE_X = (Constant.FRAME_WIDTH - 3*MapTile.tileW >> 1) + 2;
    public static final int HOUSE_Y = Constant.FRAME_HEIGHT - 2*MapTile.tileW ;
    //一共六块地图块
    private List<MapTile> tiles = new ArrayList<>();

    public TankHouse(){
        tiles.add(new MapTile(HOUSE_X,HOUSE_Y));
        tiles.add(new MapTile(HOUSE_X,HOUSE_Y + MapTile.tileW));
        tiles.add(new MapTile(HOUSE_X + MapTile.tileW,HOUSE_Y));

        tiles.add(new MapTile(HOUSE_X + MapTile.tileW * 2,HOUSE_Y));
        tiles.add(new MapTile(HOUSE_X + MapTile.tileW * 2,HOUSE_Y + MapTile.tileW));
        tiles.add(new MapTile(HOUSE_X + MapTile.tileW,HOUSE_Y + MapTile.tileW));
      
    }
    public void draw(Graphics g){
        for (MapTile tile : tiles) {
            tile.draw(g);
        }
    }

    public List<MapTile> getTiles() {
        return tiles;
    }
}

在GameMap类中调用

TankHouse house;
    
    public GameMap(){
       initMap();
    }
    
    private void initMap() {
        final int count =20;
        for (int i = 0; i < count; i++) {
            MapTile mapTile = MapTilePool.get();
            int x = MyUtil.getRandomNumber(MAP_X,MAP_X+MAP_WIDTH-MapTile.tileW);
            int y = MyUtil.getRandomNumber(MAP_Y,MAP_X+MAP_HEIGHT-MapTile.tileW);
           if(isCollide(tiles,x,y))
           {
               i--;
               continue;
           }
            mapTile.setX(x);
            mapTile.setY(y);
            tiles.add(mapTile);
        }
        house=new TankHouse();
        addHouse();
    }
    //将老巢的所有元素添加到地图的容器中
    private void addHouse(){
        tiles.addAll(house.getTiles());
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值