用java编写一个魔塔地图生成器

之前有闲功夫的时候,用Android写了一款魔塔小游戏,但是对地图的设计却一直没有进行,这次在电脑上写一款专门用来生成地图的魔塔地图生成器。运行之后的效果是这样的:

在左面的框里点击,便会将右侧选择的绘制图案绘制在点击的位置,比如在最左侧蝙蝠的下面添加一个盾牌

嗯,就是这样子的。

主要的代码是这样的

public class GeneratorPanel extends JPanel implements MouseListener{

	JLabel[][] label;
	JLabel select_filling;
	JLabel select_layer;
	ImageIcon[] image;
	JButton button_generate;
	JButton button_save;
	JButton button_surrounding;
	JButton button_crear;
	JComboBox floor_box;
	JComboBox image_box;
	public GeneratorPanel()
	{
		this.setLayout(null);
		image=new ImageIcon[64];
		for(int i=0;i<64;i++)
		{
			image[i]=new ImageIcon("./p"+((i>9)?i:("0"+i))+".png");
			image[i].setImage(image[i].getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));
		}

		label=new JLabel[13][13];
		 for(int i=0;i<13;i++){
	            for(int j=0;j<13;j++){
	                label[i][j]=new JLabel(image[dto.point[0][i][j]]);
	                label[i][j].addMouseListener(this);
	                label[i][j].setBounds(40*i, 40*j, 40, 40);
	                this.add(label[i][j]);
	            }
	        }
		 button_generate=new JButton("生成代码");
		 button_generate.setBounds(540, 490, 200, 20);
		 this.add(button_generate);
		 floor_box=new JComboBox();
		 for(int i=0;i<25;i++)
		 floor_box.addItem(i);
		 floor_box.setBounds(540, 390, 200, 20);
		 this.add(floor_box);
		 image_box=new JComboBox(image);
		 image_box.setBounds(540, 290, 200, 50);
		 this.add(image_box);
		 select_filling=new JLabel("选择绘制图案:");
		 select_filling.setBounds(540, 270, 200, 15);
		 this.add(select_filling);
		 select_layer=new JLabel("选择当前层数");
		 select_layer.setBounds(540, 370, 200, 15);
		 this.add(select_layer);
		 button_save=new JButton("保存");
		 button_save.setBounds(540, 90, 200, 20);
		 this.add(button_save);
		 button_surrounding=new JButton("增加环绕");
		 button_surrounding.setBounds(540, 40, 200, 20);
		 this.add(button_surrounding);
		 button_crear=new JButton("清空当前层");
		 button_crear.setBounds(540, 140, 200, 20);
		 this.add(button_crear);
		 floor_box.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				if(e.getStateChange()==ItemEvent.SELECTED)
				{
					 for(int i=0;i<13;i++){
				            for(int j=0;j<13;j++){
				            	if(!label[i][j].getIcon().equals(image[dto.point[dto.stair][i][j]]))
				            	{
				            		Icon icon=label[i][j].getIcon();
				            		for(int k=0;k<64;k++)
				            		{
				            			if(icon.equals(image[k]))
				            				dto.point[dto.stair][i][j]=k;
				            		}
				            	}
				            }
					 }
					dto.stair=(int)e.getItem();
					 for(int i=0;i<13;i++){
				            for(int j=0;j<13;j++){
				            	label[i][j].setIcon(image[dto.point[dto.stair][i][j]]);
				            }
					 }
				}
				
			}
		});
		 button_save.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				File filename=new File("hehe.txt");
				try {
					filename.createNewFile();
					StringBuffer sb=new StringBuffer();
					 for(int i=0;i<13;i++){
				            for(int j=0;j<13;j++){
				            	if(!label[i][j].getIcon().equals(image[dto.point[dto.stair][i][j]]))
				            	{
				            		Icon icon=label[i][j].getIcon();
				            		for(int k=0;k<64;k++)
				            		{
				            			if(icon.equals(image[k]))
				            				dto.point[dto.stair][i][j]=k;
				            		}
				            	}
				            }
					 }
					for(int i=0;i<25;i++)
						for(int j=0;j<13;j++)
							for(int k=0;k<13;k++)
							{
								sb.append(dto.point[i][j][k]+" ");
							}
					sb.append("\r\n");
					BufferedWriter out=new BufferedWriter(new FileWriter(filename));
					out.write(sb.toString());
					out.flush();
					out.close();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				
			}
		});
		 button_surrounding.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				for(int j=0;j<13;j++)
					for(int k=0;k<13;k++)
					{
						if(j==0||k==0||j==12||k==12)
						{
							label[j][k].setIcon(image[1]);
						}
					}
				
			}
		});
		 button_crear.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				for(int j=0;j<13;j++)
					for(int k=0;k<13;k++)
					{
						label[j][k].setIcon(image[0]);
					}
				
			}
		});
		 button_generate.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				for(int i=0;i<25;i++)
					for(int j=0;j<13;j++)
						for(int k=0;k<13;k++)
						{
							if(dto.point[i][j][k]>0)
							{
								if(dto.point[i][j][k]<33)
								{
								System.out.println("wallpoint["+i+"]["+j+"]["+k+"]=-"+dto.point[i][j][k]+";");
								}
								else 
								{
									System.out.println("wallpoint["+i+"]["+j+"]["+k+"]="+(dto.point[i][j][k]-32)+";");
								}
							}
						}
				File filename=new File("config");
				try {
					filename.createNewFile();
					StringBuffer sb=new StringBuffer();
					 for(int i=0;i<13;i++){
				            for(int j=0;j<13;j++){
				            	if(!label[i][j].getIcon().equals(image[dto.point[dto.stair][i][j]]))
				            	{
				            		Icon icon=label[i][j].getIcon();
				            		for(int k=0;k<64;k++)
				            		{
				            			if(icon.equals(image[k]))
				            				dto.point[dto.stair][i][j]=k;
				            		}
				            	}
				            }
					 }
					for(int i=0;i<25;i++)
						for(int j=0;j<13;j++)
							for(int k=0;k<13;k++)
							{
								if(dto.point[i][j][k]<33)
									sb.append("-"+dto.point[i][j][k]+" ");
								else
									sb.append((dto.point[i][j][k]-32)+" ");
							}
					sb.append("\r\n");
					BufferedWriter out=new BufferedWriter(new FileWriter(filename));
					out.write(sb.toString());
					out.flush();
					out.close();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
		 
	}

	@Override
	public void mouseClicked(MouseEvent e) {


	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		int i=((JLabel)(e.getSource())).getX()/40;
		int j=((JLabel)(e.getSource())).getY()/40;
		label[i][j].setIcon((Icon) image_box.getSelectedItem());
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}

程序太简单了,主要是监听器的设计等等,没有什么难点。

可以运行的工程在这里:

https://download.csdn.net/download/dongze2/11225032

欢迎讨论!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁华渲染悲凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值