JAVA GUI文字游戏

时间:2024-03-27 22:44:22

本游戏是突发一个想法写出来的,只写了个大概,大概如下:

JAVA GUI文字游戏
游戏菜单界面
JAVA GUI文字游戏
游戏主界面

 

JAVA GUI文字游戏
人物详情界面

 

JAVA GUI文字游戏
背包界面
JAVA GUI文字游戏
装备详情界面

游戏介绍:

  1. 游戏目录为src存放代码,lib存放jar包(build path加入jar),res存放资源
  2. 类列表:

    GameConfig 游戏配置接口

    MenuGame 游戏菜单(含有main方法创建new menuGame)

    Player 玩家类

    StarGame 游戏界面

    GameUtil 游戏工具类

    BackpackJFrame 背包界面

    EquipDetailJFrame 背包物品详情界面

    PlayerJFrame 角色详情界面

    UnitXLS 操作XLS工具类

  3. 方法注释:太多了有时间再写吧,认真学习的,加我QQ问也行(大部分我在代码中都有注释)

  4. 本来为了放数据,代码执行会在D盘建一个文字游戏的文件夹,然而,我并没有发现有啥用

最最重要的代码下载地址↓↓↓↓:

链接:https://pan.baidu.com/s/13f3wNIFudG8GwGdX6q34AA 
提取码:0emf

注:开发不易,有票子的老铁可以在这下载→:

游戏接口:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 游戏接口
 * 
 * @author 莫言情难忘 1179307527
 *
 */
public interface GameConfig {

	String[][] MAP = new String[10][10];// 新手村地图
	String[][] MAPabout = new String[10][10];// 新手村地图注释
	int[][][] coordinate = new int[10][10][10];// 10个新手村这么大的地图
	Player player = new Player();
	List<Map<String, String>> zhuangbeilist = new ArrayList<Map<String, String>>();// 所有装备
}

MenuGame.java

游戏菜单,main方法在里面,还有初始化装备列表

import java.awt.Container;
import java.awt.Desktop;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;

/**
 * 
 * @author 莫言情难忘
 * QQ 1179307527
 * 游戏菜单
 */
public class MenuGame implements GameConfig{
	
	public static JFrame loginFrame;// 启动界面
	
	public MenuGame() {
		Initialization1();
		loginFrame = new JFrame("文字游戏");
		// 设置大小
		loginFrame.setSize(200, 235);
		// 设置窗体居中
		loginFrame.setLocationRelativeTo(null);
		// 设置不可最大化
		loginFrame.setResizable(false);
		// 设置没有标题栏
		// loginFrame.setUndecorated(true);
		// 设置图标
		Image icon = Toolkit.getDefaultToolkit().getImage("images/icon.png");
		loginFrame.setIconImage(icon);
		// 设置关闭
		loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 设置字体
		Font font = new Font("楷体", 0, 16);
		// 设置文本字体
		UIManager.put("Label.font", font);
		// 面板,用于添加按钮
		JPanel jPanel = new JPanel();
		Container container = loginFrame.getContentPane();
		// 按钮实例化
		JButton stargame = new JButton("开始游戏");
		JButton duqugame = new JButton("读取游戏");
		JButton guanyugame = new JButton("关于游戏");
		JButton helpgame = new JButton("游戏帮助");
		JButton tuichugame = new JButton("退出游戏");
		// 面板添加5个菜单按钮
		jPanel.add(stargame);
		jPanel.add(duqugame);
		jPanel.add(guanyugame);
		jPanel.add(helpgame);
		jPanel.add(tuichugame);
		// 为按钮设置字体
		stargame.setFont(font);
		duqugame.setFont(font);
		guanyugame.setFont(font);
		tuichugame.setFont(font);
		helpgame.setFont(font);
		// 添加面板
		container.add(jPanel);
		// 开始游戏按钮监听
		stargame.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {

				// 开始游戏
				StartGame ks = new StartGame();
				loginFrame.dispose();
			}
		});
		// 读取游戏按钮监听
		duqugame.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 警告信息框
				JOptionPane.showMessageDialog(jPanel, "后续开发", "读取存档", JOptionPane.WARNING_MESSAGE);
			}
		});
		// 关于按钮被单击
		guanyugame.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 弹出文本内容
				String guanyu = "本软件为文字类游戏,ok";
				// 信息框
				JOptionPane.showMessageDialog(null, guanyu, "关于", JOptionPane.PLAIN_MESSAGE);
			}
		});
		// 帮助按钮被单击
		helpgame.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 弹出文本内容
				String help = "这是帮助";
				// 信息框
				JOptionPane.showMessageDialog(null, help, "帮助", JOptionPane.PLAIN_MESSAGE);
			}
		});
		// 退出游戏监听
		tuichugame.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				int res = JOptionPane.showConfirmDialog(null, "我们正在努力添加游戏各种功能\n" + "敬请期待", "退出?",
						JOptionPane.YES_NO_OPTION);
				if (res == JOptionPane.YES_OPTION) {
					Desktop desktop = Desktop.getDesktop();
					try {
						desktop.browse(new URI("http://www.520mylove.com"));
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (URISyntaxException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.exit(0);// 退出
				}
			}
		});
		// 显示窗口
		loginFrame.setVisible(true);
	}
	

	/**
	 * 初始化1,判断是否存在游戏文档文件夹(游戏文档包括游戏存档等)
	 */
	void Initialization1() {
		File file = new File("D:\\文字游戏");//游戏目录
		File file1 = new File("D:\\文字游戏\\map");//游戏地图
		File file2 = new File("D:\\文字游戏\\cundang");//游戏存档
		if (!file.exists() && !file.isDirectory()) {
			// 不存在此文件夹,建立此文件夹
			file.mkdir();
		}
		if (!file1.exists() && !file1.isDirectory()) {
			// 不存在此文件夹,建立此文件夹
			file1.mkdir();
		}
		if (!file2.exists() && !file2.isDirectory()) {
			// 不存在此文件夹,建立此文件夹
			file2.mkdir();
		}
	}
	
	public static void main(String[] args) {
		//加载游戏装备列表
		String 所有装备 = "res/装备匹配表.xls";
		String 队列1[] = {"ID", "品质", "位置", "名称", "说明", "等级", "善恶", "门派", "生命", "攻击", "防御", "速度", "暴击",
				"命中", "闪避", "生命加成", "攻击加成", "防御加成", "速度加成", "吸血"};
		UnitXLS.AddXls(zhuangbeilist,所有装备,队列1);
		//加载当前装备列表
		String 角色装备 = "res/角色装备.xls";
		String 队列2[] = {"ID", "名称"};
		UnitXLS.AddXls(player.juesezhuangbeilist,角色装备,队列2);
		new MenuGame();
	}
	
}

