Cleanup for submission

master
Yorick van Pelt 2017-12-03 23:37:44 +01:00
parent d16d3440bc
commit 0bc6937afe
2 changed files with 38 additions and 5 deletions

View File

@ -1,7 +1,8 @@
/* Lemmings - robot and GUI script.
*
* Copyright 2016 Harmen de Weerd
* Copyright 2017 Johannes Keyser, James Cooke, George Kachergis, Yorick van Pelt
* Copyright 2017 Johannes Keyser, James Cooke, George Kachergis
* Copyright 2017 Niels Boer, Tanja van Alfen, Yorick van Pelt
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -16,6 +17,16 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
The simulator was edited quite extensively to make it easier to work with.
The essential changes are the color sensor and gyroscope (in sensors.js) and the robot behavior
(in class Lemming in this file). Sensor placement was changed as well.
Other changes: object-orientation. es6. fixed the bay. consolidated drawing behavior,
svg pathseg workaround, robot debug display. Huge rewrites.
Feel free to use any of this code.
*/
// es6 modules are behind a flag in firefox.
// import { ColorSensor, DistanceSensor, Gyroscope } from './sensors.js'
"use strict"
// Simulation settings; please change anything that you think makes sense.
var simInfo = {
@ -32,6 +43,7 @@ var simInfo = {
debugMouse: true, // allow dragging any object with the mouse
wanderRate: 0.0002,
};
// our own lemming implementation
class Lemming extends Robot {
constructor(props) {
super(Object.assign({
@ -66,6 +78,8 @@ class Lemming extends Robot {
].concat(props.sensors || [])
}, props))
}
// turn this amount of degrees to a side
// exploit prototypal inheritance to temporarily override robot.move
turnDeg(degs, cb) {
if (Math.abs(degs) >= 320)
return this.turnDeg(320, x => this.turnDeg(degs -320, cb))
@ -83,8 +97,7 @@ class Lemming extends Robot {
}
}
move() {
//if (sim.curSteps % 250 == 0) this.turnDeg(-90)
// TODO: Define Lemming program here.
// our lemming behaviour
const {carry: [r,g,b], dist, wall} = this.getSensors()
let block = 0
if (r > (g+b)) {
@ -346,10 +359,12 @@ function redblocksatwall(sim) {
})
return result
}
// automatically run the experiments based on the values from the html
async function experimentRunner(stopCondition=blocksSorted) {
initSimulation()
while(!stopCondition(sim) && sim.curSteps < simInfo.maxSteps) {
sim.runSteps(500)
// take a break for the gui to stay responsive
await promiseTimeout(50)
}
@ -364,6 +379,7 @@ async function experimentRunner(stopCondition=blocksSorted) {
sim = null
return rv
}
// run a number of experiments
async function runExperiments() {
let count = +document.getElementById('ffwdtimes').value
while(count--) {
@ -411,7 +427,6 @@ class Bay {
robot.sensors.forEach(sensor => {
makeInteractiveElement(sensor, this.elem)
})
// todo: removeinteractiveelement?
this.repaint()
}
repaint() {

View File

@ -1,5 +1,23 @@
// Description of robot(s), and attached sensor(s) used by InstantiateRobot()
/* Lemmings - sensor code.
*
* Copyright 2016 Harmen de Weerd
* Copyright 2017 Johannes Keyser, James Cooke, George Kachergis
* Copyright 2017 Niels Boer, Tanja van Alfen, Yorick van Pelt
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class Sensor {
constructor(id, props) {
Object.assign(this, {