package jstarcraft.core;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.DirectColorModel;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ImageIcon;
import jstarcraft.icon.BaseIcon;
import jstarcraft.icon.HouseIcon;
import jstarcraft.icon.ScvIcon;
import jstarcraft.tile.Barrack;
import jstarcraft.tile.Headquarter;
import jstarcraft.tile.House;
import jstarcraft.tile.Marine;
import jstarcraft.tile.Mine;
import jstarcraft.tile.Scv;
import jstarcraft.tile.Sprite;
import jstarcraft.tile.Supply;
import jstarcraft.tile.Tile;
import jstarcraft.tile.Sprite.Animation;
/**
* 游戏中资源管理的类,包括图片资源和常量字符串等。
*
* @author Xewee.Zhiwei.Wang
* @time 2011-9-14 下午06:30:35
*/
public class ResourceManager {
private GridMap gridMap;
public static ResourceManager resourceManager;
//图片缓存的Map
//key为图片文件的文件名,value为图片文件的Image对象
private static Map<String,Image> IMAGE_CACHE = new HashMap<String, Image>();
/**
* 根据文件名从IMAGE_CACHE中得到图片的Image对象,
* 若不存在这个key,则新建并加入到IMAGE_CACHE。
*
* @author Xewee.Zhiwei.Wang
* @param fileName
* @return Image
*/
public static Image loadImage(String fileName) {
if(!IMAGE_CACHE.containsKey(fileName)){
// System.out.println(ResourceManager.class.getResource("/res/images/"+fileName));
Image image = new ImageIcon("res/images/"+fileName).getImage();
if (image != null) {
IMAGE_CACHE.put(fileName, image);
return image;
}
else {
return null;
}
}
return IMAGE_CACHE.get(fileName);
}
public static GridMapRender load(int type,List<Integer> types){
resourceManager = new ResourceManager(type,types);
return resourceManager.gridMap.getTileMapRender();
}
public GridMap getGridMap() {
return gridMap;
}
/**
* 初始化缩略图
* @return
*/
private Image initMapBg(){
BufferedImage buffer = new BufferedImage(128,128,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = (Graphics2D) buffer.getGraphics();
for (int y = 0; y < gridMap.getHeight(); ++y) {
for (int x = 0; x < gridMap.getWidth(); ++x) {
AffineTransform affineTransform = new AffineTransform();
affineTransform.setToTranslation(x*10, y*5);
affineTransform.scale(0.2, 0.2);
g2.drawImage(Constant.IMAGE_BG, affineTransform, null);
}
}
return buffer;
}
private ResourceManager(int type,List<Integer> types) {
Constant.load();
gridMap = loadMap(type,types);
Constant.IMAGE_MAP_BG = initMapBg();
Constant.progress = Constant.TOTAL;
}
private GridMap loadMap(int type,List<Integer> types) {
List<String> list = new ArrayList<String>();
int width = readMap(list, "startmap1.map");
GridMap map = new GridMap(width, list.size());
GridMapRender mapRender = new GridMapRender(map);
mapRender.type = type;
map.setTileMapRender(mapRender);
map.setIconMap(Constant.ICON_MAP);
for (int y = 0; y < list.size(); ++y) {
// 读取每一行
String s = list.get(y);
for (int x = 0; x < s.length(); ++x) {
int code = (int)s.charAt(x)-40;
if(code<0||code>Constant.TILE_TABLE.length)
continue;
if(code<80&&!types.contains((code/20)))
continue;
Tile tile = Constant.TILE_TABLE[code].clone(x, y,map);
tile.setHealth(1.0f);
map.add(tile);
//确定当前视觉范围
if(tile.getType()==type&&tile instanceof Headquarter){
//获取当前基地坐标
int hqX = GridMapRender.tileXToPx(tile.getTileX());
int hqY = GridMapRender.tileYToPx(tile.getTileY());
Point size = tile.getSize();
//获取屏幕中心坐标
int centerX = (800-GridMapRender.tileXToPx(size.x))/2;
int centerY = (600-GridMapRender.tileYToPx(size.y))/2;
mapRender.setOffset(Math.max(hqX-centerX, 0),Math.max(hqY-centerY, 0));
}
}
}
return map;
}
/**
* 解析地图文件,并将解析的字符串结果保存到list中
*
* @author Xewee.Zhiwei.Wang
* @time 2011-9-14 下午07:11:56
* @param list
* @param fileName
* @return
*/
private static int readMap(List<String> list, String fileName) {
BufferedReader br = null;
int width = 0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream("res/map/" + fileName)));
String line = null;
while ((line = br.readLine()) != null) {
if (line.startsWith("#"))
continue;
list.add(line);
width = Math.max(width, line.length());
}
return width;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static class Constant {
public static String IP;
public static Color GREEN;
public static Color RED=Color.red;
//背景
public static Image IMAGE_BG;
//控制台
public static Image IMAGE_CONTROL;
//光照效果
public static Image SCV_SPARK;
//矿产
public static Image ICON_MINE;
//人口
public static Image ICON_MAN;
//矿产错误信息
public static String MINE_ERROR="没资源咯,还是多去采点矿吧";
//人口错误信息
public static String MAN_ERROR="太挤啦,快造点房子出来吧";
public static String BUILD_ERROR="地基不稳,不能修在这里";
public static Image IMAGE_MAP_BG;
//ICONS
public static final BaseIcon[][] SCV_ICONS = new BaseIcon[2][3];
public static final BaseIcon[][] HQ_ICONS = new BaseIcon[2][3];
public static final BaseIcon[][] BACK_ICONS = new BaseIcon[2][3];
//ICON资源表
public static final Map<Integer,BaseIcon[][]> ICON_TABLE = new HashMap<Integer, BaseIcon[][]>();
//Tile资源表
public static final Tile[] TILE_TABLE = new Tile[82];
private static final int TYPE = 4;
public static final int TYPE_SIZE = 20;
//进度控制
private static float progress;
private static final float TOTAL=19;
static void load(){
IMAGE_BG = loadImage("bg1.gif");
IMAGE_CONTROL = loadImage("panel/main.gif");
SCV_SPARK = loadImage("unit/0_scv_spark.gif");
ICON_MINE = loadImage("panel/mine.gif");
ICON_MAN = loadImage("panel/man.gif");
GREEN = new Color(16, 252, 24);
initTile();
}
private static final Map<String, BaseIcon> ICON_MAP = new HashMap<String, BaseIcon>();
private static int count = 0;
private static BaseIcon createIcon(BaseIcon icon){
ICON_MAP.put("icon"+(++count), icon);
return icon;
}
private static void initTile(){
//加载图片
Image scv = loadImage("unit/0_scv_red.gif");
Image marine = loadImage("unit/0_marine_red.gif");
Image marineFight = loadImage("unit/0_fight_marine_red.png");
// Image tank = loadImage("unit/0_tank.gif");
Image supply = loadImage("build/0_supply_red.gif");
Image barrack = loadImage("build/0_barrack_red.gif");
Image base = loadImage("build/0_hq_red.gif");
Image mine = loadImage("block/mine.gif");
//转换成buffer
BufferedImage scv_buffer=imageToBuffer(scv);
BufferedImage marine_buffer=imageToBuffer(marine);
BufferedImage marineFight_buffer=imageToBuffer(marineFight);
BufferedImage supply_buffe
没有合适的资源?快使用搜索试试~ 我知道了~
基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip
共792个文件
html:299个
svn-base:264个
java:90个
0 下载量 114 浏览量
2024-03-05
20:01:13
上传
评论
收藏 2.06MB ZIP 举报
温馨提示
基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip 基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于java的开发源码-即时战略游戏 StarCraft Ⅰ.zip (792个子文件)
all-wcprops 5KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 1KB
all-wcprops 766B
all-wcprops 736B
all-wcprops 657B
all-wcprops 548B
all-wcprops 526B
all-wcprops 198B
all-wcprops 108B
all-wcprops 105B
all-wcprops 104B
all-wcprops 103B
all-wcprops 102B
all-wcprops 102B
all-wcprops 101B
all-wcprops 100B
all-wcprops 97B
all-wcprops 97B
all-wcprops 97B
all-wcprops 92B
all-wcprops 90B
all-wcprops 81B
all-wcprops 81B
startmap1.map.bak 13KB
stylesheet.css 1KB
entries 7KB
entries 3KB
entries 3KB
entries 2KB
entries 2KB
entries 2KB
entries 2KB
entries 2KB
entries 1KB
entries 1KB
entries 1KB
entries 1KB
entries 1KB
entries 1KB
entries 1KB
entries 912B
entries 895B
entries 724B
entries 717B
entries 687B
entries 569B
entries 560B
entries 557B
entries 435B
entries 388B
entries 246B
0_refinery_blue.gif 15KB
0_barrack_red.gif 14KB
0_barrack_blue.gif 14KB
0_refinery_red.gif 12KB
0_academy_red.gif 9KB
0_tank.gif 9KB
0_scv_red.gif 8KB
0_supply_red.gif 7KB
0_hq_red.gif 7KB
0_supply_blue.gif 7KB
0_hq_blue.gif 7KB
main.gif 6KB
复件 0_supply.gif 6KB
console.gif 6KB
0_medic_red.gif 6KB
0_firebat_red.gif 5KB
0_marine_red.gif 5KB
0_firebat_red_atk3.gif 5KB
0_firebat_atk3.gif 5KB
0_firebat_red_atk4.gif 5KB
0_firebat_atk4.gif 5KB
0_marine_blue.gif 4KB
0_valture.gif 4KB
0_firebat_atk2.gif 4KB
0_firebat_red_atk2.gif 4KB
0_wraith.gif 4KB
0_firebat_red_atk0.gif 4KB
0_gun_tower_red.gif 4KB
0_firebat_atk1.gif 3KB
0_firebat_red_atk1.gif 3KB
ves.gif 3KB
0_firebat_atk0.gif 3KB
0_scv_blue.gif 3KB
0_gun_tower_blue.gif 3KB
0_marine_blue_atk4.gif 3KB
0_marine_blue_atk0.gif 3KB
0_marine_blue_atk2.gif 3KB
0_marine_atk2.gif 3KB
0_marine_red_atk2.gif 3KB
0_marine_blue_atk1.gif 2KB
0_marine_atk1.gif 2KB
0_marine_red_atk1.gif 2KB
0_marine_atk4.gif 2KB
0_marine_red_atk4.gif 2KB
0_marine_red_atk0.gif 2KB
0_marine_blue_atk3.gif 2KB
共 792 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
快乐无限出发
- 粉丝: 1192
- 资源: 7365
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- cad定制家具平面图工具-(FG)门板覆盖柜体
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt
- 基于Java的财务报销管理系统后端开发源码
- 基于Python核心技术的cola项目设计源码介绍
- 基于Python及多语言集成的TSDT软件过程改进设计源码
- 基于Java语言的歌唱比赛评分系统设计源码
- 基于JavaEE技术的课程项目答辩源码设计——杨晔萌、李知林、岳圣杰、张俊范小组作品
- 基于Java原生安卓开发的蔚蓝档案娱乐应用设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功