StartGame.java

游戏主界面(地图移动,打开人物界面等)

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;

/**
 * 游戏初始界面
 * 
 * @author 莫言情难忘 1179307527
 *
 */
public class StartGame extends JFrame implements GameConfig {

	// 游戏面板
	JPanel panel;
	int PlayerX = 1;
	int PlayerY = 1;
	JButton shang, xia, zuo, you, zhong;

	/**
	 * 设置窗体
	 */
	public StartGame() {

		// 读取游戏map
		ReadMap();

		this.setTitle("文字类");
		this.setSize(450, 485);// 450*450 标题栏占35
		this.setLayout(null);
		// 设置关闭方式
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 设置窗体居中
		this.setLocationRelativeTo(null);
		// 设置字体
		Font font = new Font("楷体", 0, 20);
		// 设置文本字体
		UIManager.put("Label.font", font);
		// 上
		shang = new JButton("上城");
		shang.setBounds(150, 0, 150, 150);
		shang.setFont(font);
		this.add(shang);
		shang.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ReMap(0);
			}
		});
		// 下
		xia = new JButton("下城");
		xia.setBounds(150, 300, 150, 150);
		xia.setFont(font);
		this.add(xia);
		xia.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ReMap(1);
			}
		});
		// 左
		zuo = new JButton("左城");
		zuo.setBounds(0, 150, 150, 150);
		zuo.setFont(font);
		this.add(zuo);
		zuo.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ReMap(2);
			}
		});
		// 右
		you = new JButton("右城");
		you.setBounds(300, 150, 150, 150);
		you.setFont(font);
		this.add(you);
		you.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ReMap(3);
			}
		});
		// 中
		zhong = new JButton("该城");
		zhong.setBounds(150, 150, 150, 150);
		zhong.setFont(font);
		this.add(zhong);
		zhong.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ReMap(4);
			}
		});
		// 人物
		JButton renwu = new JButton("人物");
		renwu.setBounds(0, 0, 150, 150);
		renwu.setFont(font);
		this.add(renwu);
		renwu.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				new PlayerJFrame();
				// String[] a = {"da","da","da"};
				// int va =JOptionPane.showOptionDialog(StartGame.this, "人物详情", "标题",
				// JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, a, "da");

			}
		});
		// 背包
		JButton backpack = new JButton("背包");
		backpack.setBounds(300, 0, 150, 150);
		backpack.setFont(font);
		this.add(backpack);
		backpack.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				new BackpackJFrame();
			}
		});
		// 设置
		JButton shezhi = new JButton("设置");
		shezhi.setBounds(0, 300, 150, 150);
		shezhi.setFont(font);
		this.add(shezhi);
		shezhi.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub

			}
		});
		// 特殊
		JButton teshu = new JButton("特殊");
		teshu.setBounds(300, 300, 150, 150);
		teshu.setFont(font);
		this.add(teshu);
		teshu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String pojie = JOptionPane.showInputDialog("请输入密码");

				if (pojie != null && pojie.equals("我爱文字游戏1179307527")) {
					player.PoJie1();
					JOptionPane.showMessageDialog(null, "输入key成功,开启贵族的待遇", "**success", JOptionPane.PLAIN_MESSAGE);
				} else if (pojie != null && pojie.equals("我有故事你有酒吗")) {
					String aString = "输入KEY值成功,我有故事你有酒吗?\n" + "真的,谁没有藏在心底的故事呢?";
					JOptionPane.showMessageDialog(null, aString, "来,干杯", JOptionPane.PLAIN_MESSAGE);
				} else {
					JOptionPane.showMessageDialog(null, "输入key失败", "**失败", JOptionPane.PLAIN_MESSAGE);
				}

			}
		});
		shang.setText(MAP[PlayerX - 1][PlayerY]);
		xia.setText(MAP[PlayerX + 1][PlayerY]);
		zuo.setText(MAP[PlayerX][PlayerY - 1]);
		you.setText(MAP[PlayerX][PlayerY + 1]);
		zhong.setText(MAP[PlayerX][PlayerY]);
		this.setResizable(false);
		this.setVisible(true);
	}

	/**
	 * 读取地图及地图介绍 地图为res文件夹的MAP.txt 地图介绍为res文件夹的MAPabout.txt
	 */
	void ReadMap() {
		// 加载地图
		try {
			File file = new File("res\\MAP.txt");
			InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
			BufferedReader br = new BufferedReader(reader);
			// 读取地图的主要操作
			for (int i = 0; i < 10; i++) {
				String[] iString = br.readLine().split(";");
				for (int j = 0; j < 10; j++) {
					MAP[i][j] = iString[j];
				}
			}
			// 关闭输出流
			reader.close();
		} catch (Exception e) {
			// 处理异常
		}

		// 加载地图介绍
		try {
			File file = new File("res\\MAPabout.txt");
			InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
			BufferedReader br = new BufferedReader(reader);
			// 读取地图的主要操作
			for (int i = 0; i < 10; i++) {
				for (int j = 0; j < 10; j++) {
					String iString = br.readLine();
					MAPabout[i][j] = iString;
				}
			}
			// 关闭输出流
			reader.close();
		} catch (Exception e) {
			// 处理异常
		}

	}

	/**
	 * 刷新地图
	 * 
	 * @param j
	 *            0=上 1=下 2=左 3=右 4=中 获取移动方向
	 */
	void ReMap(int key) {
		switch (key) {
		// 上
		case 0:
			if (MAP[PlayerX - 1][PlayerY] != null && !MAP[PlayerX - 1][PlayerY].equals("空")) {
				PlayerX--;
				shang.setText(MAP[PlayerX - 1][PlayerY]);
				xia.setText(MAP[PlayerX + 1][PlayerY]);
				zuo.setText(MAP[PlayerX][PlayerY - 1]);
				you.setText(MAP[PlayerX][PlayerY + 1]);
				zhong.setText(MAP[PlayerX][PlayerY]);
			}
			break;
		// 下
		case 1:
			if (MAP[PlayerX + 1][PlayerY] != null && !MAP[PlayerX + 1][PlayerY].equals("空")) {
				PlayerX++;
				shang.setText(MAP[PlayerX - 1][PlayerY]);
				xia.setText(MAP[PlayerX + 1][PlayerY]);
				zuo.setText(MAP[PlayerX][PlayerY - 1]);
				you.setText(MAP[PlayerX][PlayerY + 1]);
				zhong.setText(MAP[PlayerX][PlayerY]);
			}
			break;
		// 左
		case 2:
			if (MAP[PlayerX][PlayerY - 1] != null && !MAP[PlayerX][PlayerY - 1].equals("空")) {
				PlayerY--;
				shang.setText(MAP[PlayerX - 1][PlayerY]);
				xia.setText(MAP[PlayerX + 1][PlayerY]);
				zuo.setText(MAP[PlayerX][PlayerY - 1]);
				you.setText(MAP[PlayerX][PlayerY + 1]);
				zhong.setText(MAP[PlayerX][PlayerY]);
			}
			break;
		// 右
		case 3:
			if (MAP[PlayerX][PlayerY + 1] != null && !MAP[PlayerX][PlayerY + 1].equals("空")) {
				PlayerY++;
				shang.setText(MAP[PlayerX - 1][PlayerY]);
				xia.setText(MAP[PlayerX + 1][PlayerY]);
				zuo.setText(MAP[PlayerX][PlayerY - 1]);
				you.setText(MAP[PlayerX][PlayerY + 1]);
				zhong.setText(MAP[PlayerX][PlayerY]);
			}
			break;
		// 中
		case 4:
			int res = JOptionPane.showConfirmDialog(null, GameUtil.StringToHtml(MAPabout[PlayerX][PlayerY], 10),
					"是否进入" + MAP[PlayerX][PlayerY] + "?", JOptionPane.YES_NO_OPTION);
			if (res == JOptionPane.YES_OPTION) {
				// 此处处理进入方法
				System.out.println("进入了" + MAP[PlayerX][PlayerY]);
			} else {
				// 此处可做不处理
				System.out.println("没进入" + MAP[PlayerX][PlayerY]);
			}
			break;
		default:
			JOptionPane.showMessageDialog(this, "219", "default错误", JOptionPane.WARNING_MESSAGE);
			break;
		}

	}
}

