18 Commits

Author SHA1 Message Date
Khalid Ali
401190e1d8 Merge 3b12e2aeca into ac374f5b52 2024-11-10 19:54:52 -08:00
ac374f5b52 Merge pull request #247 from nekojanai/remove-dead-uri
Remove dead URI muchassemblyrequired.com
2024-10-23 20:37:03 -04:00
nekojanai
d01eac646f Update README.md
The website muchassemblyrequired.com no longer points to anything related to this repo.

I suggest also removing the URI from the description.
2024-10-23 20:53:42 +02:00
35b48ddd95 Merge pull request #243 from mavlushechka/master
Update installation guide on Arch Linux
2022-05-01 14:11:43 -04:00
Mavlon
5a0c5b6911 Update installation guide on Arch Linux
Change the package manager from pacman to yay which installs mongodb.

Beginning with January 2019 mongodb package is not available in the official Arch repositories and can't be installed using pacman. Instead of pacman you can use yay to compile mongodb or install prebuilt mongodb-bin. To compile mongodb you should have 260 GB available on your hard disk, so mongodb-bin is easier to install.

As a result, guide is now correct for Arch Linux users.
2022-05-01 16:41:52 +05:00
a85e672eb9 Update docker-compose.yml 2021-03-20 09:59:13 -04:00
053d3e35ec Merge pull request #238 from simon987/dependabot/maven/Server/junit-junit-4.13.1
Bump junit from 4.12 to 4.13.1 in /Server
2020-10-28 21:29:13 -04:00
dependabot[bot]
35140cc834 Bump junit from 4.12 to 4.13.1 in /Server
Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases)
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md)
- [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-13 04:57:43 +00:00
6a9c656e66 Merge pull request #237 from helloausrine/master
DOC: Improvements
2020-10-03 18:58:01 -04:00
helloausrine
d07a59607f Update README.md 2020-10-03 18:10:38 +10:00
Khalid Ali
3b12e2aeca Set unique HWID 2020-09-17 22:56:06 -04:00
Khalid Ali
0c3a3f06f0 Add Beta and Gamma particles; added suggestions 2020-09-17 10:47:18 -04:00
Khalid Ali
2aeca6c9ce Small cleanup 2020-09-16 21:13:08 -04:00
Khalid Ali
3c16bd3f30 Implement RadiationDetector's handleInterrupt 2020-09-16 21:10:39 -04:00
Khalid Ali
a3c4c33300 Add getAlphaCounts() to Radioactive interface 2020-09-16 20:37:18 -04:00
Khalid Ali
72ea92ffb3 Add Euclidean Distance calculation method from coords 2020-09-16 20:13:33 -04:00
Khalid Ali
f526f369c4 Add getTiles() to calculate tiles between two coords 2020-09-16 20:03:06 -04:00
Khalid Ali
e97770f860 Skeleton setup + Tuple Impl 2020-09-16 18:45:12 -04:00
5 changed files with 197 additions and 11 deletions

View File

@@ -0,0 +1,176 @@
package net.simon987.pluginradioactivecloud;
import java.util.ArrayList;
import org.bson.Document;
import net.simon987.server.assembly.HardwareModule;
import net.simon987.server.assembly.Status;
import net.simon987.server.game.objects.ControllableUnit;
import net.simon987.server.game.objects.GameObject;
import net.simon987.server.game.objects.Radioactive;
public class RadiationDetector extends HardwareModule {
/**
* Should be unique and same as HWID
*/
public static final int DEFAULT_ADDRESS = 0x000E;
/**
* Hardware ID (Should be unique)
*/
public static final char HWID = 0x000E;
/**
* Radiation Constants
*/
private static final int ALPHA_BLOCKED_VALUE = 5;
private static final int BETA_BLOCKED_VALUE = 2;
private static final int GAMMA_BLOCKED_VALUE = 1;
/**
* Helper class for getTiles
*/
private class Tuple {
public final int x;
public final int y;
public Tuple(int x, int y) {
this.x = x;
this.y = y;
}
}
/**
* Finds the tiles between the two tiles located at the given coordinates. The
* tiles located at the coordinates are not included in the list.
*
* @param x0 x-coordinate of first point
* @param y0 y-coordinate of first point
* @param x1 x-coordinate of second point
* @param y1 y-coordinate of second point
* @return List of tile coordinates. An empty list indicates tiles are next to
* each other.
*/
public ArrayList<Tuple> getTiles(int x0, int y0, int x1, int y1) {
ArrayList<Tuple> ret = new ArrayList<>();
double slope;
if (x1 > x0) {
slope = (y1 - y0) / (double) (x1 - x0);
} else {
slope = (y0 - y1) / (double) (x0 - x1);
// Swap values so that x0 < x1. This preps the following code where y is
// determined by adding a step value (1) to x0 till it reaches x1.
int tmp = x1;
x1 = x0;
x0 = tmp;
tmp = y1;
y1 = y0;
y0 = tmp;
}
// If slope is zero or undefined, return tiles directly along the
// appropriate cardinal direction.
if (x0 == x1) {
int smaller = Math.min(y0, y1);
int larger = Math.max(y0, y1);
System.out.printf("%d %d", smaller, larger);
for (int i = smaller + 1; i < larger; i++) {
ret.add(new Tuple(x0, i));
}
} else if (y0 == y1) {
int smaller = Math.min(x0, x1);
int larger = Math.max(x0, x1);
for (int i = smaller + 1; i < larger; i++) {
ret.add(new Tuple(i, y0));
}
} else {
// Find all coordinates with 0.1 step
int lastX = x0;
int lastY = y0;
for (int i = x0 * 10; i < x1 * 10; i += 1) {
if (i / 10 != lastX || (int) (slope * i / 10) != lastY) {
// Update last values
lastX = i / 10;
lastY = (int) (slope * i / 10);
// Add new values to array
ret.add(new Tuple(lastX, lastY));
}
}
}
return ret;
}
/**
* Finds the Euclidean Distance between two coordinates.
*
* @param x0 x-coordinate of first point
* @param y0 y-coordinate of first point
* @param x1 x-coordinate of second point
* @param y1 y-coordinate of second point
* @return distance between two points
*/
public double getDistanceOfCoords(int x0, int y0, int x1, int y1) {
return Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));
}
public RadiationDetector(ControllableUnit unit) {
super(null, unit);
}
public RadiationDetector(Document document, ControllableUnit cubot) {
super(document, cubot);
}
@Override
public void handleInterrupt(Status status) {
// Find all game entities in world
ArrayList<GameObject> entities = new ArrayList<>(unit.getWorld().getGameObjects());
// Check for alpha particles by finding Radioactive entities
int alphaParticles = 0;
int betaParticles = 0;
int gammaParticles = 0;
for (GameObject entity : entities) {
if (entity instanceof Radioactive) {
// Calculate distance between object and cubot
double pathLength = getDistanceOfCoords(unit.getX(), unit.getY(), entity.getX(), entity.getY());
alphaParticles += ((Radioactive) entity).getAlphaCounts(pathLength);
betaParticles += ((Radioactive) entity).getBetaCounts(pathLength);
gammaParticles += ((Radioactive) entity).getGammaCounts(pathLength);
// Get all tiles in between cubot and Radioactive entity
ArrayList<Tuple> tiles = getTiles(unit.getX(), unit.getY(), entity.getX(), entity.getY());
for (Tuple tup : tiles) {
// If intermediary tile is blocked, reduce alphaParticles by 5
if (unit.getWorld().isTileBlocked(tup.x, tup.y)) {
alphaParticles -= ALPHA_BLOCKED_VALUE;
betaParticles -= BETA_BLOCKED_VALUE;
gammaParticles -= GAMMA_BLOCKED_VALUE;
}
}
}
}
// Save Alpha Radioactive Particles to register A
getCpu().getRegisterSet().getRegister("A").setValue(alphaParticles);
// Save Beta Radioactive Particles to register B
getCpu().getRegisterSet().getRegister("B").setValue(betaParticles);
// Save Gamma Radioactive Particles to register C
getCpu().getRegisterSet().getRegister("C").setValue(gammaParticles);
}
@Override
public char getId() {
return HWID;
}
}

