Java 增量数学问题

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

我一直对如何为我正在创建的一个小游戏编写数学感到困惑。这个游戏是我个人学习Java的旅程,主要基于Monolith。我看过游戏的源代码,但无法确定开发人员是如何计算的

这是我到目前为止的代码

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
值递增。但是,my
jbtUnit1
应该为每个单元增加my
dmg
输出一个额外的点。因此,
(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。请参阅我编辑的答案。我包括了一个用过的点数计数器,它使逻辑更容易理解并解决了这个问题!非常感谢你!我对此感到非常沮丧。数周的思考和查看其他代码,并试图找到示例。我希望这能在将来帮助别人!!我对答案投了赞成票,但由于声誉的限制,它还没有显示出来。但它会的!