Java 增量数学问题
我一直对如何为我正在创建的一个小游戏编写数学感到困惑。这个游戏是我个人学习Java的旅程,主要基于Monolith。我看过游戏的源代码,但无法确定开发人员是如何计算的 这是我到目前为止的代码Java 增量数学问题,java,math,Java,Math,我一直对如何为我正在创建的一个小游戏编写数学感到困惑。这个游戏是我个人学习Java的旅程,主要基于Monolith。我看过游戏的源代码,但无法确定开发人员是如何计算的 这是我到目前为止的代码 package DamageDealer; import javax.swing.*; import java.awt.*; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.Act
package DamageDealer;
import javax.swing.*;
import java.awt.*;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Take1 {
int dmg = 0;
int epoints = 1000;
int intUnit1 = 0;
public static void main(String[] args) {
new Take1();
}
public Take1() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace(); }
catch (IllegalAccessException ex) {
ex.printStackTrace(); }
catch (InstantiationException ex) {
ex.printStackTrace(); }
catch (ClassNotFoundException ex) {
ex.printStackTrace(); }
JFrame frame = new JFrame("Button Clicker");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new addComponentsToPane());
frame.setSize(300, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setResizable(false);
}
});
}
protected class addComponentsToPane extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
public addComponentsToPane() {
JPanel appPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.CENTER;
gbc.insets = new Insets(5, 5, 5, 5);
JLabel EvoPoints = new JLabel();
EvoPoints.setText("Points: " + String.valueOf(epoints));
gbc.gridx = 1;
gbc.gridy = 0;
appPanel.add(EvoPoints, gbc);
JButton jbtUnit1 = new JButton("Unit 1");
gbc.gridx = 0;
gbc.gridy = 1;
appPanel.add(jbtUnit1, gbc);
JLabel lblUnit1 = new JLabel();
lblUnit1.setText(String.valueOf(intUnit1));
gbc.gridx = 1;
gbc.gridy = 1;
appPanel.add(lblUnit1, gbc);
JButton jbtDamage = new JButton("Damage");
gbc.gridx = 0;
gbc.gridy = 10;
appPanel.add(jbtDamage, gbc);
JLabel DamageOutput = new JLabel();
DamageOutput.setText(String.valueOf(dmg));
gbc.gridx = 1;
gbc.gridy = 10;
appPanel.add(DamageOutput, gbc);
add(appPanel, gbc);
jbtDamage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dmg++;
DamageOutput.setText(String.valueOf(dmg));
if ((dmg % 10) == 0) {
epoints++;
EvoPoints.setText("Points: " + String.valueOf(epoints));
}
}
});
jbtUnit1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (epoints >= 10) {
intUnit1++;
epoints = epoints - 10;
lblUnit1.setText(String.valueOf(intUnit1));
EvoPoints.setText("Points: " + String.valueOf(epoints));
}
}
});
}
}
}
现在,我只有两个按钮,jbtUnit1
和jbtDamage
。下面是他们各自的动作听众
只有当dmg
值可以被10整除时,我目前的数学才有效。此时(当dmg
可被10整除时,epoints
值递增。但是,myjbtUnit1
应该为每个单元增加mydmg
输出一个额外的点。因此,(dmg%10)==0
将不起作用,因为在达到准确的%10
之前,会多次超过值
问题:我应该怎么做数学?或者更好:做这类数学的更好(或首选)方法是什么
谢谢你的帮助!
Mikey尝试更换此:
dmg++;
DamageOutput.setText(String.valueOf(dmg));
if ((dmg % 10) == 0) {
epoints++;
EvoPoints.setText("Points: " + String.valueOf(epoints));
}
为此:
dmg+= 1+intUnit1; //Deal more damage with more units
DamageOutput.setText(String.valueOf(dmg));
int newEPoints = dmg/10 - spentEPoints;
if(epoints != newEPoints) {
EvoPoints.setText("Points: " + String.valueOf(newEPoints));
}
epoints = newEPoints;
然后在主类中添加一个spentEPoints
字段以跟踪花费的金额,而不是每次购买单位时从您的epoints计数器中减去,而是将花费的金额添加到spentEPoints
计数器中
但是请注意,像这样的游戏往往会很快升级数字,并且整数类型的变量最终会溢出。看看这个类,它让你拥有几乎无限大的数字。哦,请忽略布局。我认为这是不对的。但我仍然在自学如何使用布局。因此,只有当dmg%10==0时,数学才起作用。到目前为止,我支持你。但是你想让它做什么呢?四舍五入(dmg/10)?我希望它每造成10点伤害,就增加我的
epoints
。但是我的jbtUnit1
每单位将使我的伤害输出增加1。因此,在某个时刻,比如说3点伤害输出,你会得到3,6,9,12,15,18,21,24,27,30。在这一点上,你只能得到一分,但实际上应该得到3分。10点,20点,然后30点。我很想在这方面给你更多的帮助,但我不确定我是否完全理解你的意思。也许我们可以在聊天的时候再讨论一下?我想你应该用直除法,而不是模运算符。因此,如果一个用户累积了30分,那么您将得到30/10=3。因此,将dmg增加3。而对于模,你做30%10=0,这会让你进入你的if语句,但你最终只会增加1。同样,如果你累积了33点,你仍然会增加3点伤害(整数数学要求33/10=3)。如果你关心余数,那么使用模数(33%10=3)。因此,这个方法将创建一个局部变量,用于检查当前点,以确保你没有在不应该添加点的情况下添加点。对不起,我忘记了游戏机制的一个重要部分,我会马上更正代码。这非常接近,但不完全正确。它正确地增加了我的epoint。但是,在购买单元后再次单击jbtDamage
按钮后,它会返回epoint。每购买一台1号机组,需要花费10个epoint。因此,每次购买时,都会使用epoints!=新地点。然后再次调整epoint。请参阅我编辑的答案。我包括了一个用过的点数计数器,它使逻辑更容易理解并解决了这个问题!非常感谢你!我对此感到非常沮丧。数周的思考和查看其他代码,并试图找到示例。我希望这能在将来帮助别人!!我对答案投了赞成票,但由于声誉的限制,它还没有显示出来。但它会的!