Player.java

玩家类,里面大多是变量,例如攻击防御等信息

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author 莫言情难忘 1179307527
 *
 */
public class Player {
	String name = "情难忘";// 姓名
	int age = 15;// 年龄(默认年龄在70岁死亡,冒险在15岁)
	String sex = "男";// 性别(加入帮派限制)(转职?)
	String designation = "无";// 称号
	int leave = 0;// 等级,每级增加
	int jingyan = 0;// 当前经验
	int[] shengjijingyan = { 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800, 409600,
			999999 };// 升级所需的经验
	int life = 100;// 生命值
	int attack = 20;// 攻击(攻击算法)
	int defend = 10;// 防御(防御算法)
	int speed = 5;// 速度(速度大的先手)

	int violent = 2; // 暴击率(2倍)(百分比,最大100,最小0)
	int goodevil = 0;// 善恶值 可触发一些事件任务
	int prestige = 0;// 声望值 到达某些指定声望值时,购买东西可打折
	int faction = 0;// 门派 在门派可以学习很多东西,当然要用门派的积分来换,有些门派任务是有时限的
	int lucky = 5;// 幸运值,掉宝几率大,暴击加成(掉宝加成具体宝贝具体算法,暴击=原有暴击+幸运值*0.5)

	boolean burns1;// 1级烧伤,每回合2%
	boolean burns2;// 2级烧伤,每回合5%
	boolean burns3;// 3级烧伤,每回合10%

	boolean frostbite1;// 1级冻伤,每回合2%
	boolean frostbite2;// 2级冻伤,每回合5%
	boolean frostbite3;// 3级冻伤,每回合10%

	boolean poisoning1;// 1级中毒,每回合2%
	boolean poisoning2;// 2级中毒,每回合5%
	boolean poisoning3;// 3级中毒,每回合10%

