(一)项目规则介绍
做一个厄斐琉斯武器轮换机制的简单界面,厄斐琉斯拥有妹妹给与的五把武器,按顺序依次是:
1.通碧
2.断魄
3.坠明
4.荧焰
5.折镜
说明:
游戏中规则为每个武器子弹为50发,平A减一发,Q技能减10发,显示主、副武器子弹数,W技能切换主副武器,当主武器折镜的子弹打完时,主武器重置为通碧重新开始循环,由于Q技能和平A有相同的消耗机制,因此 本项目简化设计为平A机制和W换武器、换子弹机制,每个武器子弹数量简化为5发,主、副武器显示剩余子弹数,游戏中主武器和副武器都显示剩余子弹数,副武器显示在E技能的位置(所以没有E技能)。
(二)图形界面
主界面:
四个按钮出现的交互窗口:
(三)项目实现与未实现功能介绍
项目实现功能:
1.简单的图形界面————四个按钮一个标题
2.与游戏相匹配的武器轮换机制————点按钮“A”消耗一发子弹,点
按钮“W”主副武器互换,主武器子弹消耗完毕后,主武器切换下一把武器
想要实现却未实现的功能:
想用用按键“A”和“W”代替鼠标点击按钮“A”和“W”,
尝试了如下方法未果:
1.在按钮上添加键盘监听器,但必须要点击按钮后按“A”才有反应
2.在窗体上添加键盘监听器,有一半成功,失败点在于只要点击任意一个按钮,后续再
按键,就没有反应了。
(四)代码设计思路和简化结构
设计思路(主要是逻辑设计的思路):
1.为什么要用到mainWeaponAfterExchange 来存储换武器后的主武器?
因为点“W”后,如果要查看主武器,必须再点“主武器及子弹数”才能查看,而方法mainWeaponOrder()
在“主武器及子弹数”按钮的监听器中,所以,如果不用题中变量来存储主武器的话,主武器将不会变化。
2.方法mainWeaponOrder()为什么要在“主武器及子弹数”按钮的监听器中,而不是在别的地方?
因为该按钮的作用是输出交换后和子弹消耗完后的主武器和子弹数,因此必须写在这两个监听器之后,
所以这里的写法不唯一,也可以把logicDesign()中的第一个方法去除,转而调用在监听器A里的最后面。
代码简化结构(方法调用图) :
类 extends JFrame{}
主函数{
new 本类对象;
}
构造函数{
添加组件();
添加监听器();
}
添加组件(){
JPanel添加到JFrame中;
四个按钮一个JLabel添加到一个JPanel中;
}
添加监听器(){
1.“主武器及子弹数”监听器({
逻辑设计();
})
2.“副武器及子弹数”监听器({
逻辑设计();
});
3.“W”监听器;
4.“A”监听器;
}
逻辑设计(){
主武器顺序();
}
主武器顺序(){}
}
(五)代码
package game;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
@SuppressWarnings("serial")
public class Lol_LogicOfApheliosWeapon extends JFrame {
private final String tb = "通碧"; // 通碧(步枪):长距离射击,能够标记目标来跟进一次长距离攻击。
private final String dp = "断魄"; // 断魄(短镰枪):在快速奔跑的同时用两把武器攻击附近的敌人。
private final String zm = "坠明"; // 坠明(加农炮):禁锢被这把武器减速的所有敌人。
private final String yy = "荧焰"; // 荧焰(喷火器):引爆锥形范围内的敌人并用你的副手武器攻击他们。
private final String zj = "折镜"; // 折镜(环刃):部署一个装备着你副手武器的驻灵。
private JDialog dialog,dialog1,dialog2;
private JButton btn_SecondaryWeapon,btn_MainWeapon,btn_ChangeWeapon,btn_A;
private JLabel label_GameName;
// mainWeapon: 主武器
// secondaryWeapon: 副武器
private String mainWeapon = tb,secondaryWeapon = dp;
/* mainBulletNum: 主武器子弹数
* secondaryBulletNum: 副武器子弹数
* n: 在方法mainWeaponOrder()中做主武器循环的条件变量
* round1 和 round2: 这两个变量在第一轮中为 round++和round1++,
* 目的是为了在第一轮主武器循环中让主武器不等于 断魄,而是坠明(因为 n = 2),
* 而第二轮及以后中,主武器能够等于“断魄”。*/
private int mainBulletNum