Turtle bot: Difference between revisions
From JSXGraph Wiki
A WASSERMANN (talk | contribs) No edit summary |
A WASSERMANN (talk | contribs) No edit summary |
||
Line 114: | Line 114: | ||
</table> | </table> | ||
</html> | </html> | ||
===The underlying JavaScript code=== | |||
====HTML code:==== | |||
<source lang="html4strict"> | |||
<style> | |||
button { | |||
min-width:100px; | |||
} | |||
.record { | |||
background-color: #ffaaaa; | |||
} | |||
</style> | |||
Show recording: <input type="checkbox" id="show_record"><br/> | |||
<button id="btn_record">record</button> | |||
<button id="btn_play">play</button> | |||
<button id="btn_clear">clear screen</button> | |||
<table> | |||
<tr> | |||
<td></td> | |||
<td><button id="btn_forward">forward</button></td> | |||
<td></td> | |||
</tr> | |||
<tr> | |||
<td><button id="btn_left">left</button></td> | |||
<td></td> | |||
<td><button id="btn_right">right</button></td> | |||
</tr> | |||
<tr> | |||
<td></td> | |||
<td><button id="btn_back">back</button></td> | |||
<td></td></tr> | |||
</table> | |||
</source> | |||
====JavaScript code:==== | |||
<source lang="javascript"> | |||
const board = JXG.JSXGraph.initBoard('turtlebox', { | |||
boundingbox: [-500, 500, 500, -500], axis:true | |||
}); | |||
board.defaultAxes.x.setAttribute({visible:false}); | |||
board.defaultAxes.y.setAttribute({visible:false}); | |||
// Global variables: | |||
var turtle = board.create('turtle', [0,0]); | |||
var is_recording = false; | |||
var program = []; | |||
var step; | |||
var angle = 90; | |||
var stepsize = 100; | |||
// Event handlers: | |||
document.getElementById("btn_forward").addEventListener("click", function(evt) { | |||
if (is_recording) { | |||
program.push('turtle.forward(stepsize);'); | |||
if (document.getElementById("show_record").checked) { turtle.forward(100); } | |||
} else { | |||
turtle.forward(stepsize); | |||
} | |||
}); | |||
document.getElementById("btn_back").addEventListener("click", function(evt) { | |||
if (is_recording) { | |||
program.push('turtle.back(stepsize);'); | |||
if (document.getElementById("show_record").checked) { turtle.back(100); } | |||
} else { | |||
turtle.back(stepsize); | |||
} | |||
}); | |||
document.getElementById("btn_left").addEventListener("click", function(evt) { | |||
if (is_recording) { | |||
program.push('turtle.left(angle);'); | |||
if (document.getElementById("show_record").checked) { turtle.left(45); } | |||
} else { | |||
turtle.left(angle); | |||
} | |||
}); | |||
document.getElementById("btn_right").addEventListener("click", function(evt) { | |||
if (is_recording) { | |||
program.push('turtle.right(angle);'); | |||
if (document.getElementById("show_record").checked) { turtle.right(45); } | |||
} else { | |||
turtle.right(angle); | |||
} | |||
}); | |||
document.getElementById("btn_clear").addEventListener("click", function(evt) { | |||
turtle.clearScreen(); | |||
}); | |||
document.getElementById("btn_record").addEventListener("click", function(evt) { | |||
if (!is_recording) { | |||
is_recording = true; | |||
document.getElementById("btn_record").innerHTML = "stop"; | |||
document.getElementById("btn_record").classList.add('record'); | |||
program = []; | |||
board.defaultAxes.x.setAttribute({visible:true}); | |||
board.defaultAxes.y.setAttribute({visible:true}); | |||
turtle.clearScreen(); | |||
} else { | |||
is_recording = false; | |||
document.getElementById("btn_record").innerHTML = "record"; | |||
document.getElementById("btn_record").classList.remove('record'); | |||
board.defaultAxes.x.setAttribute({visible:false}); | |||
board.defaultAxes.y.setAttribute({visible:false}); | |||
turtle.clearScreen(); | |||
} | |||
}); | |||
var do_step = function() { | |||
if (step < program.length) { | |||
eval(program[step]); | |||
step++; | |||
setTimeout(do_step, 500); | |||
} | |||
} | |||
document.getElementById("btn_play").addEventListener("click", function(evt) { | |||
step = 0; | |||
//eval(program); | |||
do_step(); | |||
}); | |||
</source> | |||
[[Category:Examples]] | |||
[[Category:Turtle Graphics]] |
Revision as of 09:11, 13 June 2019
Show recording:
The underlying JavaScript code
HTML code:
<style>
button {
min-width:100px;
}
.record {
background-color: #ffaaaa;
}
</style>
Show recording: <input type="checkbox" id="show_record"><br/>
<button id="btn_record">record</button>
<button id="btn_play">play</button>
<button id="btn_clear">clear screen</button>
<table>
<tr>
<td></td>
<td><button id="btn_forward">forward</button></td>
<td></td>
</tr>
<tr>
<td><button id="btn_left">left</button></td>
<td></td>
<td><button id="btn_right">right</button></td>
</tr>
<tr>
<td></td>
<td><button id="btn_back">back</button></td>
<td></td></tr>
</table>
JavaScript code:
const board = JXG.JSXGraph.initBoard('turtlebox', {
boundingbox: [-500, 500, 500, -500], axis:true
});
board.defaultAxes.x.setAttribute({visible:false});
board.defaultAxes.y.setAttribute({visible:false});
// Global variables:
var turtle = board.create('turtle', [0,0]);
var is_recording = false;
var program = [];
var step;
var angle = 90;
var stepsize = 100;
// Event handlers:
document.getElementById("btn_forward").addEventListener("click", function(evt) {
if (is_recording) {
program.push('turtle.forward(stepsize);');
if (document.getElementById("show_record").checked) { turtle.forward(100); }
} else {
turtle.forward(stepsize);
}
});
document.getElementById("btn_back").addEventListener("click", function(evt) {
if (is_recording) {
program.push('turtle.back(stepsize);');
if (document.getElementById("show_record").checked) { turtle.back(100); }
} else {
turtle.back(stepsize);
}
});
document.getElementById("btn_left").addEventListener("click", function(evt) {
if (is_recording) {
program.push('turtle.left(angle);');
if (document.getElementById("show_record").checked) { turtle.left(45); }
} else {
turtle.left(angle);
}
});
document.getElementById("btn_right").addEventListener("click", function(evt) {
if (is_recording) {
program.push('turtle.right(angle);');
if (document.getElementById("show_record").checked) { turtle.right(45); }
} else {
turtle.right(angle);
}
});
document.getElementById("btn_clear").addEventListener("click", function(evt) {
turtle.clearScreen();
});
document.getElementById("btn_record").addEventListener("click", function(evt) {
if (!is_recording) {
is_recording = true;
document.getElementById("btn_record").innerHTML = "stop";
document.getElementById("btn_record").classList.add('record');
program = [];
board.defaultAxes.x.setAttribute({visible:true});
board.defaultAxes.y.setAttribute({visible:true});
turtle.clearScreen();
} else {
is_recording = false;
document.getElementById("btn_record").innerHTML = "record";
document.getElementById("btn_record").classList.remove('record');
board.defaultAxes.x.setAttribute({visible:false});
board.defaultAxes.y.setAttribute({visible:false});
turtle.clearScreen();
}
});
var do_step = function() {
if (step < program.length) {
eval(program[step]);
step++;
setTimeout(do_step, 500);
}
}
document.getElementById("btn_play").addEventListener("click", function(evt) {
step = 0;
//eval(program);
do_step();
});