	boolean deceleration;// 减速

	List<Map<String, String>> juesezhuangbeilist = new ArrayList<Map<String, String>>();// 角色装备列表
	String[] backpackcontent = new String[99];// 背包内容

	String equipment1;// 装备1,武器
	String equipment2;// 装备2,头盔
	String equipment3;// 装备3,上衣甲
	String equipment4;// 装备4,下裤甲
	String equipment5;// 装备5,鞋子
	String equipment6;// 装备6,首饰

	boolean pojie1 = true;

	/**
	 * **方法 增加10倍于0级的生命值 攻击 防御 速度 增加 幸运点数20
	 */
	public void PoJie1() {
		if (pojie1) {
			life = life + 1000;
			attack = attack + 200;
			defend = defend + 100;
			speed = speed + 50;
			lucky = lucky + 20;
			pojie1 = false;
		}
	}

	boolean pojie2 = true;

	/**
	 * **方法 增加20倍于0级的生命值 攻击 防御 速度 增加 幸运点数50
	 */
	public void PoJie2() {
		if (pojie2) {
			life = life + 2000;
			attack = attack + 400;
			defend = defend + 200;
			speed = speed + 100;
			lucky = lucky + 50;
			pojie2 = false;
		}
	}

}

PlayerJFrame.java

玩家界面,里面是玩家的各种信息

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

/**
 * 人物界面
 * 
 * @author 莫言情难忘
 *
 */
public class PlayerJFrame extends JFrame implements GameConfig {

	public PlayerJFrame() {

		JFrame playerjframe = new JFrame("人物详情");
		JPanel playerJPanel = new JPanel();

		// 设置字体
		Font font = new Font("楷体", 0, 20);
		// 设置文本字体
		UIManager.put("Label.font", font);

		// 称号
		JLabel jLabel_designation = new JLabel("称号:" + player.designation, JLabel.CENTER);
		jLabel_designation.setFont(font);
		jLabel_designation.setBounds(0, 0, 200, 20);
		// 名字
		JLabel jLabel_name = new JLabel(player.name, JLabel.CENTER);
		jLabel_name.setFont(font);
		jLabel_name.setBounds(0, 20, 200, 20);
		// 年龄
		JLabel jLabel_age = new JLabel(String.valueOf(player.age) + "岁", JLabel.CENTER);
		jLabel_age.setFont(font);
		jLabel_age.setBounds(0, 40, 100, 20);
		// 性别
		JLabel jLabel_sex = new JLabel(player.sex, JLabel.CENTER);
		jLabel_sex.setFont(font);
		jLabel_sex.setBounds(100, 40, 100, 20);
		// 等级
		JLabel jLabel_leave = new JLabel("等级:" + String.valueOf(player.leave), JLabel.CENTER);
		jLabel_leave.setFont(font);
		jLabel_leave.setBounds(0, 60, 200, 20);
		// 经验
		JLabel jLabel_jingyan = new JLabel("经验:" + String.valueOf(player.jingyan), JLabel.CENTER);
		jLabel_jingyan.setFont(font);
		jLabel_jingyan.setBounds(0, 80, 200, 20);
		// 生命值
		JLabel jLabel_life = new JLabel("生命" + String.valueOf(player.life), JLabel.CENTER);
		jLabel_life.setFont(font);
		jLabel_life.setBounds(0, 100, 200, 20);
		// 攻击
		JLabel jLabel_attack = new JLabel("攻击" + String.valueOf(player.attack), JLabel.CENTER);
		jLabel_attack.setFont(font);
		jLabel_attack.setBounds(0, 120, 100, 20);
		// 防御
		JLabel jLabel_defend = new JLabel("防御" + String.valueOf(player.defend), JLabel.CENTER);
		jLabel_defend.setFont(font);
		jLabel_defend.setBounds(100, 120, 100, 20);
		// 速度
		JLabel jLabel_speed = new JLabel("速度" + String.valueOf(player.speed), JLabel.CENTER);
		jLabel_speed.setFont(font);
		jLabel_speed.setBounds(0, 140, 100, 20);
		// 暴击
		JLabel jLabel_violent = new JLabel("暴击" + String.valueOf(player.violent), JLabel.CENTER);
		jLabel_violent.setFont(font);
		jLabel_violent.setBounds(100, 140, 100, 20);
		// 善恶
		JLabel jLabel_goodevil = new JLabel("善恶" + String.valueOf(player.goodevil), JLabel.CENTER);
		jLabel_goodevil.setFont(font);
		jLabel_goodevil.setBounds(0, 180, 200, 20);
		// 声望
		JLabel jLabel_prestige = new JLabel("声望" + String.valueOf(player.prestige), JLabel.CENTER);
		jLabel_prestige.setFont(font);
		jLabel_prestige.setBounds(0, 200, 200, 20);
		// 门派
		JLabel jLabel_faction = new JLabel("门派" + String.valueOf(player.faction), JLabel.CENTER);// 门派
		jLabel_faction.setFont(font);
		jLabel_faction.setBounds(0, 220, 200, 20);
		// 幸运
		JLabel jLabel_lucky = new JLabel("幸运" + String.valueOf(player.lucky), JLabel.CENTER);
		jLabel_lucky.setFont(font);
		jLabel_lucky.setBounds(0, 240, 200, 20);
		// 装备列表
		JLabel[] jLable_zhuangbei = new JLabel[6];
		for (int i = 0; i < 6; i++) {
			jLable_zhuangbei[i] = new JLabel();
		}
		jLable_zhuangbei[0].setText("装备1:" + "空");
		jLable_zhuangbei[0].setFont(font);
		jLable_zhuangbei[0].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[1].setText("装备2:" + "空");
		jLable_zhuangbei[1].setFont(font);
		jLable_zhuangbei[1].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[2].setText("装备3:" + "空");
		jLable_zhuangbei[2].setFont(font);
		jLable_zhuangbei[2].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[3].setText("装备4:" + "空");
		jLable_zhuangbei[3].setFont(font);
		jLable_zhuangbei[3].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[4].setText("装备5:" + "空");
		jLable_zhuangbei[4].setFont(font);
		jLable_zhuangbei[4].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[5].setText("装备6:" + "空");
		jLable_zhuangbei[5].setFont(font);
		jLable_zhuangbei[5].setHorizontalAlignment(JLabel.CENTER);
		jLable_zhuangbei[0].setBounds(0, 260, 200, 20);
		jLable_zhuangbei[1].setBounds(0, 280, 200, 20);
		jLable_zhuangbei[2].setBounds(0, 300, 200, 20);
		jLable_zhuangbei[3].setBounds(0, 320, 200, 20);
		jLable_zhuangbei[4].setBounds(0, 340, 200, 20);
		jLable_zhuangbei[5].setBounds(0, 360, 200, 20);
		// 关闭人物详情界面
		JButton close = new JButton("关闭界面");
		close.setFont(font);
		close.setBounds(20, 380, 160, 35);
		// 关闭人物详情界面的按钮触发
		close.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				playerjframe.dispose();
			}
		});
		// 面板添加组件
		playerJPanel.add(jLabel_designation);
		playerJPanel.add(jLabel_name);
		playerJPanel.add(jLabel_age);
		playerJPanel.add(jLabel_sex);
		playerJPanel.add(jLabel_leave);
		playerJPanel.add(jLabel_jingyan);
		playerJPanel.add(jLabel_life);
		playerJPanel.add(jLabel_attack);
		playerJPanel.add(jLabel_defend);
		playerJPanel.add(jLabel_speed);
		playerJPanel.add(jLabel_violent);
		playerJPanel.add(jLabel_goodevil);
		playerJPanel.add(jLabel_prestige);
		playerJPanel.add(jLabel_faction);
		playerJPanel.add(jLabel_lucky);
		playerJPanel.add(jLable_zhuangbei[0]);
		playerJPanel.add(jLable_zhuangbei[1]);
		playerJPanel.add(jLable_zhuangbei[2]);
		playerJPanel.add(jLable_zhuangbei[3]);
		playerJPanel.add(jLable_zhuangbei[4]);
		playerJPanel.add(jLable_zhuangbei[5]);
		playerJPanel.add(close);
		// 设置布局格式
		playerJPanel.setLayout(null);
		// JFame添加面板
		playerjframe.add(playerJPanel);
		playerjframe.setSize(200, 450);
		// 设置在最前显示
		playerjframe.setAlwaysOnTop(true);
		// 关闭方式,DISPOSE_ON_CLOSE,隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束。
		playerjframe.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		// 设置窗体居中
		playerjframe.setLocationRelativeTo(null);
		// 大小不可变
		playerjframe.setResizable(false);
		// 显示界面
		playerjframe.setVisible(true);
	}
}

