Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
xlam committed Nov 23, 2018
2 parents b95612f + 6327d33 commit f771a22
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 15 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>ru</groupId>
<artifactId>cyberbiology</artifactId>
<version>1.3.0</version>
<version>1.3.1-DEV</version>

<name>cyberbiology</name>
<description>Add project description here</description>
Expand Down
29 changes: 19 additions & 10 deletions src/main/java/ru/cyberbiology/Bot.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ru.cyberbiology;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import ru.cyberbiology.gene.GeneCareAbsolutelyDirection;
import ru.cyberbiology.gene.GeneCareRelativeDirection;
import ru.cyberbiology.gene.GeneChangeDirectionAbsolutely;
Expand Down Expand Up @@ -50,7 +50,7 @@ public class Bot implements IBot {

// максимальное количество генов паразитирования в геноме
private static final int MAX_PEST_GENES = 32;
private static final Random RANDOM = new Random();
private static final ThreadLocalRandom RANDOM = ThreadLocalRandom.current();
private final ProjectProperties properties = ProjectProperties.getInstance();
private final IBotGeneController[] geneController = new IBotGeneController[MIND_SIZE];

Expand Down Expand Up @@ -147,6 +147,15 @@ public IBotGeneController getCurrentCommand() {
return geneController[adr];
}

/**
* Возвращает контроллер гена для указанного номера команды.
* @param command номер команды
* @return контроллер гена, или null
*/
public IBotGeneController getGeneControllerForCommand(int command) {
return geneController[command];
}

/**
* Главная функция жизнедеятельности бота. Здесь выполняется код его
* мозга-генома
Expand Down Expand Up @@ -864,7 +873,7 @@ private void botDouble(Bot bot) {
// информация о паразитных генах сохраняется в новом боте
newbot.pest = bot.pest;

if (Math.random() < 0.25) { // в одном случае из четырех случайным образом меняем один случайный байт в геноме
if (RANDOM.nextInt(100) <= 25) { // в одном случае из четырех случайным образом меняем один случайный байт в геноме
newbot.modifyMind();
}

Expand Down Expand Up @@ -897,7 +906,7 @@ private void botDouble(Bot bot) {
newbot.c_green = bot.c_green; // цвет такой же, как у предка
newbot.c_blue = bot.c_blue; // цвет такой же, как у предка

newbot.direction = (int) (Math.random() * 8); // направление, куда повернут новорожденный, генерируется случайно
newbot.direction = RANDOM.nextInt(8); // направление, куда повернут новорожденный, генерируется случайно

world.setBot(newbot); // отмечаем нового бота в массиве matrix
// todo: https://github.com/xlam/CyberBiology/issues/2
Expand Down Expand Up @@ -932,7 +941,7 @@ private void botMulti(Bot bot) {

System.arraycopy(bot.mind, 0, newbot.mind, 0, MIND_SIZE); // копируем геном в нового бота

if (Math.random() < 0.25) { // в одном случае из четырех случайным образом меняем один случайный байт в геноме
if (RANDOM.nextInt(100) <= 25) { // в одном случае из четырех случайным образом меняем один случайный байт в геноме
newbot.modifyMind();
}

Expand All @@ -951,7 +960,7 @@ private void botMulti(Bot bot) {
newbot.c_green = bot.c_green; // цвет такой же, как у предка
newbot.c_blue = bot.c_blue; // цвет такой же, как у предка

newbot.direction = (int) (Math.random() * 8); // направление, куда повернут новорожденный, генерируется случайно
newbot.direction = RANDOM.nextInt(8); // направление, куда повернут новорожденный, генерируется случайно

world.setBot(newbot); // отмечаем нового бота в массиве matrix
// todo: https://github.com/xlam/CyberBiology/issues/2
Expand Down Expand Up @@ -980,8 +989,8 @@ public byte[] modifyMind() {
byte[] modified = new byte[3];

// случайным образом меняется один ген
byte ma = (byte) (Math.random() * MIND_SIZE); // 0..63
byte mc = (byte) (Math.random() * MIND_SIZE); // 0..63
byte ma = (byte) RANDOM.nextInt(MIND_SIZE); // 0..63
byte mc = (byte) RANDOM.nextInt(MIND_SIZE); // 0..63

modified[0] = ma;
modified[1] = mind[ma];
Expand Down Expand Up @@ -1289,7 +1298,7 @@ private void addPestGenes() {
int addPest = 3;

for (int i = 0; i < addPest; i++) {
byte ma = (byte) (Math.random() * MIND_SIZE); // 0..63
byte ma = (byte) RANDOM.nextInt(MIND_SIZE); // 0..63
setMind(ma, (byte) 49);
if (pest >= MAX_PEST_GENES) {
break;
Expand Down Expand Up @@ -1319,7 +1328,7 @@ public int imitate(int dir) {
int len = (int) (MIND_SIZE / 4) + RANDOM.nextInt((int) (MIND_SIZE / 4));

// адрес начала участка копирования из генома другого бота
int adrFrom = (int) (Math.random() * MIND_SIZE);
int adrFrom = RANDOM.nextInt(MIND_SIZE);

// адрес начала участка записи в геном бота
// следующая ячейка после параметра команды imitate
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/ru/cyberbiology/MainWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,8 @@ public void mouseClicked(MouseEvent e) {
//buf.append("");
IBotGeneController cont;
for (int i = 0; i < Bot.MIND_SIZE; i++) { //15
int command = bot.mind[i]; // текущая команда

// Получаем обработчика команды
cont = bot.getCurrentCommand();
cont = bot.getGeneControllerForCommand(bot.mind[i]);
// если обработчик такой команды назначен
if (cont != null) {
buf.append("<p>");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ru.cyberbiology.gene;

import java.util.concurrent.ThreadLocalRandom;
import ru.cyberbiology.prototype.IBot;
import ru.cyberbiology.prototype.gene.ABotGeneController;

Expand All @@ -10,9 +11,11 @@
*/
public class GeneFlattenedHorizontally extends ABotGeneController {

private static final ThreadLocalRandom RANDOM = ThreadLocalRandom.current();

@Override
public boolean onGene(IBot bot) {
if (Math.random() < 0.5) { // кидаем монетку
if (RANDOM.nextInt(101) < 50) { // кидаем монетку
bot.setDirection(3); // если ноль, то поворачиваем в одну сторону
} else {
bot.setDirection(7); // если один, то поворачиваем в другую сторону
Expand Down

0 comments on commit f771a22

Please sign in to comment.