Skip to content

Commit

Permalink
feat: добавление эксперимантальных настроек
Browse files Browse the repository at this point in the history
    Добавлены настройки `Похожие по минералам` и `Похожие по энергии`.
    Эти настройки позволяют ботам отличать других ботов, у которых количество
    минералов и/или энергии отличается не более чем на 10%. В теории это
    может привести к появлению колоний внутри колоний по "ресурсным"
    признакам. Но, пока что, данные настройки недостаточно проверены,
    поэтому являются эксперементальными, и могут быть удалены в будущих
    версиях.
  • Loading branch information
xlam committed Dec 12, 2018
1 parent 3ac94ce commit 6f91953
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 15 deletions.
30 changes: 26 additions & 4 deletions src/main/java/ru/cyberbiology/BasicBot.java
Original file line number Diff line number Diff line change
Expand Up @@ -592,10 +592,10 @@ private void botMineral2Energy(BasicBot bot) {
* @param bot ссылка на бота
* @param direction направлелие
* @param ra флажок(относительное или абсолютное направление)
* @return
* @return 2-пусто; 3-стена; 4-органика; 5-бот; 6-родня;
* 7-похожий по минералам; 8-похожий по энергии
*/
private int botMove(BasicBot bot, int direction, int ra) {
// на выходе 2-пусто 3-стена 4-органика 5-бот 6-родня
int xt;
int yt;
if (ra == 0) { // вычисляем координату клетки, куда перемещается бот (относительное направление)
Expand All @@ -620,6 +620,12 @@ private int botMove(BasicBot bot, int direction, int ra) {
if (isRelative(bot, bot2) == 1) { // если на клетке родня
return 6; // то возвращаем 6
}
if (properties.getBoolean("EnableRelativeByMinerals") && mineralsRelative(bot2)) {
return 7;
}
if (properties.getBoolean("EnableRelativeByEnergy") && energyRelative(bot2)) {
return 8;
}
return 5; // остался только один вариант - на клетке какой-то бот возвращаем 5
}

Expand Down Expand Up @@ -697,10 +703,10 @@ private int botEat(BasicBot bot, int direction, int ra) {
* @param bot ссылка на бота
* @param direction направлелие
* @param ra флажок(относительное или абсолютное направление)
* @return пусто - 2 стена - 3 органик - 4 бот - 5 родня - 6
* @return 2-пусто; 3-стена; 4-органика; 5-бот; 6-родня;
* 7-похожий по минералам; 8-похожий по энергии
*/
private int botSeeBots(BasicBot bot, int direction, int ra) { // на входе ссылка на бота, направлелие и флажок(относительное или абсолютное направление)
// на выходе пусто - 2 стена - 3 органик - 4 бот - 5 родня - 6
int xt;
int yt;
if (ra == 0) { // выясняем, есть ли что в этом направлении (относительном)
Expand All @@ -720,6 +726,10 @@ private int botSeeBots(BasicBot bot, int direction, int ra) { // на входе
return 4;
} else if (isRelative(bot, bot2) == 1) { // если родня, то возвращаем 6
return 6;
} else if (properties.getBoolean("EnableRelativeByMinerals") && mineralsRelative(bot2)) {
return 7;
} else if (properties.getBoolean("EnableRelativeByEnergy") && energyRelative(bot2)) {
return 8;
} else { // если какой-то бот, то возвращаем 5
return 5;
}
Expand Down Expand Up @@ -1034,6 +1044,18 @@ private int isRelative(BasicBot bot0, BasicBot bot1) {
return 1;
}

private boolean mineralsRelative(BasicBot bot) {
// 10% от своих минералов
int p = (int) (mineral * 0.01 * 10);
return Math.abs(mineral - bot.mineral) < p;
}

private boolean energyRelative(BasicBot bot) {
// 10% от своей энергии
int p = (int) (health * 0.01 * 10);
return Math.abs(health - bot.health) < p;
}

/**
* Делаем бота более зеленым на экране.
*
Expand Down
40 changes: 29 additions & 11 deletions src/main/java/ru/cyberbiology/SettingsDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private void initComponents() {
.addGroup(panelSettingsGeneralLayout.createSequentialGroup()
.addContainerGap()
.addComponent(labelDevNote)
.addContainerGap(84, Short.MAX_VALUE))
.addContainerGap(75, Short.MAX_VALUE))
);

tabbedPane.addTab("Общие", panelSettingsGeneral);
Expand Down Expand Up @@ -134,7 +134,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(rbMineralsAccClassic)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(rbMineralsAccHeight)
.addContainerGap(28, Short.MAX_VALUE))
.addContainerGap(19, Short.MAX_VALUE))
);

tabbedPane.addTab("Мир", panelSettingsWorld);
Expand All @@ -146,12 +146,20 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) {
}
});

cbRelativeByEnergy.setText("родство по энергии");
cbRelativeByEnergy.setEnabled(false);
cbRelativeByEnergy.setText("похожие по энергии (experimental)");
cbRelativeByEnergy.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
energyRelativeChanged(evt);
}
});

cbRelativeByMinerals.setText("родство по минералам");
cbRelativeByMinerals.setToolTipText("");
cbRelativeByMinerals.setEnabled(false);
cbRelativeByMinerals.setText("похожие по минералам (experimental)");
cbRelativeByMinerals.setToolTipText("Боты будут отличать соседей, у которых количество минералов примерно такое-же");
cbRelativeByMinerals.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
mineralsRelativeChanged(evt);
}
});

javax.swing.GroupLayout panelSettingaBotsLayout = new javax.swing.GroupLayout(panelSettingaBots);
panelSettingaBots.setLayout(panelSettingaBotsLayout);
Expand All @@ -163,18 +171,18 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) {
.addComponent(cbMultiCell)
.addComponent(cbRelativeByEnergy)
.addComponent(cbRelativeByMinerals))
.addContainerGap(145, Short.MAX_VALUE))
.addContainerGap(49, Short.MAX_VALUE))
);
panelSettingaBotsLayout.setVerticalGroup(
panelSettingaBotsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelSettingaBotsLayout.createSequentialGroup()
.addContainerGap()
.addComponent(cbMultiCell)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbRelativeByEnergy)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbRelativeByMinerals)
.addContainerGap(19, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbRelativeByEnergy)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

tabbedPane.addTab("Боты", panelSettingaBots);
Expand Down Expand Up @@ -228,6 +236,16 @@ private void rbMineralsAccHeightActionPerformed(java.awt.event.ActionEvent evt)
changedSettings.put("MineralsAccumulation", "height");
}//GEN-LAST:event_rbMineralsAccHeightActionPerformed

private void mineralsRelativeChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_mineralsRelativeChanged
JCheckBox cb = (JCheckBox) evt.getSource();
changedSettings.put("EnableRelativeByMinerals", cb.isSelected() ? "true" : "false");
}//GEN-LAST:event_mineralsRelativeChanged

private void energyRelativeChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_energyRelativeChanged
JCheckBox cb = (JCheckBox) evt.getSource();
changedSettings.put("EnableRelativeByEnergy", cb.isSelected() ? "true" : "false");
}//GEN-LAST:event_energyRelativeChanged

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup bgMineralsAccumulation;
private javax.swing.JButton buttonCancel;
Expand Down

0 comments on commit 6f91953

Please sign in to comment.