BackpackJFrame.java

背包界面,内容为你的背包的东西

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;

/**
 * 背包界面
 * 
 * @author 莫言情难忘 1179307527
 *
 */
public class BackpackJFrame extends JFrame implements GameConfig {

	public BackpackJFrame() {

		JFrame backpackjframe = new JFrame("背包详情");
		JPanel backpackJPanel = new JPanel();

		// 设置字体
		Font font = new Font("楷体", 0, 20);
		// 设置文本字体
		UIManager.put("Label.font", font);
		// 设置布局格式
		backpackJPanel.setLayout(null);
		// 面板添加组件
		JButton[] JButton_zhuangbei = new JButton[99];
		for (int i = 0; i < 33; i++) {
			for (int j = 0; j < 3; j++) {
				JButton_zhuangbei[i * 3 + j] = new JButton();
				JButton_zhuangbei[i * 3 + j].setText(GameUtil.StringToHtml(
						GameUtil.取指定文本(UnitXLS.取内容(player.juesezhuangbeilist, i * 3 + j), "名称=", "}"), 3));
				JButton_zhuangbei[i * 3 + j].setFont(font);
				backpackJPanel.add(JButton_zhuangbei[i * 3 + j]);
				// 设置位置
				JButton_zhuangbei[i * 3 + j].setBounds(j * 100, i * 100, 100, 100);// i=纵 j=横
			}
		}
		ActionListener jbutton = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int k = -1;
				// html标准格式头
				String strhtmltou = "<html>";
				// html标准格式尾
				String strhtmlwei = "</html>";
				// 循环判断点击的按钮的
				for (int i = 0; i < 99; i++) {
					if (!GameUtil.取指定文本(e.getSource().toString(), "text=", ",").equals("空")) {
						if (GameUtil.HtmlToString(GameUtil.取指定文本(e.getSource().toString(), strhtmltou, strhtmlwei))
								.equals(GameUtil.取指定文本(UnitXLS.取内容(zhuangbeilist, i), "名称=", ","))) {
							k = i;
						}
					}
				}
				// 打开该ID的装备信息
				if (k != -1) {
					new EquipDetailJFrame(k);
				}

			}
		};

		for (int i = 0; i < JButton_zhuangbei.length; i++) {
			JButton_zhuangbei[i].addActionListener(jbutton);
		}
		// JFame添加面板
		// backpackJPanel.setSize(300, 3300);采用下面的方法设置大小
		backpackJPanel.setPreferredSize(new Dimension(300, 3300));
		// 向jscrollpane中添加背包面板
		JScrollPane jsp = new JScrollPane(backpackJPanel);
		// Jfame添加JScerollPane
		backpackjframe.add(jsp);
		// 设置大小
		backpackjframe.setSize(324, 335);
		// 关闭方式,DISPOSE_ON_CLOSE,隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束。
		backpackjframe.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		// 设置在最前显示
		backpackjframe.setAlwaysOnTop(true);
		// 设置窗体居中
		backpackjframe.setLocationRelativeTo(null);
		// 大小不可变
		backpackjframe.setResizable(false);
		// 显示界面
		backpackjframe.setVisible(true);
	}
}

 

EquipDetailJFrame.java

物品详情界面

import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

/**
 * 物品详情界面
 * 
 * @author 莫言情难忘 1179307527
 */
public class EquipDetailJFrame implements GameConfig {
	/**
	 * 物品详情界面,ID为物品ID
	 * 
	 * @param ID
	 */
	public EquipDetailJFrame(int ID) {

		JFrame equipdetailjframe = new JFrame("详情");
		JPanel equipdetailJPanel = new JPanel();
		equipdetailJPanel.setLayout(null);
		// 设置字体
		Font font = new Font("楷体", 0, 20);
		// 设置文本字体
		UIManager.put("Label.font", font);

		// attribute属性
		String[] attribute = { "ID", "品质", "位置", "名称", "说明", "等级", "善恶", "门派", "生命", "攻击", "防御", "速度", "暴击", "命中", "闪避",
				"生命加成", "攻击加成", "防御加成", "速度加成", "吸血" };
		// JLabel 品质,位置,名称,说明,等级,善恶,帮派,幸运,生命,攻击,防御,速度,暴击,命中,闪避,生命加成,攻击加成,防御加成,速度加成,吸血;
		// 品质=new JLabel(GameUtil.取指定文本(UnitXLS.取内容(ID),"品质",","));
		// 武器=new JLabel(GameUtil.取指定文本(UnitXLS.取内容(ID),"武器",","));
		// 上面那种太麻烦,改为下面的
		JLabel[] JLabel_attribute = new JLabel[20];
		for (int i = 0, k = JLabel_attribute.length; i < k; i++) {
			// for循环直接初始化
			if (i == k - 1) {
				JLabel_attribute[i] = new JLabel(
						GameUtil.取指定文本(UnitXLS.取内容(zhuangbeilist, ID), attribute[i] + "=", "}"), JLabel.CENTER);
			} else {
				JLabel_attribute[i] = new JLabel(
						GameUtil.取指定文本(UnitXLS.取内容(zhuangbeilist, ID), attribute[i] + "=", ","), JLabel.CENTER);
			}

			// 添加字体
			JLabel_attribute[i].setFont(font);
		}
		// 设置位置,ID
		JLabel_attribute[0].setText(attribute[0] + ":" + GameUtil.取点前(JLabel_attribute[0].getText()));
		JLabel_attribute[0].setBounds(0, 0, 250, 20);
		// 名称
		JLabel_attribute[3].setText(JLabel_attribute[3].getText());
		JLabel_attribute[3].setBounds(0, 20, 250, 20);
		// 品质
		JLabel_attribute[1].setText(attribute[1] + ":" + JLabel_attribute[1].getText());
		JLabel_attribute[1].setBounds(0, 40, 130, 20);
		// 位置
		JLabel_attribute[2].setText(attribute[2] + ":" + JLabel_attribute[2].getText());
		JLabel_attribute[2].setBounds(130, 40, 130, 20);
		// 攻击
		JLabel_attribute[9].setText(attribute[9] + ":" + GameUtil.取点前(JLabel_attribute[9].getText()));
		JLabel_attribute[9].setBounds(0, 60, 130, 20);
		// 防御
		JLabel_attribute[10].setText(attribute[10] + ":" + GameUtil.取点前(JLabel_attribute[10].getText()));
		JLabel_attribute[10].setBounds(130, 60, 130, 20);
		// 速度
		JLabel_attribute[11].setText(attribute[11] + ":" + GameUtil.取点前(JLabel_attribute[11].getText()));
		JLabel_attribute[11].setBounds(0, 80, 130, 20);
		// 暴击
		JLabel_attribute[12].setText(attribute[12] + ":" + GameUtil.取点前(JLabel_attribute[12].getText()));
		JLabel_attribute[12].setBounds(130, 80, 130, 20);
		// 命中
		JLabel_attribute[13].setText(attribute[13] + ":" + GameUtil.取点前(JLabel_attribute[13].getText()));
		JLabel_attribute[13].setBounds(0, 100, 130, 20);
		// 闪避
		JLabel_attribute[14].setText(attribute[14] + ":" + GameUtil.取点前(JLabel_attribute[14].getText()));
		JLabel_attribute[14].setBounds(130, 100, 130, 20);
		// 吸血
		JLabel_attribute[19].setText(attribute[19] + ":" + GameUtil.取点前(JLabel_attribute[19].getText()));
		JLabel_attribute[19].setBounds(0, 120, 130, 20);
		// 生命加成
		JLabel_attribute[15].setText(attribute[15] + ":" + GameUtil.取点前(JLabel_attribute[15].getText()));
		JLabel_attribute[15].setBounds(0, 140, 130, 20);
		// 攻击加成
		JLabel_attribute[16].setText(attribute[16] + ":" + GameUtil.取点前(JLabel_attribute[16].getText()));
		JLabel_attribute[16].setBounds(130, 140, 130, 20);
		// 防御加成
		JLabel_attribute[17].setText(attribute[17] + ":" + GameUtil.取点前(JLabel_attribute[17].getText()));
		JLabel_attribute[17].setBounds(0, 160, 130, 20);
		// 速度加成
		JLabel_attribute[18].setText(attribute[18] + ":" + GameUtil.取点前(JLabel_attribute[18].getText()));
		JLabel_attribute[18].setBounds(130, 160, 130, 20);
		// 等级
		JLabel_attribute[5]
				.setText(attribute[5] + "需求:" + GameUtil.ZeroToWu(GameUtil.取点前(JLabel_attribute[5].getText())));
		JLabel_attribute[5].setBounds(0, 180, 260, 20);
		// 善恶
		JLabel_attribute[6]
				.setText(attribute[6] + "需求:" + GameUtil.ZeroToWu(GameUtil.取点前(JLabel_attribute[6].getText())));
		JLabel_attribute[6].setBounds(0, 200, 260, 20);
		// 帮派
		JLabel_attribute[7]
				.setText(attribute[7] + "需求:" + GameUtil.Faction(GameUtil.取点前(JLabel_attribute[7].getText())));
		JLabel_attribute[7].setBounds(0, 220, 260, 20);
		// 说明
		JLabel_attribute[4].setText(
				GameUtil.StringToHtml(attribute[4] + ":" + GameUtil.Faction(JLabel_attribute[4].getText()), 12));
		JLabel_attribute[4].setBounds(0, 240, 260, 100);
		/**
		 * { "ID", "品质", "位置", "名称", "说明", "等级", "善恶", "帮派", , "生命", "攻击", "防御", "速度",
		 * "暴击", "命中", "闪避", "生命加成", "攻击加成", "防御加成", "速度加成", "吸血" };
		 */
		// JLabel_attribute[14].setText(attribute[14] + ":"
		// +GameUtil.取点前(JLabel_attribute[14].getText()));
		// JLabel_attribute[14].setBounds(0, 120, 130, 20);
		for (int i = 0, k = JLabel_attribute.length; i < k; i++) {
			equipdetailJPanel.add(JLabel_attribute[i]);
		}

		JButton 装备 = new JButton("装备");
		JButton 卸下 = new JButton("卸下");
		装备.setFont(font);
		卸下.setFont(font);
		装备.setBounds(0, 350, 130, 40);
		卸下.setBounds(130, 350, 130, 40);
		equipdetailJPanel.add(装备);
		equipdetailJPanel.add(卸下);

		// JFame添加面板
		equipdetailjframe.add(equipdetailJPanel);
		// 设置大小
		equipdetailjframe.setSize(260, 420);
		// 关闭方式,DISPOSE_ON_CLOSE,隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束。
		equipdetailjframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		// 设置在最前显示
		equipdetailjframe.setAlwaysOnTop(true);
		// 设置窗体居中
		equipdetailjframe.setLocationRelativeTo(null);
		// 大小不可变
		equipdetailjframe.setResizable(false);
		// 显示界面
		equipdetailjframe.setVisible(true);

	}

}

 

