Cleanup for submission
parent
d16d3440bc
commit
0bc6937afe
|
@ -1,7 +1,8 @@
|
||||||
/* Lemmings - robot and GUI script.
|
/* Lemmings - robot and GUI script.
|
||||||
*
|
*
|
||||||
* Copyright 2016 Harmen de Weerd
|
* 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
|
* 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
|
* 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
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* 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"
|
"use strict"
|
||||||
// Simulation settings; please change anything that you think makes sense.
|
// Simulation settings; please change anything that you think makes sense.
|
||||||
var simInfo = {
|
var simInfo = {
|
||||||
|
@ -32,6 +43,7 @@ var simInfo = {
|
||||||
debugMouse: true, // allow dragging any object with the mouse
|
debugMouse: true, // allow dragging any object with the mouse
|
||||||
wanderRate: 0.0002,
|
wanderRate: 0.0002,
|
||||||
};
|
};
|
||||||
|
// our own lemming implementation
|
||||||
class Lemming extends Robot {
|
class Lemming extends Robot {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(Object.assign({
|
super(Object.assign({
|
||||||
|
@ -66,6 +78,8 @@ class Lemming extends Robot {
|
||||||
].concat(props.sensors || [])
|
].concat(props.sensors || [])
|
||||||
}, props))
|
}, props))
|
||||||
}
|
}
|
||||||
|
// turn this amount of degrees to a side
|
||||||
|
// exploit prototypal inheritance to temporarily override robot.move
|
||||||
turnDeg(degs, cb) {
|
turnDeg(degs, cb) {
|
||||||
if (Math.abs(degs) >= 320)
|
if (Math.abs(degs) >= 320)
|
||||||
return this.turnDeg(320, x => this.turnDeg(degs -320, cb))
|
return this.turnDeg(320, x => this.turnDeg(degs -320, cb))
|
||||||
|
@ -83,8 +97,7 @@ class Lemming extends Robot {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
move() {
|
move() {
|
||||||
//if (sim.curSteps % 250 == 0) this.turnDeg(-90)
|
// our lemming behaviour
|
||||||
// TODO: Define Lemming program here.
|
|
||||||
const {carry: [r,g,b], dist, wall} = this.getSensors()
|
const {carry: [r,g,b], dist, wall} = this.getSensors()
|
||||||
let block = 0
|
let block = 0
|
||||||
if (r > (g+b)) {
|
if (r > (g+b)) {
|
||||||
|
@ -346,10 +359,12 @@ function redblocksatwall(sim) {
|
||||||
})
|
})
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
// automatically run the experiments based on the values from the html
|
||||||
async function experimentRunner(stopCondition=blocksSorted) {
|
async function experimentRunner(stopCondition=blocksSorted) {
|
||||||
initSimulation()
|
initSimulation()
|
||||||
while(!stopCondition(sim) && sim.curSteps < simInfo.maxSteps) {
|
while(!stopCondition(sim) && sim.curSteps < simInfo.maxSteps) {
|
||||||
sim.runSteps(500)
|
sim.runSteps(500)
|
||||||
|
// take a break for the gui to stay responsive
|
||||||
await promiseTimeout(50)
|
await promiseTimeout(50)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,6 +379,7 @@ async function experimentRunner(stopCondition=blocksSorted) {
|
||||||
sim = null
|
sim = null
|
||||||
return rv
|
return rv
|
||||||
}
|
}
|
||||||
|
// run a number of experiments
|
||||||
async function runExperiments() {
|
async function runExperiments() {
|
||||||
let count = +document.getElementById('ffwdtimes').value
|
let count = +document.getElementById('ffwdtimes').value
|
||||||
while(count--) {
|
while(count--) {
|
||||||
|
@ -411,7 +427,6 @@ class Bay {
|
||||||
robot.sensors.forEach(sensor => {
|
robot.sensors.forEach(sensor => {
|
||||||
makeInteractiveElement(sensor, this.elem)
|
makeInteractiveElement(sensor, this.elem)
|
||||||
})
|
})
|
||||||
// todo: removeinteractiveelement?
|
|
||||||
this.repaint()
|
this.repaint()
|
||||||
}
|
}
|
||||||
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 {
|
class Sensor {
|
||||||
constructor(id, props) {
|
constructor(id, props) {
|
||||||
Object.assign(this, {
|
Object.assign(this, {
|
||||||
|
|
Loading…
Reference in New Issue