Cleanup for submission
parent
d16d3440bc
commit
0bc6937afe
|
@ -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() {
|
||||
|
|
20
sensors.js
20
sensors.js
|
@ -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, {
|
||||
|
|
Loading…
Reference in New Issue