UnitXLS.java

读取XLS的工具类

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * XLS操作
 * 
 * @author 莫言情难忘
 *
 */
public class UnitXLS implements GameConfig {

	public static void AddXls(List<Map<String, String>> list, String filePath, String[] queue) {
		// Excel文档
		Workbook wb = null;
		// Excel文档中的一个sheet
		Sheet sheet = null;
		// 对应一个sheet中的一行
		Row row = null;

		String cellData = null;

		// 将xls赋值到wb
		wb = readExcel(filePath);
		if (wb != null) {
			// 用来存放表中数据
			// list = new ArrayList<Map<String, String>>();
			// 获取第一个sheet
			sheet = wb.getSheetAt(0);
			// 获取最大行数
			int rownum = sheet.getPhysicalNumberOfRows();
			// 获取第一行
			row = sheet.getRow(0);
			// 获取最大列数
			int colnum = row.getPhysicalNumberOfCells();
			for (int i = 1; i < rownum; i++) {
				Map<String, String> map = new LinkedHashMap<String, String>();
				row = sheet.getRow(i);
				if (row != null) {
					for (int j = 0; j < colnum; j++) {
						cellData = (String) getCellFormatValue(row.getCell(j));
						map.put(queue[j], cellData);
					}
				} else {
					break;
				}
				list.add(map);
			}
		}
		// 遍历解析出来的list
		// for (Map<String,String> map : list) {
		// for (Entry<String,String> entry : map.entrySet()) {
		// System.out.print(entry.getKey()+":"+entry.getValue()+",");
		// }
		// System.out.println();
		// }
	}

	/**
	 * @param ID
	 * 
	 * @return string类型的全部信息
	 */
	// ID为第几行,仅仅使用这个方法,在使用这个方法前,要调用下AddXls初始化
	public static String 取内容(List<Map<String, String>> list, int ID) {
		return String.valueOf(list.get(ID));
	}

