📄 mapediter.java
字号:
package mapEditer;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
//import java.util.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.util.EventListener;
import like.graphics.*;
import pp.actor.*;
/*******************************************************
*通过MAP类的修改,制作和更改地图文件
*然后用ObjectInputStream,ObjectOutputStream读写地图文件
*******************************************************/
public class MapEditer extends Frame
{
MouseHandle mouseHandle = new MouseHandle();
MenuHandle menuHandle = new MenuHandle();
ButtonHandle buttonHandle = new ButtonHandle();
StateHandle stateHandle = new StateHandle();
ComboBoxHandle comboBoxHandle = new ComboBoxHandle();
KeyHandle keyHandle = new KeyHandle();
Map map;
Image imageRecord;
int tileRecord , fraiseRecord;
String stringRecord , resType;
JComboBox maxPlayers , locatePlayer;
Panel tile , fraise , pc , pb , pu , cover;
int floorORfraise=0;//0代表现在看到FLOOR面板,1代表现在看到Fraise面板
Button b1 , b2 , coverAll , setPlayer , player1 , player2;
Label jlb , setPlayerLabel , types;
JLabel iconlbl;
JButton []flr = new JButton[20];
JButton []fs = new JButton[20];
CardLayout clo;
Graphics g , tmpg;
Image tmpImage;
MenuBar main;
Menu file , edit;
MenuItem save , load , exit , init , about;
CheckboxGroup btnMenuGroup;
JPopupMenu popmu;
JMenuItem fillX,fillY;
int mouseX , mouseY;
CheckboxMenuItem showGrid;
JComboBox setType;
boolean tileorfraise;//if select tile now tileorfraise=true
//else tileorfraise=false;
boolean imageorstring;//if click image this=true else this =false;
boolean pressingCtrl=false;
MyPanel sim;
MapEditer newframe;
//地图元素(图片)都从group里加载
ResourceGroup group ;
public MapEditer(String resType)
{
super();
this.resType = resType;
group = new ResourceGroup(resType);
//menu part
main = new MenuBar();
file = new Menu("文件");
file.setShortcut(new MenuShortcut(KeyEvent.VK_F));
save = new MenuItem("保存地图");
save.setShortcut(new MenuShortcut(KeyEvent.VK_S));
save.addActionListener(menuHandle);
load = new MenuItem("载入地图");
load.setShortcut(new MenuShortcut(KeyEvent.VK_O));
load.addActionListener(menuHandle);
init = new MenuItem("初始化");
init.setShortcut(new MenuShortcut(KeyEvent.VK_I));
init.addActionListener(menuHandle);
about = new MenuItem("关于");
about.setShortcut(new MenuShortcut(KeyEvent.VK_A));
about.addActionListener(menuHandle);
exit = new MenuItem("退出");
exit.setShortcut(new MenuShortcut(KeyEvent.VK_E));
exit.addActionListener(menuHandle);
file.add(load);
file.add(save);
file.addSeparator();
file.add(init);
file.addSeparator();
file.add(about);
file.addSeparator();
file.add(exit);
edit = new Menu("编辑");
edit.setShortcut(new MenuShortcut(KeyEvent.VK_E));
showGrid = new CheckboxMenuItem("显示网格");
showGrid.addItemListener(stateHandle);
edit.add(showGrid);
main.add(file);
main.add(edit);
setMenuBar(main);
popmu = new JPopupMenu();
fillX = new JMenuItem("填充行");
fillX.addActionListener(menuHandle);
fillY = new JMenuItem("填充列");
fillY.addActionListener(menuHandle);
popmu.add(fillX);
popmu.add(fillY);
//添加一些列GUI组件
clo = new CardLayout();
//button组件
b1 = new Button("地表");
b2 = new Button("障碍物");
b1.addActionListener(buttonHandle);
b2.addActionListener(buttonHandle);
pb = new Panel(new FlowLayout(FlowLayout.LEFT));
pb.setBackground(Color.GRAY);
pb.add(b1);
pb.add(b2);
tile = new Panel(new FlowLayout(FlowLayout.LEFT));
fraise = new Panel(new FlowLayout(FlowLayout.LEFT));
group.init(this);
setTilePanel();
setFraisePanel();
cover = new Panel(new FlowLayout(FlowLayout.RIGHT));
coverAll = new Button("填充地表");
coverAll.addActionListener(buttonHandle);
cover.add(coverAll);
cover.add(coverAll);
tile.add(cover);
pc = new Panel();
pc.setLayout(clo);
pc.add(tile,"1");
pc.add(fraise,"2");
pu = new Panel(null);
jlb = new Label("当前选中图像:");
jlb.setBackground(Color.RED);
iconlbl = new JLabel();
player1 = new Button("玩家1位置");
player2 = new Button("玩家2位置");
player1.addActionListener(buttonHandle);
player2.addActionListener(buttonHandle);
types = new Label("设置风格");
setType = new JComboBox();
creatsetType(setType);
setType.addActionListener(comboBoxHandle);
pu.add(jlb);
pu.add(iconlbl);
pu.add(player1);
pu.add(player2);
pu.add(types);
pu.add(setType);
jlb.setBounds(5,5,80,40);
iconlbl.setBounds(30,48,80,80);
player1.setBounds(5,132,80,40);
player2.setBounds(5,175,80,40);
types.setBounds(5,220,80,40);
setType.setBounds(5,265,80,40);
sim = new MyPanel();
sim.setBackground(Color.BLACK);
sim.addMouseListener(mouseHandle);
sim.addKeyListener(keyHandle);
this.setLayout(null);
this.setSize(706,696);//画图的区域的边界为3
this.setResizable(false);
add(pc);
add(pb);
add(sim);
add(pu);
pc.setBounds(0,50,706,90);
pb.setBounds(0,140,706,30);
sim.setBounds(0,170,606,526);
pu.setBounds(606,170,100,526);
mapInit();
//exit
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
this.setLocation((device.getDisplayMode().getWidth()-this.getWidth())/2,0);
setVisible(true);
tmpImage = sim.createImage(606,526);
tmpg = tmpImage.getGraphics();
sim.setSource(tmpg,tmpImage,group,map);
}
private void creatsetType(JComboBox jcb)
{
jcb.addItem("");
jcb.addItem("小区");
jcb.addItem("工厂");
jcb.addItem("森林");
jcb.addItem("墓地");
jcb.addItem("沙漠");
}
public void mapInit(){
map = new Map();
map.playerMax=2;
map.configureName=resType;
imageRecord = group.getImage(1,1);
tileRecord = 1;
this.iconlbl.setIcon((Icon)new ImageIcon(imageRecord));
tileorfraise = true;
imageorstring = true;
showGrid.setState(false);
iconlbl.setVisible(true);
}
public void setTilePanel()
{
for(int tileImageAt=1;tileImageAt<=group.tileNumbers;tileImageAt++)
{
flr[tileImageAt]=new JButton(new ImageIcon(group.getImage(1,tileImageAt)));
flr[tileImageAt].setBorder(BorderFactory.createEmptyBorder());
flr[tileImageAt].setIgnoreRepaint(true);
tile.add(flr[tileImageAt]);
flr[tileImageAt].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
imageorstring = true;
tileorfraise = true;
imageRecord = ((ImageIcon)((JButton)e.getSource()).getIcon()).getImage();
iconlbl.setIcon((Icon)new ImageIcon(imageRecord));
iconlbl.setVisible(true);
for(int n=1;n<=group.tileNumbers;n++)
{
if(imageRecord==group.getImage(1,n))
{
tileRecord=n;
break;
}
}
}
});
}
}
public void setFraisePanel()
{
for(int fraiseImageAt=1;fraiseImageAt<=group.fraiseNumbers;fraiseImageAt++)
{
fs[fraiseImageAt]=new JButton(new ImageIcon(group.getImage(2,fraiseImageAt)));
fs[fraiseImageAt].setBorder(BorderFactory.createEmptyBorder());
fs[fraiseImageAt].setIgnoreRepaint(true);
fraise.add(fs[fraiseImageAt]);
fs[fraiseImageAt].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
imageorstring = true;
tileorfraise = false;
imageRecord = ((ImageIcon)((JButton)e.getSource()).getIcon()).getImage();
iconlbl.setIcon((Icon)new ImageIcon(imageRecord));
iconlbl.setVisible(true);
for(int n=1;n<=group.fraiseNumbers;n++)
{
if(imageRecord==group.getImage(2,n))
{
fraiseRecord=n;
break;
}
}
}
});
}
}
public void fillx()
{
for(int i=14;i>=0;i--)
{
if(!imageorstring)return;
if(tileorfraise)
{
map.tile[(mouseY-3)/40][i]=tileRecord;
}
else
{
if(map.tile[(mouseY-3)/40][i]!=0)
map.fraise[(mouseY-3)/40][i]=fraiseRecord;
}
}
}
public void filly()
{
for(int i=0;i<13;i++)
{
if(!imageorstring)return;
if(tileorfraise)
{
map.tile[i][(mouseX-3)/40]=tileRecord;
}
else
{
if(map.tile[i][(mouseX-3)/40]!=0)
map.fraise[i][(mouseX-3)/40]=fraiseRecord;
}
}
}
public static void main(String args[])
{
new MapEditer("configures\\xq.ini");
}
private class KeyHandle extends KeyAdapter
{
public void keyPressed(KeyEvent e)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -