JSFiddle - React, Tailwind, and code Playground
HTML
<canvas id="canvas" width="360" height="360"></canvas>
JavaScript
var canvasSize = 360;
var count = 10;
var s = canvasSize / count;
var px = 0;
var py = 0;
var rot = 0;
var context;
function drawPlayer(color) {
var e1x = Math.cos(Math.PI / 180 * -rot);
var e1y = Math.sin(Math.PI / 180 * -rot);
var e2x = -e1y;
var e2y = e1x;
var ox = px + 0.5 * s - 0.125*s*e1x;
var oy = (canvasSize - py - s) + 0.5 * s - 0.125*s*e1y;
context.fillStyle = color;
context.beginPath();
context.moveTo(ox + e2x * 0.25*s, oy + e2y * 0.25*s);
context.lineTo(ox - e2x * 0.25*s, oy - e2y * 0.25*s);
context.lineTo(ox + e1x * 0.25*s, oy + e1y * 0.25*s);
context.lineTo(ox + e2x * 0.25*s, oy + e2y * 0.25*s);
context.fill();
}
function normalizeRotation() {
if (rot == -90) rot = 270;
else if (rot == 360) rot = 0;
}
function normalizePosition() {
var oldx = px;
var oldy = py;
if (oldx < 0) {
px = oldy;
py = -oldx - s;
rot -= 90;
normalizeRotation();
}
else if (oldy < 0) {
px = -oldy - s;
py = oldx;
rot += 90;
normalizeRotation();
}
else if (oldx >= canvasSize) {
px = oldy;
py = 2*canvasSize - oldx - s;
rot -= 90;
normalizeRotation();
}
else if (oldy >= canvasSize) {
px = 2*canvasSize - oldy - s;
py = oldx;
rot += 90;
normalizeRotation();
}
}
function moveForward() {
drawPlayer('#808080');
if (rot == 0) {
px = px + s;
}
else if (rot == 90) {
py = py + s;
}
else if (rot == 180) {
px = px - s;
}
else {
py = py - s;
}
normalizePosition();
drawPlayer('#000000');
}
function moveBackward() {
drawPlayer('#808080');
if (rot == 0) {
px = px - s;
}
else if (rot == 90) {
py = py - s;
}
else if (rot == 180) {
px = px + s;
}
else {
py = py + s;
}
normalizePosition();
...