	// 读取excel
	public static Workbook readExcel(String filePath) {
		Workbook wb = null;
		// 如果没有该文档
		if (filePath == null) {
			return null;
		}
		// 取文件后缀名
		String extString = filePath.substring(filePath.lastIndexOf("."));
		InputStream is = null;
		try {
			is = new FileInputStream(filePath);
			if (".xls".equals(extString)) {
				return wb = new HSSFWorkbook(is);
			} else if (".xlsx".equals(extString)) {
				return wb = new XSSFWorkbook(is);
			} else {
				return wb = null;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return wb;
	}

	/**
	 * 获取单元格中的值并转化成string
	 * 
	 * @param cell
	 *            单元格
	 * @return
	 */
	public static Object getCellFormatValue(Cell cell) {
		Object cellValue = null;
		if (cell != null) {
			// 判断cell类型
			switch (cell.getCellType()) {
			case NUMERIC: {
				cellValue = String.valueOf(cell.getNumericCellValue());
				break;
			}
			case STRING: {
				cellValue = cell.getRichStringCellValue().getString();
				break;
			}
			default:
				cellValue = "";
			}
		} else {
			cellValue = "";
		}
		return cellValue;
	}

}

 

GameUtil.java

游戏工具类

/**
 * 
 * @author 莫言情难忘 1179307527
 *
 */
public class GameUtil {
	// 求减少生命值的方法 方法用static 修饰 ,调用时 类名.方法名
	public static int getLoseLife(int attack, int defend) {
		return attack - defend;
	}

	// 求a-b之间随机数方法
	public static int getNumber(int a, int b) {
		// 求任意两个数之间的随机数(int)
		return (int) (Math.random() * (b - a) + a);
	}

	/**
	 * 将文本中左边文本与右边文本中间的String取出来
	 * 
	 * @param 文本
	 * @param 左边文本
	 * @param 右边文本
	 * @return String
	 */
	public static String 取指定文本(String 文本, String 左边文本, String 右边文本) {
		// int indexOf(String str)
		// 返回指定子字符串在此字符串中第一次出现处的索引。
		// int indexOf(int ch, int fromIndex)
		// 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
		// String substring(int beginIndex, int endIndex)
		// 返回一个新字符串,它是此字符串的一个子字符串

		int 左边 = 文本.indexOf(左边文本);
		int 右边 = 文本.indexOf(右边文本, 左边);
		return 文本.substring(左边 + 左边文本.length(), 右边);
	}

	/**
	 * 因为JButton是不自动换行的,但是支持html中的换行,所以写这个为了方便换行
	 * 
	 * @param str
	 *            文本
	 * @param length
	 *            每隔length长度换行
	 * @return
	 */
	public static String StringToHtml(String str, int length) {
		// html换行符
		String strhtmlbr = "<br>";
		// html标准格式头
		String strhtmltou = "<html>";
		// html标准格式尾
		String strhtmlwei = "</html>";
		// 字符串总长度
		int strlength = str.length();
		// 循环次数
		int k = strlength / length;
		// 一开始的思路:
		// 存放string每一小段
		// String[] strings = new String[99];
		// 初次循环取出str赋值到数组
		// for (int i = 0; i < k; i++) {
		// strings[i] = str.substring(i * length, i * length + length);
		// }
		// //连接头和第一个文本
		// String strreturn = strhtmltou.concat(strings[0]);
		// //for循环从1开始,依次连接
		// for (int i = 1; i < k; i++) {
		// strreturn = strreturn.concat(strhtmlbr + strings[i]);
		// }
		// //连接html尾
		// strreturn = strreturn.concat(strhtmlwei);

		// 此方法可以改进,改进方式如下:取消数组,两个for循环合并
		// 如果小于则直接输出
		if (strlength < length) {
			return str;
		}
		String strreturn = strhtmltou.concat(str.substring(0 * length, 0 * length + length));
		for (int i = 1; i < k; i++) {
			strreturn = strreturn.concat(strhtmlbr + str.substring(i * length, i * length + length));
		}
		if (strlength - k * length != 0) {
			strreturn = strreturn.concat(strhtmlbr + str.substring(k * length, strlength));
		}
		strreturn = strreturn.concat(strhtmlwei);
		// 返回转化好的html
		return strreturn;
	}

	/**
	 * 将html转化成string,<br>
	 * =null
	 * 
	 * @param str
	 *            html文本
	 * @return string
	 */
	public static String HtmlToString(String str) {
		// html换行符
		String strhtmlbr = "<br>";
		// html标准格式头
		String strhtmltou = "<html>";
		// html标准格式尾
		String strhtmlwei = "</html>";

		String strreturn = str.replace(strhtmltou, "");
		strreturn = strreturn.replace(strhtmlwei, "");
		strreturn = strreturn.replaceAll(strhtmlbr, "");
		// 返回转化好的html
		return strreturn;
	}

	public static String 取点前(String str) {
		String strreturn = str.substring(0, str.indexOf("."));
		return strreturn;
	}

	/**
	 * 检测是否为文本型的0,如果是将文本转化成无
	 * 
	 * @return "无"
	 */
	public static String ZeroToWu(String str) {
		if (str.equals("0")) {
			str = "无";
		}
		return str;
	}

	/**
	 * 
	 * @param str
	 *            门派数字
	 * @return 门派名称
	 */
	public static String Faction(String str) {

		switch (str) {
		case "0":
			str = "无";
			break;
		case "1":
			str = "逆天者联盟";
			break;
		case "2":
			str = "佣兵工会";
			break;
		case "3":
			str = "刺客公会";
			break;
		case "4":
			str = "战士公会";
			break;
		case "5":
			str = "极寒宫";
			break;
		case "6":
			str = "九霄宫";
			break;
		case "7":
			str = "无极宫";
			break;
		case "8":
			str = "火炎宫";
			break;
		case "9":
			str = "金鼎宫";
			break;
		case "10":
			str = "灵木宫";
			break;
		case "11":
			str = "赤土宫";
			break;
		case "12":
			str = "稳定宫";
			break;
		case "13":
			str = "时空宫";
			break;
		default:
			break;
		}
		return str;
	}

}

嗯emmm没了