View File

@@ -1,10 +1,9 @@
### [Official website](https://muchassemblyrequired.com)
# Much-Assembly-Required
[![CodeFactor](https://www.codefactor.io/repository/github/simon987/much-assembly-required/badge)](https://www.codefactor.io/repository/github/simon987/much-assembly-required)
[![Build Status](https://ci.simon987.net/buildStatus/icon?job=Much-Assembly-Required)](https://ci.simon987.net/job/Much-Assembly-Required/)
Program the 8086-like microprocessor of a robot in a grid-based multiplayer world. The game is web based so no installation is required.
In its current state, players can walk around the game universe and collect Biomass blobs & Iron/copper ore using the online code editor.
**Much Assembly Required** allows you to program the 8086-like microprocessor of a robot in a grid-based multiplayer world. The game is web based so no installation is required. In its current state, players can walk around the game universe and collect Biomass blobs and Iron/copper ore using the online code editor.
![screenshot from 2017-11-12 13-01-43](https://user-images.githubusercontent.com/7120851/32701793-e5d07e98-c7a9-11e7-9931-f8db7b287994.png)
@@ -24,13 +23,14 @@ sudo apt install git maven openjdk-8-jdk mongodb
On Arch:
``` bash
sudo pacman -S git maven mongodb jdk8-opendjk
sudo pacman -S git maven jdk8-opendjk
yay -S mongodb-bin
# Don't forget to start mongodb
sudo systemctl start mongodb.service
```
*If needed, visit [troubleshooting mongodb](https://wiki.archlinux.org/index.php/MongoDB#Troubleshooting).*
*If needed, visit [yay installation](https://github.com/Jguer/yay#installation) and [troubleshooting mongodb](https://wiki.archlinux.org/index.php/MongoDB#Troubleshooting).*
**Deploying server**
@@ -51,12 +51,12 @@ java -jar server-1.4a.jar
Installation instructions:
1. Download the JDK from [here](http://www.oracle.com/technetwork/java/javase/downloads/index.html).
Install the JDK and update your PATH and JAVA_HOME enviroment variables.
Install the JDK and update your PATH and JAVA_HOME environment variables.
2. Download Maven from [here](https://maven.apache.org/).
Install Maven (following the README) and update your PATH enviroment variable.
Install Maven (following the README) and update your PATH environment variable.
3. Download Mongo DB Community from [here](https://www.mongodb.com/download-center#community).
Install Mongo DB following the instructions [here](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/).
Update your PATH enviroment variable.
Update your PATH environment variable.
Building instructions:
```batch

View File

@@ -92,7 +92,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@@ -6,5 +6,15 @@ package net.simon987.server.game.objects;
public interface Radioactive {
public default int getAlphaCounts(double distance) {
return (int) (1000 * 1.0 / (distance * distance));
}
public default int getBetaCounts(double distance) {
return (int) (2000 * 1.0 / (distance * distance));
}
public default int getGammaCounts(double distance) {
return (int) (5000 * 1.0 / (distance * distance));
}
}

View File

@@ -19,9 +19,9 @@ services:
- ./data/db:/data/db
ports:
- 27017:27017
command: mongod --smallfiles --logpath=/dev/null --port 27017
command: mongod --logpath=/dev/null --port 27017
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/mar --quiet
interval: 2s
timeout: 2s
retries: 2
retries: 2